Frage zur Erstellung von Steuerelementen zur Laufzeit(schwierig)



  • const int x = 10; 
    TImage *img[x]; //wieso wird bei der deklaration von diesem pointer die zahl der elemente mit angegeben?würde nicht auch *img reichen?
    
    for (int i = 0; i < x; i++) 
    { 
      img[i] = new TImage(this); //wieso steht hier keine elementzahl?wieso wird überhaupt new benutzt,wo doch die anzal der elemente eh schon festgelegt wurde?
    
      img[i]->Parent = this; 
      img[i]->Width = 32; 
      img[i]->Height = 32; 
      img[i]->Top = i * 35; 
      ... 
      img[i]->Show(); 
      img[i]->Canvas->Brush->Color = clWhite; // nur zum Test 
    }
    

    ich weiss isn bisl knifflig.

    ich (devcpp gewohnt) hätte das so gemacht:

    TButton *test;
    
    test=new TButton[1];
    
    test[0]->Top=100;
    test[0]->Left=100;
    test[0]->Width=100;
    test[0]->Height=100;
    test[0]->Parent=Form1;
    test[0]->Visible=true;
    


  • Wenn du ein Array von Zeigern hast, will der Compiler wissen wie groß das Array ist. Das will er immer wissen, egal was in diesem Array gespeichert ist

    Außerßderm erzeugst du , mit

    *img -> einen Zeiger

    mit

    img[i] = new TImage(this).....

    mit *img hast du einen Zeiger erzeugt, mit new weisst du nun diesem Zeiger einen Speicherplatz zu und legst die Größe des Speichers fest.
    Weiss jetzt nicht was du mit "Elementzahl" (Index?) meinst (dein Beispiel geht garaniert nicht, da l nicht definiert ist), aber das was in Klammern steht nennt man den Übergabeparameter für den Konstuktor und dort wird das übergeben, was lt. Beschreibung für das Objekt erforderlich ist (hier in der Hilfe unter TImage nachzulesen). Bei Objekten der VCL ist das meistens der Owner des Objektes.



  • Aber i ist doch definiert:

    for (int i = 0; i < x; i++)



  • a) nicht in deinem devcpp Codestück
    b) lese ich l und nicht i

    test=new TButton[1];



  • Oder ist es eine 1?. Meine Augen werden alt oder ich muss die Schriftgröße ändern



  • danke für die kompetente hilfe!

    ja,es ist ne 1(eins) 🙂

    wieso geht das nicht,dass mit "TImage *img" zuerst einmal ein einfacher zeiger erstellt wird, der auf eine einzige anfangsadresse verweisst und mit "img=new TImage[10]" dann an dieser anfangsadresse ein array aus TImages mit der elementeanzahl "10"(also von 0-9)erzeugt wird ?



  • Hallo,

    Mit

    Timage *img=new TImage[10]
    

    erzeugst du ein Array mit 10 Elementen auf TImage. Du brauchst aber einer Array auf Pointer von TImage. Scheinbar hast du das Prinzip von Arrays und Pointern noch nicht richtig verstanden.
    Lies mal hier
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39497.html
    Die Erklärung ist aber etwas verworren.



  • doch hab ich eigentlich

    nur bei zeiger auf zeiger bin ich noch neu 😮 .

    Mit

    Timage *img=new TImage[10]
    

    erzeugst du ein Array mit 10 Elementen auf TImage.

    also ein array aus zeigern die auf 10 TImages zeigen?

    sry,für die vielen fragen 😞



  • Zu unterscheiden ist

    ein Zeiger auf 10 TImage

    zehn Zeiger auf je ein TImage ->Timage *img[10];



  • int z,s,btop=0,bleft=0;
    TButton *buttons[30];
    
    for(z=0;z<30;z++)
       {
       if(z%10==0&&z>0)
           {
           btop+=25;
           bleft=0;
           }
    
       buttons[z]=new TButton(Form1);
       buttons[z]->Parent=Form1;
       buttons[z]->Top=btop;
       buttons[z]->Left=bleft;
       buttons[z]->Height=25;
       buttons[z]->Width=50;
       buttons[z]->Caption=z+1;
       buttons[z]->Show();
       bleft+=50;
    
       }
    

    Hab jetzt mal nen kleines prog geschrieben.
    Habs ja auch verstanden,aber ich will nur immer alles ganz genau wissen wenns ums coden geht 🙂

    danke für die hilfe!


Anmelden zum Antworten