![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Naf |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.4.2007 Репутация: нет Всего: нет |
Имеется слой бизнес-логики, в который входит класс TMetaObject, который содержит событие
От этого класса наследуются другие. В слои визуального представления (формы) вызывается создание объекта потомка TMetaObject. При этом происходят манипуляции в бизнес-логике и наконец вызывается событие OnInsertObject, параметром Sender является объект, вызваший его. Теперь в зависимости от типа Sender должно открыться то или иное диалоговое окно. Как узнать какое диалоговое окно открыть? Не очень хочется пользоваться конструкцией:
|
||||
|
|||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
В классе TMetaObject объявить метод(абстрактный) ShowDialogWindow, и перекрыть(override) его в наследниках.
После этого в обработчике OnInsertObject вызывать этот метод. |
|||
|
||||
| Naf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.4.2007 Репутация: нет Всего: нет |
Не хотелось бы, вдруг я решу классы бизнес-логики поместить не только в свое приложение, но и в dll превратив их в COM-интерфейсы?
|
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Naf, тогда только if is, к типу класса даже case не прикрутишь. Можно конечно придумать какой-нибудь механизм с регистрацией всех наследников TMetaObject, и какой-нибудь manager будет рулить и распозновать их. Но это тебе уже решать насколько тебе критична универсальность.
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Bose |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
ну тогда вместо вызова метода общего предка делать запрос интерфейса и вызывать метод показывающий это окно. Например:
Либо, как вариант, вводи свою классификацию типов объектов(либо типов DialogWindow) Tmetatype(например). Пусть каждый из наследников TmetaObject возвращает своё собственное значение. И тогда вместо
используй что-то в типа
Но это, имхо полезно только в случае, если во что бы то ни стало хочешь отвязаться от сравнения классов... |
||||||||
|
|||||||||
![]()
|
| Правила форума "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. |