|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Назначение процедуры для обработчика
Доброго времени суток всем.
Вопрос меня мучает уже далеко не первый день, и не первую неделю, но ответов я так и не нашел (серьезно, гугл выдает совсем не ту информацию). В общем, допустим я в своей программе динамически создаю компонент, и мне нужно присвоить его обработчику (например, OnClick) свою процедуру. Нужно ли всякий раз писать (Sender: TObject)? И как передать в эту процедуру (при нажатии на этот компонент) свое значение? Т.е. если мне, скажем, нужно передать какое-то число, то мне нужно создать процедуру: Код:
procedure TForm1.myProcedure(Sender: TObject; chislo: integer); Но как ее назначить обработчику? по второму параметру - понятно, а по первому - нет, т.к. я не могу передать ни Self, ни nil, ибо компилятор Delphi начинает ругаться что-то про несовместимость. Может есть какие-то способы решения этого вопроса? |
#2
|
||||
|
||||
Цитата:
Передача дополнительных параметров в обработчики, как можно догадаться, обычно делается через контекст экземпляра одной из взаимодействующих сторон. Для этого в компонентах VCL предусмотрено свойство Tag, которому можно присвоить числовое значение, а программно -- и указатель. Не стоит путать форумы с богадельнями. © Bargest |
Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
Meepo (18.01.2014)
|
#3
|
|||||||
|
|||||||
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Meepo (18.01.2014)
|
#4
|
|||
|
|||
Спасибо всем отписавшим.
Как я понял, в уже разработанные компоненты нельзя передать дополнительные (свои) методы через обработчик события, т.е. если у OnClick кнопки (TButton) Sender: TObject - я не могу ничего добавить? Только в обработчике (в своем) добираться через Sender передавшего объекта и выполнять какие-то определенные действия? Другого не дано, я так понимаю? |
#5
|
||||
|
||||
Цитата:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Meepo (18.01.2014)
|
#6
|
|||
|
|||
Понятно. Я в принципе так и делал, но это как-то неудобно... Было бы гораздо проще, если бы можно было передавать какие-то значения в обработчик.
Это пожалуй все, что я хотел узнать. Всем спасибо еще раз. |
#7
|
||||
|
||||
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Meepo (19.01.2014)
|
#8
|
|||
|
|||
Я динамически создаю пункты меню в TMainMenu, и мне необходимо передавать свой параметр (строковый), с которым работает обработчик OnClick. Закинуть его в Tag нельзя, приходится колдовать, создавать пункты с именами нужного значения, и в обработчике OnClick - снимать с имени передавшего указатель на себя пункта. Но проблема лежит дальше, т.к. кроме TMainMenu я также создаю TPopupMenu (для значка в трее), и приходится давать другое имя, и в обработчике уже снимать первые несколько букв, определяя тем самым строковое значение, и выполнять действие.
Возможно, это глупо, но до другого метода я не додумался. Поэтому было бы проще, если бы можно было в обработчик передавать дополнительные параметры, тогда плясок с бубном было бы меньше. P.S. Можно завести конечно глобальную переменную для этого, но большое кол-во глобальных переменных - не есть хорошо. Последний раз редактировалось Meepo, 19.01.2014 в 13:34. |
#9
|
||||
|
||||
обработчику и так параметр передается Sender: TObject
Пишу программы за еду. __________________ |
#10
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |