| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Несколько обработчиков на событие. Не наследование |
| Автор: SpaceIQ 2.7.2009, 16:52 | ||||
| Кто как устанавливает несколько обработчиков на одно событие? У меня есть способ, но у него есть одно нехорошое следсвие. Например, у меня есть TComboBox с установленным событиями OnChange. При выборе опредленного значения из списка просходит отключение тех или иных частей формы. Но так же есть и некоторый класс, которому необходимо использовать событие OnChange этого списка. То есть два обработчика: StandartFunction - метод формы, определяется как обычно, например двойным нажатием на виджету на форме. NewFunction - метод внешнего класса. Я делаю так: 1. Внутри класса, перед изменение обработчка события, сохраняю ссылку на старый обработчик:
2. Внутри нового обработчика (NewFunction) пишу вызов старого:
3. Потом опять устанавливаю новый обработчик NewFunction, по аналогии в первом шаге. Но при таком способе [TEdit.OnChange( Self )] в обработчике StandartFunction нельзя обратиться к форме через Self, почему то стандартный метод обработки теперь рассмативается как внешний. Какие мысли у кого есть по этому поводу? Или может другие способы установки нескольких обработчиков? |
| Автор: Rennigth 2.7.2009, 17:38 | ||
| SpaceIQ, что-то ты немного перемудрил... вообщем примерно вот так:
|
| Автор: Frees 3.7.2009, 07:35 | ||
вот еще вариант
|
| Автор: MetalFan 3.7.2009, 08:45 |
| Frees, хм, а это точно работает без ошибок? имеется мнение, что @Event не имеет смысла, ибо Event динамическая запись из двух указателей... я делал нечто подобное, только хранил два указателя (TMethod). |
| Автор: Frees 3.7.2009, 09:02 | ||
работает но с пристрастием не тестил ты это место имееш в виду
@ne - это не event а ссылка на проседуру |
| Автор: MetalFan 3.7.2009, 11:06 | ||||
| Frees, не на процедуру, а на ЗАПИСЬ (из двух указателей, на класс и на код метода), описывающую метод класса. это несколько разные вещи. если потестишь с пристрастием, то наверняка вылезут глюки) я в свое время писал нечто такое: 1. базовый класс - список методов.
2. и пример наследника - списка нотификации о смене активной формы приложения.
можно конечно без базового класса, но у мне надо было в нескольких местах несколько разных типов методов обрабатывать. код 99,9% рабочий, ибо взят из реального проекта. |
| Автор: Frees 3.7.2009, 12:29 | ||
глюк не нашел чет не то ели бы было так как ты говориш то мой код бы не работал в OnClick храниться ссылка на процедуру
где тут запись? |
| Автор: Frees 3.7.2009, 15:07 |
я сохранял не метод а процедуру |
| Автор: MetalFan 3.7.2009, 17:17 | ||
ne в данном случае содержит информацию о методе объекта. а не только указатель на процедуру. |
| Автор: SpaceIQ 4.7.2009, 15:19 |
| Rennigth, MetalFan, Frees спасибо большое! В ваших сообщениях я нашел все что мне было нужно! |