program tw39978; {$IFDEF FPC} {$mode delphi} {$ModeSwitch functionreferences} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} type TRefProc = reference to procedure(Sender: TObject); procedure Test(P: TRefProc); begin P(nil); end; type TMyObj = class(TObject) public procedure MyEvent(Sender: TObject); procedure MyTest; end; var Obj: TMyObj; { TMyObj } procedure TMyObj.MyEvent(Sender: TObject); begin if (Self<>Obj) then // solved with ObjFpc mode and Test(@MyEvent); using Self.MyEvent doesn't help either Halt(1); end; procedure TMyObj.MyTest; begin Test(MyEvent); end; begin Obj := TMyObj.Create; Obj.MyTest; end.