Subklasse von Komponente verwenden, ohne neue Designtime-Komponente zu erstellen



  • Ich möchte gerne auf einige protected Member von TStringGrid zugreifen. Dabei möchte ich nicht auf die Möglichkeit einer Designtime-Erzeugung der Grid verzichten. Um es kompliziert zu machen: Ich will obendrein keine neue Designtimekomponente erstellen, da ich meinen Code mit einigen anderen Leuten teile, die diese nicht extra installieren müssen sollen.
    Gibt es einen klugen Kopf, der dazu eine Lösung weiß oder gibt es tatsächlich keine?
    (Nein, ein #define protected public hilft - auch, wenn man den Verrat aller Prozipien in Kauf nimmt - hier nicht.)



  • Hallo

    Wenn du auch das define nicht willst, bleibt aus meiner Sicht nur noch das noch unsaubere casten :

    class TMyStringGrid
    {
      public :
         TMyStringGrid(...);
        // Hier Redeklaration des protected-Members
    };
    TStringGrid* sg = ...; // Normal erstelltes TStringGrid
    TMyStringGrid* msg = static_cast<TMyStringGrid*>(sg);
    msg->...; // verwenden
    

    bis bald
    akari



  • Einen Pointer auf eine Subklasse auf eine Instanz der Superklasse richten? Huh...
    Bestehen dabei Gefahren, solange ich nicht versuche, Member zu rufen, die die Superklasse nicht besitzt?
    Die Idee gefällt mir - mit allem angebrachtem Gesichtsverziehen - doch ganz gut.



  • Hallo

    Solange die draufgepappte Klasse nur die Sichtbarkeit von Membern umgeht ist das wohl sicher, wenn auch nicht durch den C++ Standard abgesichert.

    bis bald
    akari



  • Es klappt tatsächlich. Ich frage mich, ob es sich irgendwann rächen wird, aber hoffen wir das Beste.
    Danke.


Anmelden zum Antworten