VCL-Komponente richtig ableiten um auf das Ereignis OnMouseLeave zu erweitern
-
Hallo,
zur Vererbung von VCL-Komponenten habe ich einige Fragen, die Ihr mir vielleicht beantworten könnt.
Ich möchte bei einer bestehenden Komponente, sagen wir z.B. TxyImage, die ähnlich BuilderXE3-TImage funktioniert, die fehlenden Events OnMouseEnter und OnMouseLeave zusätzlich einführen. Dies soll durch Ableitung und notwendiger Ergänzung von TxyImage über TxyImageEx geschehen.Nachdem, was ich weiß, gelten in einer abgeleiteten Klasse alle Elemente der vorherigen Basis-Klassen, wenn sie dort public bzw. published deklariert wurden. Protected Elemente können durch Überschreiben in der abgeleiteten Klasse sichtbar gemacht werden (private, public, published).
Frage:
Welche Variablen, _property(s), Funktionen von welchen Klassen muss ich verwenden, um in der abgeleiteten Klasse TxyImageEx die Eigenschaft OnMouseLeave unter __published zu erhalten?Zur Vereinfachung beziehe ich mich im Folgenden nur noch auf OnMouseLeave.
Hier die Klassenhierarchie von TxyImage und die für OnMouseLeave gefilterten Variablen, __property(s) und und zugehörigen Elementfunktionen zur jeweiligen Klasse gelistet:TObject | TPersistent | TComponent | TControl private: System::Classes::TNotifyEvent FOnMouseLeave; MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Message); protected: __property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave}; | TWinControl | TCustomControl | TxyControl private: System::Classes::TNotifyEvent FOnMouseLeave; HIDESBASE MESSAGE void __fastcall CMMouseLeave(Winapi::Messages::TMessage &Message); protected: DYNAMIC void __fastcall MouseLeave(Vcl::Controls::TControl* AControl); __property System::Classes::TNotifyEvent OnMouseLeave = {read=FOnMouseLeave, write=FOnMouseLeave}; | TxyContainer protected: DYNAMIC void __fastcall MouseLeave(Vcl::Controls::TControl* AControl); | TxyCustomEditContainer | TxyCustomEdit protected: DYNAMIC void __fastcall MouseLeave(Vcl::Controls::TControl* AControl); public: __property OnMouseLeave; | TxyCustomImage protected: DYNAMIC void __fastcall MouseLeave(Vcl::Controls::TControl* AControl); | TxyImage | TxyImageEx //geplante Ableitung __published: __property OnMouseLeave; //Ziel
-
DYNAMIC void __fastcall MouseLeave(Vcl::Controls::TControl* AControl);
Musst Du in Deiner abgeleiteten Klasse überschreiben.
Nicht vergessen die Vorfahrmethode in der abgeleiteten Methode zu rufen, außer Du implementierst das Verhalten komplett neu.