Probleme beim Erstellen von 10 TImage Objekten im Kreis
-
Hallo,
ich würde gerne 10 TImage Objekten in einem Kreis angeordnet erstellen die dann jemand nach Auswahl der Combobox geladen werden.
Die TImage Objekte sollen aber über einem anderes TImage geladen werden.
Bis jetzt sieht der Code wie folgt aus:#include <math.h> #include <vector> //----- const String Pfad = "H:\\"; const int MittelpunktX = 432; const int MittelpunktY = 332; int X = 0; int Y = 0; std::vector<TImage*> Image; //----- void __fastcall TForm1::FormCreate(TObject *Sender) { try { Image->Picture->LoadFromFile(Pfad + "Hintergrund.bmp"); } catch(...) { Application->MessageBoxA("Bild konnte nicht geladen werden!", "Fehler", 0+16); } //10 TImage Dateien werden im Kreis angeordnet und erstellt for (int i=1; i<10; i++) { X = MittelpunktX + cos((i+1)*36) *5; Y = MittelpunktX + sin((i+1)*36) *5; Image.push_back(new TImage(0)); Image.back()->Height = 10; Image.back()->Width = 10; Image.back()->Left = X - 5; Image.back()->Top = Y - 5; } //----- void __fastcall TForm1::Ingredient1ComboBoxChange(TObject *Sender) { switch(Ingredient1ComboBox->ItemIndex) { case 0: { try { Image[1]->Picture->LoadFromFile(Pfad + "1.bmp"); Image[6]->Picture->LoadFromFile(Pfad + "1.bmp"); } catch(...) { Application->MessageBoxA("Bild konnte nicht geladen werden!", "Fehler", 0+16); } break; } case 1: { try { Image[1]->Picture->LoadFromFile(Pfad + "2.bmp"); Image[6]->Picture->LoadFromFile(Pfad + "2.bmp"); } catch(...) { Application->MessageBoxA("Bild konnte nicht geladen werden!", "Fehler", 0+16); } break; } ...
Könnt ihr mir sagen, was ich falsch mache?
-
Hallo.
Könntest du das Problem vieleicht Präzisioneiren.
(Was geht nicht, Wo tauchen Fehler auf)?Hier nochmals zum Verständniss. (Verstehe ich das richtig?)
ich würde gerne 10 TImage Objekten in einem Kreis angeordnet erstellen die dann jemand nach Auswahl der Combobox geladen werden.
- Du willst in einer Combobox einen Eintrag auswählen. Aufgrund der Auswahl werden dann die entsprechenden Image-Objekte geladen?
Die TImage Objekte sollen aber über einem anderes TImage geladen werden.
- Du hast ein TImage-Objekt mit einem Bild. Eine weiteres TImage-Objekt sollte nun das Bild des ersten Objekts holen und anzeigen?
-
Einen kleinen Fehler sehe ich auf Anhieb:
Y = MittelpunktX + sin((i+1)*36) *5; // <- MittelpunktY macht wohl mehr Sinn -)
Ansonsten habe ich dein Problem ebensowenig wie mein Vorposter verstanden...
P.S.
Außerdem solltest du für die MessageBox besser die Konstanten 'MB_OK', 'MB_OKCANCEL' etc. verwenden.
-
Mein Problem liegt darin, das wenn ich in einer Combobox was auswähle, kein Bild erscheint.
Ich weiss aber nicht, ob es daran liegt, ob die TImage objecte nicht angesprochen werden, oder ob wie garnicht erzeigt werden, oder ob sie nur auf der gleichen Ebene liegen wie das Hintergrund Image.Zitat:
ich würde gerne 10 TImage Objekten in einem Kreis angeordnet erstellen die dann jemand nach Auswahl der Combobox geladen werden.
- Du willst in einer Combobox einen Eintrag auswählen. Aufgrund der Auswahl werden dann die entsprechenden Image-Objekte geladen?
Genau
Zitat:
Die TImage Objekte sollen aber über einem anderes TImage geladen werden.
- Du hast ein TImage-Objekt mit einem Bild. Eine weiteres TImage-Objekt sollte nun das Bild des ersten Objekts holen und anzeigen?
Nein das Hintergrundbild soll bleiben doch darüber soll dann halt ein Bild geladen werden
http://img46.imageshack.us/img46/3203/zeichnungum0.jpg
Das ist der Link zu einer Zeichnugn die das Verständnis vereinfachen sollte.
-
^Wenn es immer noc nicht klar sein sollte, fragt ruhig.
MfG
Dome
-
Hallo
Das Problem ist folgendes.
Das Image-Objekt, weiss nicht zu wem es gehört.Darum musst du Ihm noch die Informationen zum Parentobjekt mitteilen.
Image.back()->Parent=Form1;
Dann sollte es gehen.
-
Man sollte vielleicht noch erwähnen, dass sin und cos mit Radiant und nicht mit DEG arbeiten, so dass die sin-Aufrufe im obigen Text nicht das ergeben was erwümscht ist.
-
Sie ist den das zu ändern?
-
Was soll geändert werden? Das sin und cos Radiant verwenden?
Nein, du mußt schon umrechnen.
-
Was muss ich den mal 57,29 nehmen?
-
-
Muss ich den das Ergebnis, was ich daraus bekomme durch 57,29 teilen oder wie ist das zu verstehen?
-
Nicht das Ergebnis, sondern den Wert den du übergibst.
Also z.Bsp. stattcos((i+1)*36)
mußt du
cos((i+1)*36 * M_PI / 180)
schreiben.
-
Thx für eure Hilfe, jetzt streikt aber der Vektor Container sobald ich Element 9 und 10 aufrufe, von wegen AccessViolation.
Woran kann das den nun schon wieder liegen?
-
Ganz einfach daran, dass es sie nicht gibt. Deine Schleife sieht ja so aus.
for( int i=1; i<10; i++)
Mit dem in der Schleife befindlichen push_back beförderts du also 9 TImage-Instanzen in deinen vector. Das wären dann also die Indizes 0 bis 8. Also gibt es Index 9 und 10 nicht.
-
Ach mist, ich glaub ich hab echt Tomaten auf den Augen-.-
Vielen Danke für eure Hilfe.
Close bitte
-
[b]for (int i=0; i<10; i++)[/b] { X = MittelpunktX + cos[b](i*36*M_PI/180)*100[/b]; Y = Mittelpunkt[b]Y[/b] + sin[b](i*36*M_PI/180)*100[/b]; Image.push_back(new TImage(0)); Image.back()->Height = 10; Image.back()->Width = 10; Image.back()->Left = X - 5; Image.back()->Top = Y - 5; [b]Image.back()->Parent = this;[/b] }