Problem mit dynamisch erzeugten Buttons



  • Also ich erzeuge beispielsweise Buttons so:

    DynamicArray<TButton*> testBtns;
    
    testBtns.Length++;                // nachlesen 
    testBtns[0] = new TButton(Handle);        // Button erstellen 
    testBtns[0]->Caption = "TestButton";   // Belegung von Button-Eigenschaften
    ........... 
    delete testBtns[0];       // nicht vergessen
    

    Mein Problem ist, dass der bzw. die erzeugten Button nicht auf dem Form dargestellt werden.

    testBtns->Show();
    testBtns->Left = 0;
    testBtns->Top =0;
    testBtns->Width = 50;
    testBtns->Height = 50;
    

    was mache ich falsch oder hab ich vergessen?



  • 1. Das "delete" erst dann aufrufen, wenn du die Buttons nichtmehr brauchst, spätestens beim Beenden des Programms.

    2. Du solltest dir dringenst ansehen, was Arrays sind und wie man auf einzelne Elemente zugreift.

    3. Wenn du immer das erste Element überschreibst, wieso nimmst du dann überhaupt ein Array?

    4. Parent-Eigenschaft muss gesetzt sein, damit der Button weiß, wo er gezeichnet werden soll.



  • der Code kommt mir doch bekannt vor 😉

    ich habe vergessen

    testBtns[0]->Parent = Form1;
    

    und

    delete testBtns[0];
    

    kannst du dir durch dass ersparren

    testBtns.Length = 0;
    

    BigNeal



  • BigNeal schrieb:

    der Code kommt mir doch bekannt vor 😉

    ich habe vergessen

    testBtns[0]->Parent = Form1;
    

    und

    delete testBtns[0];
    

    kannst du dir durch dass ersparren

    testBtns.Length = 0;
    

    BigNeal

    hast recht, der ist von dir.
    Thx für den Tip, jetzt scheint's zu gehen. 😃

    @Windoof
    es war ja nur ein Bsp-Code, sonst weiß ich ja dass es keinen Sinn hätte.

    in meinem Prog wird das delete erst beim Beenden (OnClose) aufgerufen.

    Thx nochmals !!!



  • Damit
    testBtns.Length = 0;
    setzt du lediglich dein Array auf die Größe 0. Die enthaltenen Pointer auf TButton werden dabei nicht gelöscht.



  • gibts eigentlich noch eine Möglichkeit so erzeugte Komponenten auf Image oder andere Objekte zu begrenzen?
    so in etwa in der Form:

    testBtns[0]->Parent = Form1->Image1; // geht nicht, wäre aber nicht schlecht
    

    Kennt jmd so etwas?



  • Parent ist vom Typ TWinControl. Das geht also nur für solche oder für von TWinControl abgeleitete Objekte.



  • zB:

    btnsTest[0]->Parent = GroupBox1;
    


  • also ich habe jetzt das TImage auf eine Panel gelegt, und auf die kann ich ja dann die Buttons erstellen. Panel ist jetzt so groß wie das TImage, was im Prog dann gar nicht mehr auffällt.

    btnsTest[0]->Parent = Panel1;
    

    Thx !!!


Anmelden zum Antworten