Announcement

Collapse
No announcement yet.

Komponente mit eigenen Eigenschaften, zusammengefasst wie z.B. bei den Fonts

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Komponente mit eigenen Eigenschaften, zusammengefasst wie z.B. bei den Fonts

    Hallo ihr,
    ich möchte eine Komponente mit dem C++ Builder 2006 schreiben, abgeleitet von TCustomPanel.

    Es sollen zwei Eigenschaften hinzugefügt werden, welche zusammengefasst werden sollen, wie z.B. bei Fonts. Bei Fonts kann auf das kleine + geklickt werden und es öffnet sich der Bereich, der verschiede Eigenschaften darstellt, wie Farbe,Größe usw.
    Die Eigenschaften Vollbild und Rand sollen zu einer Gruppe namens ExtraMenue zusammengefasst werden. Könnt ihr mir sagen, wie das geht?

    Meine Infos:
    -Man braucht zwei Klassen
    -Die erste (TExtraMenue) ist die, die zusammengafasst dargestellt wird



    Code:
    //-------------------------------------------------------------------
    class TExtraMenue: public TPersistent 
    { 
    private: 
    
    bool FVollbild; 
    int FRand; 
    
    protected: 
    
    void __fastcall SetVollbild(bool boolVar); 
    void __fastcall SetRand(int intVar); 
    
    
    public: 
    __published: 
    
    __property bool Vollbild={read=FVollbild,write=SetVollbild}; 
    __property bool Rand={read=FRand,write=SetRand}; 
    } 
    //**********************************************
    
    class PACKAGE TMyPanel: public TCustomPanel 
    { 
    private: 
    
    TExtraMenue* FExtraMenue; 
    AnsiString FCaption; 
    
    protected: 
    
    void __fastcall SetCaption(AnsiString Text); 
    
    public: 
    
    __fastcall TMyPanel(TComponent* Owner); 
    
    __published: 
    
    __property TExtraMenue* ExtraMenue ={read=FExtraMenue, write=FExtraMenue}; 
    __property AnsiString Caption = { read = FCaption, write = SetCaption}; 
    } 
    //----------------------------------------------------------------
    Wie sieht die Änderung/Ergänzung aus?

  • #2
    Wie sieht die Änderung/Ergänzung aus?
    Was ist den nun die Frage?

    TExtraMenue* FExtraMenue; sollte im Konstruktor versorgt werden

    Es fehlt - sofern das der vollständige Quelltext ist - das Anmelden und Registieren als Komponente generell
    Christian

    Comment


    • #3
      das Anmelden und Registieren als Komponente generell???
      Ist das so nicht richtig... bin immer noch Anfänger

      Der Quelltext ist nur die *.h Datei.

      In der .hpp steht:
      .
      .

      __fastcall TMyPanel::TMyPanel(TComponent* Owner)
      : TCustomPanel(Owner)
      {
      FEffects=new TEffects();
      }
      .
      .
      Nochmal:
      Es soll eine eigene Komponente mit einer Zusammenfassung(aufklappbar mit +) von Eigenschaften entstehen.

      Kannst Du mir helfen? Wie gesagt bin ja Anfänger :-|

      Comment


      • #4
        http://www.marquardtnet.info/cecke/k...2/2_index.html


        Schau doch bitte in irgendeine von da oben

        das ValidCtrCheck muss rein und das register ebenfalls und all in eine neues bpl Projekt packen
        Christian

        Comment


        • #5
          Es ist kein Menue im Objektinspektor zu sehen!????
          Hier der gesamte Quelltext:


          //---------------------------------mypanel.h------------------------------------------

          #ifndef MyPanelH
          #define MyPanelH
          //---------------------------------------------------------------------------
          #include <SysUtils.hpp>
          #include <Classes.hpp>
          #include <Controls.hpp>
          #include <ExtCtrls.hpp>


          //------------------------------Das Extra Menue---------------------------------------------
          class TExtraMenue: public TPersistent
          {
          private:

          bool FVollbild;
          int FRand;

          protected:

          void __fastcall SetVollbild(bool);
          void __fastcall SetRand(int);


          public:
          __published:

          __property bool Vollbild={read=FVollbild,write=SetVollbild};
          __property int Rand={read=FRand,write=SetRand};

          };





          //-------------------------------MyPanel--------------------------------------------
          class PACKAGE TMyPanel : public TCustomPanel
          {
          private:

          TExtraMenue* FExtraMenue;
          AnsiString FCaption;

          protected:

          // void __fastcall SetCaption(AnsiString Text);



          public:

          __fastcall TMyPanel(TComponent* Owner);
          __fastcall ~TMyPanel(void);

          void __fastcall SetCaption(AnsiString Text);

          __published:



          __property AnsiString Caption = { read = FCaption, write = SetCaption};
          __property TExtraMenue* ExtraMenue={ read = FExtraMenue, write = FExtraMenue};

          };
          //---------------------------------------------------------------------------
          #endif
          //**************************************************


          //------------------------------mypanel.hpp---------------------------------------------

          #include <vcl.h>

          #pragma hdrstop

          #include "mypanel.h"
          #pragma package(smart_init)
          //---------------------------------------------------------------------------
          // Mit ValidCtrCheck wird sichergestellt, dass die erzeugten Komponenten
          // keine rein virtuellen Funktionen besitzen.
          //

          static inline void ValidCtrCheck(TMyPanel *)
          {
          new TMyPanel(NULL);
          }
          //---------------------------------------------------------------------------
          __fastcall TMyPanel::TMyPanel(TComponent* Owner)
          : TCustomPanel(Owner)
          {
          FExtraMenue=new TExtraMenue();
          }

          //---------------------------------------------------------------------------

          void __fastcall TExtraMenue::SetVollbild(bool boolvar)
          {
          if ( FVollbild != boolvar )
          {
          FVollbild = boolvar;
          }
          }//---------------------------------------------------------------------------

          void __fastcall TExtraMenue::SetRand(int intvar)
          {
          if ( FRand != intvar )
          {
          FRand = intvar;
          }
          }
          //---------------------------------------------------------------------------

          void __fastcall TMyPanel::SetCaption(AnsiString Text)
          {
          if ( FCaption != Text )
          {
          FCaption = Text;
          Invalidate();
          }
          }

          //---------------------------------------------------------------------------
          __fastcall TMyPanel::~TMyPanel(void)
          {
          delete FExtraMenue;
          }
          //---------------------------------------------------------------------------
          namespace Mypanel
          {
          void __fastcall PACKAGE Register()
          {
          TComponentClass classes[1] = {__classid(TMyPanel)};
          RegisterComponents("tests", classes, 0);
          }
          }
          //---------------------------------------------------------------------------
          Was fehlt?

          Kann doch nur eine Kleinigkeit sein

          Comment


          • #6
            ich habe mit den extra-Klassen nicht nix gemacht. Könnte es sein, dass man die auch registrieren muss...
            Christian

            Comment


            • #7
              Schau mal hier, das sollte das sein, was Du suchst:

              http://delphi.about.com/library/bluc/text/uc083101a.htm

              Comment

              Working...
              X