Сама идея:
Использовать классические обработчики событий, через анонимные методы. То есть сократить количество кода в обработчиках, там где реакцией на событие должно быть исполнение немногих строк кода.
Например, по событию нужно просто подать сигнал, или вывести сообщение.
Избавиться от объявления процедур обработки в классе, вызывающих замусоривание листинга.
Использовать классические обработчики событий, через анонимные методы. То есть сократить количество кода в обработчиках, там где реакцией на событие должно быть исполнение немногих строк кода.
Например, по событию нужно просто подать сигнал, или вывести сообщение.
Избавиться от объявления процедур обработки в классе, вызывающих замусоривание листинга.
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.
Комментариев нет:
Отправить комментарий