TImage mit Variable
-
Hi, bin jetzt schon etwas länger am suchen und finde einfach keine Lösung..
Meine Frage ist:
Wie kann ich ein Image mit einer Variable ansprechen?Habe z.B. diese Zeilen in meinem Quellcode:
int i = 1; imgX->Visible=false;
Statt imgX soll halt img1 dort stehen mit der Variable i. Ich weiß einfach nicht wie ich das verknüpfen soll.
Hoffe auf Hilfe! Danke & Gruß
ilu
-
Hallo
Siehe FAQ hier im BCB-Forum, Abschnitt Komponenten benutzen, Thread Dynamische Arrays von Komponenten.
bis bald
akari
-
Hi! Danke für deine Hilfe!
Das hat mir schonmal ein bisschen weitergeholfen, bekomme aber jetzt ne Fehlermeldunghttp://www.abload.de/img/untitledtavi.png
Hier der Code dazu:
DynamicArray<TImage*>imgArray; int imgNum = 9; __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { imgArray.Length = imgNum; for (int i=1; i<imgArray.Length; i++) { imgArray[i]->Visible=false; } }
Warum geht das nicht??
Gruß ilu
-
Hallo
Vermutlich hast du in das Array noch keine Speicheradressen von gültigen TImage-Instanzen kopiert. Es reicht nicht, nur die GTröße des Arrays festzulegen.
Du hast also zwei Möglichkeiten :
Du weist die gültigen, mit dem OI zur Entwurfszeit erstellten TImage-Instanzen zu, bevor du das Arrays benutztimgArray.Length = imgNum; imgArray[0] = Image1; // Der feste name der ersten Image-Komponente imgArray[1] = Image2; ... imgArray[x] = ImageX; for (int i=1; i<imgArray.Length; i++) ...
Das ist natürlich nur eine Notlösung.
Besser ist es die TImage-Komponenten zur Laufzeit gleich ganz dynamisch zu erstellen. Wie das geht wird im den genannten FAQ-Eintrag beschrieben. Der erste Schritt ist natürlich, die zur Entwurfszeit schon angelegten TImage-Komponenten zu löschen.
bis bald
akari
-
Hi again!
Danke für deine erneute Hilfe Bin leider nochn Anfänger, habe C++ seit nem halben Jahr in der Berufsschule, deswegen kann ich mit deinen Aussagen nicht so viel anfangen..
for(int i=1; i < frmMain->ComponentCount; i++) { // Alle Labels verändern if (frmMain->Components[i]->ClassNameIs("TImage")) { dynamic_cast<TImage*>(frmMain->Components[i])->Visible=false; } }
Konnte es jetzt damit lösen! Tolles Forum, der FAQ ist nun in Bookmarks
Schönen Abend & Gruß
ilu
-
ilu schrieb:
dynamic_cast<TImage*>(frmMain->Components[i])->Visible=false;
Das macht man nicht. dynamic_cast<> kann 0 zurückgeben, wenn die Umwandlung nicht möglich ist - dann verursacht dein Code eine Zugriffsverletzung. Du solltest das Ergebnis überprüfen.
Wenn du eigentlich sicher bist, daß der Cast erfolgreich sein muß, dann verwende die Referenz-Variante:
dynamic_cast<TImage&> (*frmMain->Components[i]).Visible = false;
In diesem Fall wird, sofern die Umwandlung scheitert, eine Exception geworfen, mithin der Programmfluß kontrolliert unterbrochen.