Сама идея:
Использовать классические обработчики событий, через анонимные методы. То есть сократить количество кода в обработчиках, там где реакцией на событие должно быть исполнение немногих строк кода.
Например, по событию нужно просто подать сигнал, или вывести сообщение.
Избавиться от объявления процедур обработки в классе, вызывающих замусоривание листинга.
Использовать классические обработчики событий, через анонимные методы. То есть сократить количество кода в обработчиках, там где реакцией на событие должно быть исполнение немногих строк кода.
Например, по событию нужно просто подать сигнал, или вывести сообщение.
Избавиться от объявления процедур обработки в классе, вызывающих замусоривание листинга.
unit Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TOnNotify = reference to procedure; // анонимный метод TDemoNotify = class private fOnNotify: TOnNotify; public procedure SendNotify; published property OnNotify : TOnNotify read fOnNotify write fOnNotify; end; TfrmNotify = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } demo : TDemoNotify; public { Public declarations } procedure _onNotify; end; var frmNotify: TfrmNotify; implementation {$R *.dfm} { TDemoNotify } procedure TfrmNotify.FormCreate(Sender: TObject); begin demo := TDemoNotify.Create; end; procedure TfrmNotify.FormDestroy(Sender: TObject); begin if Assigned(demo) then FreeAndNil(demo); end; procedure TfrmNotify._onNotify; begin ShowMessage('Сработало классика!'); end; procedure TDemoNotify.SendNotify; begin if Assigned(fOnNotify) then fOnNotify; end; procedure TfrmNotify.Button1Click(Sender: TObject); begin // Классический подход demo.OnNotify := _onNotify; demo.SendNotify; end; procedure TfrmNotify.Button2Click(Sender: TObject); begin // Обработчик через анонимную функцию demo.OnNotify := procedure begin ShowMessage('Сработало анонимная процедура!'); end; demo.SendNotify; end; end.
Комментариев нет:
Отправить комментарий