Zugriff auf ein TImage das auf einen andren Form liegt
-
Also ich will an mehrere TImages Pfade senden doch das haut nicht so richtig hin. Die TImages haben unterschiedliche Namen und ich wollte eigentlich verhindern sie während der laufzeit zu erstellen. Ich habe auch schon ansatz weise was zusammen geprogt doch das haut nicht so richtig hin wenn ich das ohne For-Schleife laufen lasse dann geht er jedes einzelne Komponete nach mit auch aber da weißt er allen TImages den gleichen Pfad zu. Das will ich aber nicht. So hier mal mein Code:
if (fo_formular->Controls[i]->ClassNameIs("TImage")) dynamic_cast<TImage*>(fo_formular->Controls[i])->Picture->LoadFromFile(Query_select->FieldByName("Bild")->AsString);ich habe auch mal was anderes probiert das haut nicht so richtig hin da bekomm ich immer ein Fehler das er den typ nicht umwandeln kann.
habe hier i als int privat deklariert. und lasse das immer um 1 erhöhen beim klick auf den button so das er jedes Image durchleuft(theoretisch)es ist bei beiden soTComponent *comp; comp = this->Components[j]; AnsiString aClass = comp->ClassName(); if(aClass=="TImage") { TImage *img[i] = ((TImage *)(comp));<-- hier sagt er dass img[i]->Picture->LoadFromFile(Query_select->FieldByName("Bild")->AsString); }
-
Vieviele TImage haste denn? Ist die Anzahl konstant? Sonst geht's nur dynamisch.
Mit: TImage *img[i] = ((TImage *)(comp));<-- hier sagt er dass
legst Du ein Feld von TImages an, Anzahl=i : das kann er nicht leiden! Die Anzahl muss eine Konstante sein. Sonst probiers mal mit TList.
Dem Feld kannste nicht EIN Objekt zuordnen.
-
nein, das mit dem Feld nicht EIN Objekt zuordnen hast du falsch verstanden.
sagen wir mal er ist im Feld beim ersten Objekt so jetzt soll er da das aus der DB einfügen (den Pfad) und dann beim nächsten klick auf den Button soll er zum nächsten gehen usw.ja es sind genau 28 TImages. Dich ich per hand erstellt habe.
muss ich also einfach static i = 28 schreiben dann sollte das gehen oder?.
-
Dann mach doch einfach:
in OnCreate:
TImage* ImgListe[28];
ImgListe[0]=new TImage();
ImgListe[0]->Parent=Form1;
.
.
.
ImgListe[27]=new TImage();
ImgListe[27]->Parent=Form1;Irgendwo machste dann:
ImgListe[x]->LoadFromFile[Dateiname);
fuer alle Images!in OnDestroy solltest Du die Images alle deleten!!!
PS: Ist nicht elegant, sollte aber gehen!
Besser ist's ev. mit TList
-
... Aber ich kann ich sein das ich da nen denkfehler hab oder was?
ich erzeug doch damit TImage felder auf z.B. form1 aber ich hab doch schon 28 vorgertigte felder auf form1. ich will aber auf die vorgefertigten zugreifen.
-
Richtig!!!
War n Fehler von mir, hatte nicht dran gedacht, dass die schon da sind!
Also in OnCreate nur:
ImgListe[0]=Form2->Image1;
ImgListe[1]=Form2->Image2;
.
.
ImgListe[27]=Form2->Image28;Das mit delete kannste dann natuerlich weglassen!
-
Wobei es natürlich nicht sehr elegant wäre, 28mal ImgListe[x]=Form2->ImageX; zu schreiben.
Pack (nur) die Images alle auf ein Panel, dann kannst du mittels dessen Controls-Property durch die Images iterieren.