Nunja, wir haben nichts wildes gemacht...
Wie du mitbekommen hast, wird deine OnClick Methode im
OnClick (vom Typ
TNotifyEvent) im
TButton abgelegt...
Deklariert wurde sie aber schon in
TControl im Protected Bereich, außerhalb sichtbar wird sie erst im TButton in dem
OnClick Published wird...
Delphi-Quellcode:
Type
TControl = class(TComponent)
{ ... }
protected
property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;
{ ... }
end;
{ ... }
Type
TWinControl = class(TControl)
{ ... }
end;
{ ... }
Type
TButtonControl = class(TWinControl)
{ ... }
end;
{ ... }
Type
TButton = class(TButtonControl)
{ ... }
published
property OnClick;
{ ... }
end;
So nun ist natürlich noch viel interessanter, was
TNotifyEvent nun eigendlich ist!
TNotifyEvent = procedure(Sender: TObject) of object;
Da sieht man, dass
TNotifyEvent ein Methodenzeiger ist, sprich der Inhalt soll zu solch einer Methode verweisen...
So, also was haben wir gemacht?
Muetze1 und ich haben also nichts anderes gemacht als uns eine Variable anzulegen, natürlich vom Typ
TNotifyEvent und haben in diesem die OnClick Methode des TButtons gespeichert...
Anschliessend haben wir das OnClick des TButtons mit userer Methode überschrieben, ihm sozusagen einen neuen Methodenzeiger verpasst...
So, in unserer neuen Funktion haben wir sozusagen unseren Code ausgeführt und anschließend bzw. davor versucht die alte gespeicherte Methode aufgerufen, die wir gesichert haben...
Da ja ev. keine vorhanden gewesen sein könnte überprüfen wir natürlich mit Assigned( "TButtonOnClickSaveVariable" ) ob der Inhalt der gespeicherten alten OnClickMethode (bzw. den Zeiger dorthin) nicht NIL ist... Ist er nicht NIL rufen wir die Methode auf.
Das war es schon, keine Hexerei, kein Hockuspokus...
Ich hoffe die Erklärung konnte dir helfen...
Bye Christian