Einzelnen Beitrag anzeigen

Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: "inherited" für umgeleitetes Event

  Alt 16. Mär 2007, 23:29



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
Christian
  Mit Zitat antworten Zitat