|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Назначение процедуры для обработчика Доброго времени суток всем. Вопрос меня мучает уже далеко не первый день, и не первую неделю, но ответов я так и не нашел (серьезно, гугл выдает совсем не ту информацию). В общем, допустим я в своей программе динамически создаю компонент, и мне нужно присвоить его обработчику (например, OnClick) свою процедуру. Нужно ли всякий раз писать (Sender: TObject)? И как передать в эту процедуру (при нажатии на этот компонент) свое значение? Т.е. если мне, скажем, нужно передать какое-то число, то мне нужно создать процедуру: Код: procedure TForm1.myProcedure(Sender: TObject; chislo: integer); Но как ее назначить обработчику? по второму параметру - понятно, а по первому - нет, т.к. я не могу передать ни Self, ни nil, ибо компилятор Delphi начинает ругаться что-то про несовместимость. Может есть какие-то способы решения этого вопроса? | 
| 
			 
			#2  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Передача дополнительных параметров в обработчики, как можно догадаться, обычно делается через контекст экземпляра одной из взаимодействующих сторон. Для этого в компонентах VCL предусмотрено свойство Tag, которому можно присвоить числовое значение, а программно -- и указатель. | 
| Этот пользователь сказал Спасибо 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 |