Ist das richtig? inherited::Dispatch(&Message)
-
Hallo,
im Internet habe ich eine kleine Delphi-Klasse gefunden, die ich nach Builder2009 übersetze. Dort gibt es eine Botschaftsfunktion, bei der ich nicht ganz sicher bin ob ich die richtig übersetzt habe.
Ich bitte deshalb um Eure Kommentare!Nun das Beispiel:
(* Klassendefinition von Delphi *) type TColorButton = class(TButton) protected procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; ... (* in der implementation *) procedure TColorButton.CMEnabledChanged(var Message: TMessage); begin inherited; Invalidate; end;
In der Builderhilfe finde ich bei inherited
... Handelt es sich bei der aufrufenden Methode um eine Botschaftsbehandlung, verweist diese auf die geerbte Botschaftsbehandlung für dieselbe Botschaft. In diesem Fall übernimmt inherited keine expliziten Parameter, sondern der geerbten Methode werden einfach die Parameter der aufrufenden Methode übergeben ...
mit
inherited::CMEnabledChanged(Message)
geht das ja wohl nicht?
Ich hätte das deshalb wie folgt übersetzt//ColorButton.h class TColorButton : public TButton { typedef TButton inherited; ... protected: MESSAGE void __fastcall CMEnabledChanged(TMessage &Message); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(CM_ENABLEDCHANGED, TMessage, CMEnabledChanged) END_MESSAGE_MAP(TButton) }; //ColorButton.cpp void __fastcall TColorButton::CMEnabledChanged(TMessage &Message){ inherited::Dispatch(&Message); Invalidate(); }
Ist das okay mit inherited::Dispatch(&Message)?
-
Hallo
Ja das sollte richtig sein. Kompiliert und läuft es denn?
bis bald
akari
-
@akari, danke für Deine Bewertung. Das bringt Sicherheit. Oft scheitert es gerade an solchen Kleinigkeiten, die in keinem Buch nachzulesen sind.
@akari schrieb:
Kompiliert und läuft es denn?
Ja, läuft, wenn auch holprig. Habe als Demo eine Form mit einen TColorButton erzeugt. Von Color ist allerdings noch nicht viel zu sehen. Außerdem verhält sich mein Button wie ein eigenes Fenster (losgelöst von der Form, auf der er bleiben müßte)
Vielleicht meld' ich mich nochmal, wenn's gar nicht weiter geht mit einem neuen Thread.
Danke Dir nochmal.