procedure SetEvent( ComponentWithEvent : TComponent ;
const Event : string ;
ComponentWithHandler : TComponent ;
const Handler : string ) ;
var PropInfo : PPropInfo ;
Method : TMethod ;
begin
PropInfo := GetPropInfo( ComponentWithEvent.ClassInfo, Event ) ;
if PropInfo = NIL then
Raise Exception.CreateFmt( 'Событие %s не найдено в классе %s',
[ Event, ComponentWithEvent.ClassName ] ) ;
Method.Code := NIL ;
if Assigned( ComponentWithHandler ) and ( Handler <> '' ) then begin
Method.Code := ComponentWithHandler.MethodAddress( Handler ) ;
if Method.Code = nil then
Raise Exception.CreateFmt( 'Класс %s не имеет метода с именем %s',
[ ComponentWithHandler.ClassName,
Handler ] ) ;
end ;
Method.Data := ComponentWithHandler ;
SetMethodProp( ComponentWithEvent, PropInfo, Method ) ;
end ;
{ примеры, показывающие как использовать SetEvent }
procedure TForm1.SetBtnClick(Sender: TObject);
begin
SetEvent( MenuItem, 'OnClick', Self, 'Test1Click' ) ;
end;
procedure TForm1.ClearBtnClick(Sender: TObject);
begin
SetEvent( MenuItem, 'OnClick', NIL, '' ) ;
end;