| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Головоломка ООП |
| Автор: KrasAI 3.6.2010, 22:33 | ||||
| Здравствуйте уважаемые. Нужен совет опытных программистов. И так по порядку: Есть (пишется) визуальный компонент, ну пусть зовут его TMyComponent наследник TCustomControl. Суть этого компонента заключается в хранении неких не визуальных объектов (TMyObject). Каждому экземпляру TMyObject, когда он добавляется в TMyComponent, в поле TMyObject.Owner (TMyObject->FOwner: TObject) записывается указатель владельца, т.е. на сам TMyComponent. Теперь собственно головоломка: Как сгенерировать событие у TMyComponent при изменении самого TMyObject??? т.е.
Какое решение выбрал я: у объекта TMyObject описал метод SendМessage(id,w,l:LongInt); который вызывается в методе TMyObject.Method и отправляет сообщение владельцу FOwner (MyComponent). Этот компонент получив сообщение, в соответствующей процедуре генерирует событие MyComponent.OnEvent; Ну примерно так:
Вот так. Жду критики. Может есть решение пороще? Спасибо за внимание. p.s. предложение вызывать из TmyObject методы владельца TMyComponent, эт недело. TMyObject ничего о них не знает. |
| Автор: Rennigth 4.6.2010, 10:01 | ||
| 1. Зачем создавать окно (TCustomControl) для хранения объектов? 2. Почему бы не сделать у TMyComponent событие которое будут вызывать TMyObjects? Что-то вроде...
3. Посмотри на реализацию TList, TStringList и т.д. (например как у них работает Notify). |
| Автор: KrasAI 4.6.2010, 10:34 | ||||||||||
Спасибо, что ответили.
Ну, TMyComponet - необходимо чтобы был визуальным, в его функциональность входит поочередное отображение (графическое) хранящихся в нем объектов (TMyObject).
я же писал выше :
Дело в том, что нехочется делать таких связей. Получится "сетка" классов которые по отдельности бесполезны. Ну в тотже TStringList можно добавить любой объект
Ну здесь чуть другое, у класса TStringList есть метод Changing, он и возбуждает событие FOnChanging(Self), т.е. класс сам возбуждает описанное в нем же событие. У меня ситуация иная, объект TMyObject не знает ничего о методах TMyComponent. Вот как проще всего передать информацию о изменении экземпляра TMyObject в TMyComponent (имея лишь ссылку TMyObject.Owner: TObject); Спасибо. |