Dein Code ist ein bisschen unpraktisch, da er absolute Offsets verwendet ($120 / $124)... Delphi kann natürlich die absoluten Offsets der Objekt-Felder berechnen, aber ich bezweifle, dass du mir so einfach sagen kannst an welchem Offset das OnMouseDown-Ereignis liegt...
Ich bevorzuge daher etwas in dieser Richtung:
Delphi-Quellcode:
type
PMethodPointer = ^TMethodPointer;
TMethodPointer = packed record
pMethod: Pointer;
pObject: TObject;
end;
procedure ProcFormClick(Self: TObject; Sender: TObject);
begin
ShowMessage('Procedure');
TForm(Self).OnClick := TForm1(Self).FormClick;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
ShowMessage('Method');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
aMP: TMethodPointer;
begin
aMP.pMethod := @ProcFormClick;
aMP.pObject := Self;
OnClick := TNotifyEvent(aMP);
end;
Ein Methoden-Zeiger hat immer die Größe 8, daher ist der Record MethodPointer zu jedem Methoden-Zeiger kompatibel. Der strenge Compiler lässt eine einfache Zuweisung von TMethodPointer an zB TNotifyEvent nicht zu, daher muss der Record immer zuerst in den entsprechenden Methoden-Zeiger gecastet werden.