Обработчики событий |
Интерфейс-контейнер может подключиться к событиям, издаваемым встроенным интерфейсом.
Контейнер:
procedure OnData1_Changed (<параметры>);
{
...
};
Встраиваемый интерфейс должен определить передаваемые события и сделать их видимыми. Событие определяется конструкцией:
event procedure <идентификатор-события> (<параметры>);
<идентификатор-события> виден снаружи и используется для связи.
<параметры> определяют состав информации, передаваемой с событием.
Чтобы сделать <идентификатор-события> видимым снаружи, его необходимо поместить в objInterface.
После этого встраиваемый интерфейс может бросать событие из своего обработчика событий, используя утверждение:
<идентификатор-события> (<фактические-параметры>);
Интерфейс-контейнер должен определить процедуру - обработчик внешнего события и связать ее с событием с помощью процедуры BindEvent.
Также используются функции:
UnBindEvent - снимает обработчик события;
UnBindEvents - отключает все обработчики заданного события;
UnBindAllEvents - отключает обработчики всех событий интерфейса.
Интерфейс alGM обрабатывает событие PosChange интерфейса alEmb.
objInterface alEmb_Events; event procedure PosChange (iNRec : comp); event function BeforeNewRecord : boolean; procedure QQ; end; vipInterface alEmb implements alEmb_Events; interface alEmb; create view as select * from ; procedure QQ; begin message ('QQ'); end; ................ handleEvent cmPositionChanged : { PosChanged (NRec); } end; end. interface alGM; var emb : alEmb; procedure EmbPosChange (iNRec : comp); // обработчик { message ('NREC = ' + string (iNRec)); } ................ handleEvent cmInit : { BindEvent (EmbPosChange, Emb.PosChange); } cmDone : { UnBindEvent (EmbPosChange, Emb.PosChange); } end; end.