Как присвоить событие в run-timeDelphi , Компоненты и Классы , RTTIКак присвоить событие в run-time
Автор: Vit type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); private procedure Click(Sender: TObject); end; var Form1: TForm1; implementation procedure TForm1.Click(Sender: TObject); begin // do something end; procedure TForm1.FormCreate(Sender: TObject); begin button1.OnClick := Click; end; end. А как сделать чтобы "procedure Click" была не методом класса, а отдельно стоящей функцией Дополнил: Le Taon procedure Click(Self: TObject; Sender: TObject); begin ... end; var evhandler: TNotifyEvent; TMethod(evhandler).Code := @Click; TMethod(evhandler).Data := nil; Button1.OnClick := evhandler; // Без извращений можно так: TDummy = class class procedure Click(Sender: TObject); end; Button1.OnClick := TDummy.Click; По идее, при вызове OnClick первым параметром будет запихнут указатель на экземпляр того класса который в этом OnClick хранится . Я в низкоуровневой реализации не силен, но кажись, так как параметры в процедурах в Delphi передаются через регистры, то ничего страшного не произойдет. Еще дополнение от: Fantasist procedure C(Self: pointer; Sender: TObject); begin TButton(Sender).Caption := 'ee'; end; procedure TForm1.FormCreate(Sender: TObject); begin @Button1.OnClick := @c; end; Self тут у нас будет равен nil, а Sender как раз и получается Sender'ом В статье описано, как присвоить событие в run-time в Delphi: использовать метод класса, отдельно стоящую функцию или наследоваться от класса с методом. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |