![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| SpaceIQ |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 2.7.2009 Репутация: нет Всего: нет |
Кто как устанавливает несколько обработчиков на одно событие?
У меня есть способ, но у него есть одно нехорошое следсвие. Например, у меня есть TComboBox с установленным событиями OnChange. При выборе опредленного значения из списка просходит отключение тех или иных частей формы. Но так же есть и некоторый класс, которому необходимо использовать событие OnChange этого списка. То есть два обработчика: StandartFunction - метод формы, определяется как обычно, например двойным нажатием на виджету на форме. NewFunction - метод внешнего класса. Я делаю так: 1. Внутри класса, перед изменение обработчка события, сохраняю ссылку на старый обработчик:
2. Внутри нового обработчика (NewFunction) пишу вызов старого:
3. Потом опять устанавливаю новый обработчик NewFunction, по аналогии в первом шаге. Но при таком способе [TEdit.OnChange( Self )] в обработчике StandartFunction нельзя обратиться к форме через Self, почему то стандартный метод обработки теперь рассмативается как внешний. Какие мысли у кого есть по этому поводу? Или может другие способы установки нескольких обработчиков? Это сообщение отредактировал(а) SpaceIQ - 2.7.2009, 17:11 |
||||
|
|||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
SpaceIQ,
что-то ты немного перемудрил... вообщем примерно вот так:
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
вот еще вариант
Это сообщение отредактировал(а) Frees - 3.7.2009, 07:42 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Frees, хм, а это точно работает без ошибок? имеется мнение, что @Event не имеет смысла, ибо Event динамическая запись из двух указателей...
я делал нечто подобное, только хранил два указателя (TMethod). -------------------- There are always someone smarter than you... |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
работает но с пристрастием не тестил ты это место имееш в виду
@ne - это не event а ссылка на проседуру -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| MetalFan |
|
||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Frees, не на процедуру, а на ЗАПИСЬ (из двух указателей, на класс и на код метода), описывающую метод класса. это несколько разные вещи. если потестишь с пристрастием, то наверняка вылезут глюки)
я в свое время писал нечто такое: 1. базовый класс - список методов.
2. и пример наследника - списка нотификации о смене активной формы приложения.
можно конечно без базового класса, но у мне надо было в нескольких местах несколько разных типов методов обрабатывать. код 99,9% рабочий, ибо взят из реального проекта. -------------------- There are always someone smarter than you... |
||||
|
|||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
глюк не нашел чет не то ели бы было так как ты говориш то мой код бы не работал в OnClick храниться ссылка на процедуру
где тут запись? -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
твой код работает в данном простом случае и примитивном приложении. но если ты не делаешь разницы между процедурой и методом объекта, то дальнейший спор считаю бессмысленным. Добавлено через 8 минут и 28 секунд хотя я может что-то путаю но у меня возникали проблемы с хранением просто указателя на TMethod... -------------------- There are always someone smarter than you... |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
я сохранял не метод а процедуру -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
ne в данном случае содержит информацию о методе объекта. а не только указатель на процедуру. Это сообщение отредактировал(а) MetalFan - 3.7.2009, 17:17 -------------------- There are always someone smarter than you... |
|||
|
||||
| SpaceIQ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 2.7.2009 Репутация: нет Всего: нет |
Rennigth, MetalFan, Frees спасибо большое! В ваших сообщениях я нашел все что мне было нужно!
|
|||
|
||||
![]()
|
| Правила форума "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. |