Показать сообщение отдельно
  #3  
Старый 18.01.2014, 13:45
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Meepo
Вопрос меня мучает уже далеко не первый день, и не первую неделю, но ответов я так и не нашел (серьезно, гугл выдает совсем не ту информацию).
Сначала лучше прочитать хороший учебник по Delphi.
Цитата:
Сообщение от Meepo
В общем, допустим я в своей программе динамически создаю компонент, и мне нужно присвоить его обработчику (например, OnClick) свою процедуру.
Присваивать нужно не процедуру, а метод объекта соответствующего типа. Обработчиком называется не свойство объекта, а сам метод который присваивается этому свойству. Это называется "Делегирование события" когда событие произошедшее в одном объекте (у тебя это динамически созданный компонент) обрабатывает другой объект (Form1).
Цитата:
Сообщение от Meepo

Нужно ли всякий раз писать (Sender: TObject)?
Если используются уже разработанные классы, то нужно использовать их именно так, как они объявлены. Если разрабатывается свой класс, то очень желательно использовать этот подход в своих типах обработчиков событий, чтобы объект обрабатывающий событие знал чьё событие он обрабатывает.
Цитата:
Сообщение от Meepo
И как передать в эту процедуру (при нажатии на этот компонент) свое значение?
Вот через Sender добираешься к объекту вызвавшему событие и получаешь от него все нужные значения.
Цитата:
Сообщение от Meepo
Т.е. если мне, скажем, нужно передать какое-то число, то мне нужно создать процедуру:

Код:
procedure TForm1.myProcedure(Sender: TObject; chislo: integer);
Это не процедура, это метод
Цитата:
Сообщение от Meepo

Но как ее назначить обработчику?
Это и есть обработчик события и присваивать его нужно однотипному свойству другого объекта.
Цитата:
Сообщение от Meepo
по второму параметру - понятно, а по первому - нет, т.к. я не могу передать ни Self, ни nil, ибо компилятор Delphi начинает ругаться что-то про несовместимость.
Через параметр Sender объект у которого произошло событие передаёт указатель на себя (Self) тому объекту который будет обрабатывать это событие.
Ответить с цитированием