Mega Code Archive

 
Categories / Delphi / OOP
 

How to assign an event handler to all components

Title: How to assign an event handler to all components private { Private declarations } procedure AssignOnContextPopupEvent; procedure OnContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses TypInfo; procedure TForm1.OnContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); begin with Sender as TComponent do ShowMessage(Name + ' right-clicked!'); end; procedure TForm1.AssignOnContextPopupEvent; var i: Integer; PropInfo: PPropInfo; Method: TMethod; PEvent: ^TContextPopupEvent; begin for i := 0 to ComponentCount - 1 do begin PropInfo := GetPropInfo(Components[i].ClassInfo, 'OnContextPopup'); if (PropInfo nil) and (PropInfo^.PropType^^.Kind = tkMethod) then begin Method := GetMethodProp(Components[i], PropInfo); if not Assigned(Method.Code) then begin PEvent := @Method.Code; PEvent^ := OnContextPopup; Method.Data := Self; SetMethodProp(Components[i], PropInfo, Method); end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin AssignOnContextPopupEvent; end;