Komponente per Code einfügen



  • Hallo Leute,

    habe folgendes vor!
    Ich habe auf einer Form ein ein Buttons platziert!
    Ich möchte, dass wenn ich den Button drücke eine neue Komponente auf der Form erscheint und wenn ich es nochmal drücke da wieder eine!

    Folgenden Code habe ich dafür geschrieben!!!

    .h Datei

    private:
            std::map <int, TButton*>btnMap;
            int btnCounter;
            TButton *dynBtn;
    

    .cpp Datei

    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
      btnCounter = 0;
    }
    //---------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      dynBtn = new TButton(this);
      btnMap[btnCounter] = dynBtn;
      btnCounter++;
    }
    

    Warum geht es eigentlich nicht? Was mache ich falsch??
    Eigetlich müsste schon folgender Code ausreichen oder??

    .h Datei

    private:
            TButton *dynBtn;
    

    [/cpp]

    .cpp Datei

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      dynBtn = new TButton(this);
    }
    

    Grüße Stefan



  • Hallo swunder,

    du mußt noch den Parent des Buttons setzen.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      dynBtn = new TButton(this);
      dynBtn->Parent = this;
    }
    

    Gruß Peter.



  • Oh es hat funktioniert!! Danke Peter24!!!

    Aber wieso funktioniert das nicht bei den Komponenten, die ich selber erstellt habe? Ich habe die Komponente von TCustomControl abgeleitet! In header Datei habe ich auch __property Parent; eingefüht leider keine Wirkung!!

    Kann mir da villeicht jemand helfen??



  • Hallo

    Und noch die Position der Buttons jedesmal ändern, zum Beispiel alle untereinander setzen. Denn auch mit der (notwendigen) Zuweisung von Parent werden alle Buttons oben links übereinander gesetzt.
    Siehe auch FAQ, Abschnitt Komponenten benutzen.

    bis bald
    akari



  • swunder schrieb:

    Oh es hat funktioniert!! Danke Peter24!!!

    Aber wieso funktioniert das nicht bei den Komponenten, die ich selber erstellt habe? Ich habe die Komponente von TCustomControl abgeleitet! In header Datei habe ich auch __property Parent; eingefüht leider keine Wirkung!!

    Kann mir da villeicht jemand helfen??

    Noch einmal : "Funktioniert nicht" ist keine aussagekräftige Fehlerbeschreibung! Sollen wir nun raten was für Code du geschrieben hast und was passiert? 🙄

    So oder so must/darfst du auf keinen Fall eine neue Eigenschaft Parent hinzufügen, die wird von der Basisklasse mit abgeleitet.

    bis bald
    akari



  • Sorry, das Problem besteht darin, dass ich keine Fehlermeldung bekomme!!
    Code von meinem Projekt!

    .h

    private:	// User declarations
           //TEdit *dynBtn;
           TAnd *And;
    

    .cpp

    void __fastcall TnewProjekt::Button1Click(TObject *Sender)
    {
      //dynBtn = new TEdit(this);
     // dynBtn->Parent = this;
    
      And = new TAnd(this);
      And->Parent=this;
    }
    

    Code von der Komponente!!!

    Tand.h

    class PACKAGE TAnd : public TCustomControl
    {
    private:
    protected:
      virtual void __fastcall Paint(void);
    public:
            __fastcall TAnd(TComponent* Owner);
    __published:
      __property Text;
      __property Parent;
      __property OnClick ;
      __property OnDblClick ;
      __property OnMouseDown ;
      __property OnMouseMove ;
      __property OnMouseUp ;
    };
    

    TAnd.cpp

    __fastcall TAnd::TAnd(TComponent* Owner)
            : TCustomControl(Owner)
    {
    GetIn1=1;
    }
    //---------------------------------------------------------------------------
    void __fastcall TAnd::Paint(void)
    {
    Canvas->MoveTo(0,20);   //Eingang1
    Canvas->LineTo(25,20);  //Eingang1
    
    Canvas->MoveTo(0,50);   //Eingang2
    Canvas->LineTo(25,50);  //Eingang2
    
    Canvas->Rectangle(25,10,75,60);   //Körper
    
    Canvas->MoveTo(75,35);   //Eingang2
    Canvas->LineTo(100,35);  //Eingang2
    Canvas->TextOutA(50,30,"&");
    }
    


  • Hallo swunder,

    du mußt deiner Komponente noch eine Höhe und eine Breite zuweisen:

    void __fastcall TnewProjekt::Button1Click(TObject *Sender)
    {
      //dynBtn = new TEdit(this);
     // dynBtn->Parent = this;
    
      And = new TAnd(this);
      And->Parent=this;
      And->Width = 150;
      And->Height = 100;
    }
    

    Gruß Peter.



  • 😃 oh man jetzt hat es funktioniert! Danke, Danke!!
    Jetzt ist auch klar warum es nicht geklappt hat habe auch gleich die Komponente modifiziert!!


Anmelden zum Antworten