Anzeigen von Vererbungen der eigenen Komponente im Objektinspektor



  • Hallo,

    ich entwickle gerade meine erste Komponente. Die Komponente soll ein Fortschrittsbalken sein mit einen Farbverlauf. Sie ist abgeleitet von der Basisklasse TGraphicsControl.

    Das ganze funktioniert auch wie es soll. Das Problem ist nur, dass einige Properties nicht im Objektinspektor erscheinen wie z.B. das Visible.

    Frage: Wie kann ich das Visible wieder zurückbekommen, denn als Eigenschaft ist es sichtbar unter TGraphicsControl-> (aber schreibgeschützt)?

    Hier etwas Quellcode:

    class PACKAGE THwGauge : public TGraphicControl
    {
    	private:
    		TColor hwStartColor;
    		TColor hwEndColor;
    		TColor hwBorderColor;
    		bool hwShowBorder;
    		TGradientDirection hwDirection;
    		int hwValue;
    		TRect hwValueRect;
    
    	protected:
            /// bla bla bla Funktionen für die Properties
    
    public:
    
    		__fastcall THwGauge(TComponent* Owner);
    		using TGraphicControl::Visible;  // durch using funktioniert es wie es soll, taucht aber nicht im Objektinspektor auf
    	__published:
    
    		//__property bool Visible = {}; //das funktioniert nicht
    		__property bool ShowBorder={read=hwShowBorder,write=SetShowBorder,default=true};
    		__property int Value={read=hwValue,write=SetValue,default=0};
    		__property TColor BorderColor={read=hwBorderColor,write=SetBorderColor,default=clBtnFace};
    		__property TColor StartColor={read=hwStartColor,write=SetStartColor,default=clBtnFace};
    		__property TColor EndColor={read=hwEndColor,write=SetEndColor,default=clWhite};
    		__property TGradientDirection Direction={read=hwDirection,write=SetDirection,default=gdHorizontal};
    
    };
    

    Durch using ist diese Eigenschaft wieder verwendbar, also nicht schreibgeschützt und die Komponente kann augeblendet werden. Aber wie bekomme ich dieses Visible auch im Objektinspektor?

    Vielen Dank



  • Du musst alle Prperties der Basisklasse die du im Objektinspektor bearbeiten möchtest im _published Abschnitt aufführen.
    Es genügt

    __property bool Visible;
    

    Schau dir mal die Header von TStringGrid oder TDrawGrid an. Dann siehst Du wie es sein soll.



  • Hallo,

    danke für die schnelle Antwort. Leider funktioniert das nicht.

    Wenn ich unter published folgendes eingebe

    __property bool Visible;
    

    steht im Compiler, dass Visible initialisiert werden muss. Muss ich denn dafür alle Funktionen und Variabeln, die zu Visible gehören nochmal initialisieren?

    Die Header von TStringGrid, haben mir nicht viel geholfen...



  • Oh, ich habe nochmal reingeschaut in TStringGrid und habe den Fehler gefunden!

    Richtig muss es heißen:

    __property Visible;
    

    ohne das bool vorne.

    Jetzt funktioniert es wie es soll!

    Vielen Dank nochmal!


Log in to reply