![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Locky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.4.2006 Репутация: нет Всего: нет |
Ситуация следующая.
Создается класс на базе TChartSeries. Требуется добавить к нему несколько дополнительных полей.
Вопрос в следующем. Мне нужно, чтобы объект создавался не ChartSeries, а LineSeries, PointSeries или AreaSeries в зависимости от параметра gt. Возможно ли так сделать? Разумеется, не создавая отдельные классы под разные типы графиков. Заранее благодарен. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Locky, возможен только следующий вариант новый класс должен содержать в себе все объекты перечисленных классов. содержать переменные процедурного типа. Затем в конструкторе создавть нужный объект и присваивать все его методы, так как это реализовано в KOL. Можно и подругому в public объявить их общего предка, а в конструкторе создавать любого его наследника и привваивать переменной предка таким образом прдок будет реагировать как любой его наследник. Пример - реализация lines в memo(можно посмотреть код VCL) - описан как абстрактный TStings, реализуется на самом деле TMemoStrings.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Locky |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.4.2006 Репутация: нет Всего: нет |
Т.е., если я правильно понял, Вы говорите о подобном варианте:
Я так изначально делал и действительно так получалось, но в определенный момент у меня возникла следующая ситуация (я просматриваю сериесы, которые ассоциированны с определенным TChart):
При этом я точно знаю, что все сериесы в данном чарте, являются полями ser из соответствующих TUniSeries, но как добраться до самого UniSeries неясно. Это вообще возможно? |
||||||
|
|||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Может так TUniSeries(ch.SeriesList[i]).CatNum или я вопрос не понял??
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Locky |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.4.2006 Репутация: нет Всего: нет |
Наверное, тут как раз я недопонимаю ситуацию. Я полагал так, что если я обращаюсь к ch.SeriesList[i], то это обращение к сериесу. А поле CatNum ведь не у сериеса, а у класса TUniSeries. Так как Вы предложили я тоже пробовал реализовывать. Получилось, что всегда поле CatNum равно 0, хотя реально оно не 0. Мне пришел в голову только один выход, но я не знаю насколько он вообще правомочен. Все объекты типа TUniSeries у меня хранятся в NumSerList, который определен как TList. А далее я делаю так:
Т.е. я сравниваю непосредственно переменную, куда присвоен сериес из чарта и поле ser объекта TUniSeries из листа, где они хранятся. Если равенство, то я беру текущий TUniSeries из листа. Вроде бы так получилось, но мне хотелось бы понять - это вообще нормальный или "кривой" подход. Вдруг, если подход "кривой" он в дальнейшем даст какие-то проблемы (сбои)? |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Locky, Это и называется полиморфизм
Единственное чего следует избегать это uninls := nil; - тогда удаляется реальный объект, вместо этого следует использовать pointer(uninls) := nil; для очистки переменной -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Locky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.4.2006 Репутация: нет Всего: нет |
Иными словами - сие правильно? Про приравнивание nil я уже в курсе Спасибо за консультацию. Последний вопрос: Правильно ли я понимаю, что при присвоении одной объектной переменной другой, они указывают на один и тот же адрес в памяти? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Конечно! Ведь объектная переменная это и есть указатель -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |