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 itest=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!