When you are creating components at run time, and want to assign a procedure to an event handler of a component, like in the following code:
procedure ButtonClick(Sender:TObject) ; begin //whatever end; procedure SomeProcedure... var aButton:TButton; begin aButton := TButton.Create(nil) ; aButton.OnClick = ButtonClick ... end;
You will get the next error: Incompatible type: 'method pointer and regular procedure'.
The problem is that a method pointer (OnClick) needs to be a procedure of an object (like TForm), not a regular procedure. One way around is to create an object to define the procedure. You can start by creating a dummy class...
interface type TEventHandlers = class // create a dummy class procedure ButtonClick(Sender: TObject) ; end; ... var EvHandler:TEventHandlers; implementation procedure TEventHandlers.ButtonClick(Sender: TObject) ; begin // your code here end; ... procedure SomeProcedure... var aButton:TButton; begin aButton := TButton.Create(nil) ; aButton.OnClick = ButtonClick; ... end;