Самоучитель по Delphi 7 для профессионалов


События - часть 3


type 

TMyEvent = procedure(Sender: TObject; var AValue: Integer) of object;

TlstObject = class;

FOnMyEvent: TMyEvent;

property OnMyEvent: TMyEvent read FOnMyEvent write FOnMyEvent;

  end;

T2ndObject = class;

procedure SetValuel(Sender: TObject; var AValue: Integer);

procedure SetValue2(Sender: TObject; var AValue: Integer); 

end;

...

var

Objl: TlstObject; 

Obj2: T2ndObject; 

begin

Objl := TlstObject.Create; 

Obj2 := T2ndObject.Create; 

Obj1.OnMyEvent := Obj2.SetValuel; 

Obj1.OnMyEvent := Obj2.SetValue2;

...

end.

Этот пример показывает, что при делегировании можно присваивать методы других классов. Здесь обработчиком события OnMyEvent объекта Objl по очереди выступают методы SetValuel и Setvaiue2 объекта Obj2.

Обработчики событий нельзя сделать просто процедурами — они обязательно должны быть чьими-то методами. Но их можно "отдать" какому-либо другому объекту. Более того, для этих целей можно описать и создать специальный объект. Его единственное предназначение — быть носителем методов, которые затем делегируются другим объектам. Разумеется, такой объект надо не забыть создать до использования его методов, а в конце — уничтожить. Можно и не делать этого, объявив методы методами класса, о которых речь пойдет в одном из последующих разделов.

Мы сейчас решили задачу использования нескольких разных обработчиков того или иного события для одного объекта. Но не менее часто требуется решить обратную задачу — а как использовать для различных событий разных объектов один и тот же обработчик?

Если никакой "персонификации" объекта, вызвавшего метод, не нужно, все делается тривиально и проблемы не возникает. Самый простой пример: в современных программах основные функции дублируются дважды — в меню и на панели инструментов. Естественно, сначала нужно создать и наполнить метод содержимым (скажем, для пункта меню), а затем в Инспекторе объектов указать его же для кнопки панели инструментов.




Начало  Назад  Вперед