Mega Code Archive

 
Categories / Delphi / Examples
 

Assign an event handler to all components

Title: assign an event handler to all components? { This example shows how to assign a OnContextPopup event handler to all components at runtime using SetMethodProp(). (Here: OnContextPopup event handler) } { Diese Beispiel zeigt, wie man mit Hilfe von SetMethodProp() allen Komponenten ein Ereignis (hier: OnContextPopup Ereignis) zur Laufzeit zuweisen kann. } 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;