Zugriff auf während der Laufzeit erstellte Objekte
-
Moin
Ich bin am verzweifeln. Wer kann mir helfen??
Ich habe zur Laufzeit eine Reihe von Images durch eine Schleife erstellt.
Und zwar so:int i=0;
TImage *bild;void __fastcall Thtmler2::Button2Click(TObject Sender)
{
for(i=1; i<5 ;i++)
{
bild = new TImage(this);
bild ->Parent = htmler2;
bild ->Name = "Bild" +IntToStr(i);
bild ->Top = 200;
bild ->Left = i100;
bild ->Width = 95;
bild ->Height = 70;
}
}Jetzt meine Frage: Ist es möglich auf diese einzelnen Elemente nach dem Erstellen noch explizit zuzugreifen?
Ich will auf jeden Fall noch OnClick-Ereignisse programmieren und eventuell nochmal die Positionen ändern.
Das ist aber alles nicht möglich da die Elemente zur Entwurfszeit ja noch nicht bestehen und somit der Compiler nen Fehler bringt (is ja logisch).
Kann mir da BITTE jemand helfen??!!Vielen Dank im Vorraus
MfG DerHelli
-
Guten Morgen Helli,
wie wäre es denn wenn du es mal so versuchst:
int i=0; TImage *bild[5]; void __fastcall Thtmler2::Button2Click(TObject *Sender) { for(i=0; i<5 ;i++) { bild[i] = new TImage(this); bild[i]->Parent = htmler2; bild[i]->Name = "Bild" +IntToStr(i); bild[i]->Top = 200; bild[i]->Left = i*100; bild[i]->Width = 95; bild[i]->Height = 70; } }
Wenn mich nicht alles täuscht überschreibst du deine Images und behälst nur das letzte übrig. Auch solltest du daran denken die Images wärend des beendens deines Programmes mit "delete" wieder zu löschen.
Evi48
-
...wies hald auch schon in der FAQ steht... ...und da stehen noch viel mehr spannende Dinge zu dem thema...
-
Schon mal vielen Dank für die Antworten.
Nun habe ich aber das Problem, dass ich die Anzahl der zu erstellenden Elemente zur Entwurfszeit noch nicht weiß.
Dann habe ich im Forum ein Beispiel zu dynamischen Feldern gefunden, welches eigentlich genau zu meinem Problem passt.
Allerdings funktioniert das nicht so richtig.
Ein dynamisches int oder double Feld ist kein Problem, aber bei einem dynamischen TBevel oder TImage Fild kommt immer ein Felhler:
So hab ich's gemacht:void __fastcall Thtmler2::Button2Click(TObject *Sender) { const int spalten = 5; const int zeilen = 3; TBevel **rahmen; rahmen = new TBevel*[spalten]; for(int i=0; i<4 ;i++) { rahmen[i] = new TBevel(this)[zeilen]; rahmen[i]->Parent = htmler2; rahmen[i]->Name = "Rahmen"+IntToStr(i); rahmen[i]->Left = i*100; } }
Könnte mir da vielleicht nochmal jemand weiterhelfen?
Würde mich sehr freuen.MfG DerHelli
-
Ein Dynamitsches Array vielleicht?
-junix
-
Naja das ist doch im Prinzip schon ein dynamisches Array, oder?
Es funktioniert aber leider nicht und ich hab keine Ahnung woran das liegt.
Hat sicher was mit diesem "blöden" this-Pointer zu tun.Schönes We
DerHelli
-
Hi,
also ich hätte dafür einen vector oder ähnliches genutzt! Da kannst du ohne das Array neuerstellen zu müssen einfach Elemente rausnehmen und reintun!MfG
Alexander Sulfrian
-
Ja das mit dem Vektor haben mir auch schon andere Leute vorgeschlagen.
Nur davon habe ich eben so gar keine Ahnung, da ich sonst nur Konsolen C programmiere.
Aber ich werde mich damit jetzt wohl doch mal auseinandersetzen.Vielen Dank erstmal
-
Hi,
hast du dir vielleicht zufällig die FAQ durchgelesen?hier: FAQ - Komponenten benutzen - Dynamische Arrays von Komponenten oder Objekten
MfG
Alexander Sulfrian
-
Cool!
Dann versuch ich mal mein GlückDanke