Eigene Komponente: Eigenschaften verbergen



  • Ich habe mal die Komponenten-Entwicklungsbeispiele von http://home.t-online.de/home/mario_kluge/index.html ausprobiert.

    Soweit hat alles gut geklappt, bloß möchte ich jetzt gerne mal wissen wie man gewisse Eigenschaften einer Komponente verstecken kann. Im Beispiel wird ja eine neue TRicheditkompo gebaut. Dort möchte ich jetzt beispielsweise die Eigenschaft "Visible" im Objektinspektor verbergen.
    Ich hatte das folgendermaßen probiert, es hat aber zu keinem Erfolg geführt:

    class PACKAGE TMyRichEdit : public TRichEdit
    {
       private:
       // irgendwelcher Code ...
    
       __published:
            __property String DateiName= {read=GetDateiName, write=SetDateiName};
       protected:
            __property Visible  = {write=SetVisible, default=0}; //geht nicht
       public:
            __fastcall TMyRichEdit(TComponent* Owner);
    };
    


  • Zitat aus "BCB in 21 Tagen":

    Published-, Public- und Private-Eigenschaften

    Einige Eigenschaften sind zur Entwurfszeit verfügbar. Diese Eigenschaften lassen sich zur Entwurfszeit über den Objektinspektor modifizieren und außerdem zur Laufzeit modifizieren oder lesen. Man bezeichnet diese Eigenschaften als published (veröffentlicht). Einfach ausgedrückt handelt es sich bei veröffentlichten Eigenschaften um Eigenschaften, die im Objektinspektor zur Entwurfszeit sichtbar sind. Alle Eigenschaften, die im __published-Abschnitt der Klassendeklaration einer Komponente stehen, werden im Objektinspektor zur Entwurfszeit angezeigt.

    Eigenschaften, auf die der Benutzer zur Entwurfszeit nicht zugreifen kann (und die auch nicht im Objektinspektor erscheinen), bezeichnet man als reine Laufzeit-Eigenschaften. Eigenschaften dieses Typs sind im public-Abschnitt der Klassendeklaration einer Komponente deklariert.

    Private sind Eigenschaften, die die Komponente intern verwendet und die dem Benutzer der Komponente nicht zur Verfügung stehen. Die Deklaration privater Eigenschaften steht in den Abschnitten protected oder private der Klassendeklaration einer Komponente.



  • Also das würde folgende bedeuten:

    class PACKAGE TMyRichEdit : public TRichEdit
    {
       private:
       // irgendwelcher Code ...
    
       __published:
            __property String DateiName= {read=GetDateiName, write=SetDateiName};
       public:
            __fastcall TMyRichEdit(TComponent* Owner);
            __property Visible  = {write=SetVisible, default=0}; //geht immer noch nicht
    };
    

    Das haut aber immer noch nicht hin, die Eigenschaft visible ist zur Entwurfszeit immer noch im OI zu sehen. 😕



  • Liegt wahrscheinlich daran, dass du von TRichEdit ableitest und die Eigenschaft dort als __published deklariert und somit im OI sichtbar ist.

    Versuch mal im Public-Teil die Visible-Eigenschaft zu redeklarieren,
    also:

    class PACKAGE TMyRichEdit : public TRichEdit
    {
       private:
       // irgendwelcher Code ...
    
       __published:
            __property String DateiName= {read=GetDateiName, write=SetDateiName};
       public:
            __fastcall TMyRichEdit(TComponent* Owner);
            // Redeklaration der geerbten Eigenschaften
            __property Visible;
    };
    

    Vielleicht klappt's ja so. Hab das allerdings auch noch nicht selbst gemacht...



  • Habe gerade was in der Hilfe 🙂 zum Thema gefunden:

    Durch eine Neudeklaration können die Beschränkungen einer Eigenschaft verringert werden. Eine stärkere Beschränkung durch eine Neudeklaration ist nicht möglich. So können Sie eine als protected deklarierte Eigenschaft als public deklarieren, nicht aber eine als public deklarierte Eigenschaft verbergen, indem Sie sie als protected neu deklarieren.

    und das wird wohl in Falle zutreffen.


Anmelden zum Antworten