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.


Anmelden zum Antworten