Forum: Object-Pascal / Delphi-Language
Delphi
by Motzi,
18. Sep 2003
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:
type
PMethodPointer = ^TMethodPointer;
TMethodPointer = packed record
...
Forum: Object-Pascal / Delphi-Language
Delphi
by Motzi,
17. Sep 2003
Anders... du musst die Objekt-Referenz des Methodenzeigers manipulieren...
Forum: Object-Pascal / Delphi-Language
Delphi
by Motzi,
17. Sep 2003
Wenn es eine Methode ist natürlich schon, wenn es eine Prozedur ist nein (es sein denn du manipulierst zusätzlich auch noch die Objekt-Referenz)... :)
Forum: Object-Pascal / Delphi-Language
Delphi
by Motzi,
17. Sep 2003
Ein Methodenzeiger ist eigentlich ein Record, der aus 2 Zeigern besteht, einerseits der Zeiger auf das Objekt und andrerseits der Zeiger auf die Funktion. Der Zeiger auf das Objekt wird benötigt, damit innerhalb der Methode der Self-Pointer verfügbar ist.
Wer weiß wie Delphi Funktions-Parameter übergibt weiß, dass diese in folgender Reihenfolge in den Registern abgelegt werden: EAX, EDX, ECX...
Forum: Object-Pascal / Delphi-Language
Delphi
by Motzi,
17. Sep 2003
Stimmt.. Self kann ja gar nicht den Wert des Buttons erhalten! :oops: Das kommt davon wenn man sowas nicht testen kann und es aus dem Kopf schreiben muss.. :roll: ;)
Also Sender verwenden und nicht Self...!
Forum: Object-Pascal / Delphi-Language
Delphi
by Motzi,
17. Sep 2003
Es funktioniert mit einem kleinen Trick auch mit einer normalen Prozedur, allerdings darf man da dann nicht vergessen, dass Delphi intern ja noch den Self-Pointer mitgibt, eine Methode also immer einen versteckten Parameter mehr hat.
procedure DynamicClickProcedure(Self: TObject; Sender: TObject);
begin
{ Self ist immer nil, muss allerdings als Parameter enthalten sein um die richtige...