Habe Probleme Bilder in eine Tabelle zu füllen.
-
Hallo,
Ich habe im Augenblick das Problem das ich meine Tabelle "DrawGrid1" nicht mit Bildern aus einer Imagelist "ImageList1" befüllt bekomme. Ich bekomm vom Compiler beiim übersetzen folgenden Fehler: "E2294 Auf linker Seite der Struktur ist . oder .* erforderlich" Den Fehler bekommich 2 mal. Bezieht sich wohl auf die Werte Rect.Left und Rect.Top. Was mache ich falsch. Ich möchte erreichen das beim Drücken des "Button1" die Werte aus SpielFeldCopy (SpielFeldCopy[7][6]...genau so ist die Tabelle aufgebaut) anhand der Imagelist1, wo die Bilder ja in Indizes gespeichert sind in die Tabelle "DrawGrid1" gemalt werden.
Würde mich sehr freuen wenn mir jemand bei dem Fehler weiterhelfen kann.MFG
Mr.Blond
Hier der Code:
void __fastcall TForm1::Button1Click(TObject *Sender) { if (Timer1->Enabled==0){ for (int i=0;i<7;i++){ for (int j=0; j<6;j++){ if (SpielFeld.SpielFeld[i][j]==22){ SpielFeldCopy[i][j]=SpielFeld.InitFeld[i][j]; ImageList1->Draw(DrawGrid1->Canvas,Rect.Left,Rect.Top,SpielFeldCopy[i][j]); } } } DrawGrid1->Repaint(); Timer2->Enabled=1; } }
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Borland C++ Builder (VCL/CLX) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wo kommt denn dieses Rect her bzw. wie ist es deklariert?
-
Ich hab es nicht deklariert. Ich dachte das ist ne Standartanweisung durch die bestimmt wird wo genau das Bild in der Tabelle eingefügt wird . Da das Bild die gleich größe wie das TabellenFeld hat, gebe ich Rect.Left und Rect.Top an um das Bild links oben einzufügen. Dann passt das haargenau.
Aber warum er das nicht will weiss ich auch nicht.
Bin offen für alle Ideen und Vorschläge.
-
Eben nicht.
Am sinnvollsten ist wohl, wenn du die Koordinaten anhand der Schleifeniteratoren berechnest, die du ja eh' schon verwendest. Was du mit dem Rect willst, verschließt sich mir völlig...
-
Du willst also Bilder in die Zellen eines DrawGrids. Das wird dann so sowieso nichts da beim erstbesten Refresh (Scrollen, Überdecken o.ä.) deine ganzen Bilder wieder mit dem Hintergrund übermalt werden. Das Zeichnen der Bilder wirst du wohl in ein OnDrawCell-Ereignis packen müssen. Dazu gibtst was in der FAQ. Ist zwar für TStringGrid sollte hier aber trotzdem funktionieren.
Mit dem ButtonClick musst du dann nur noch ein Flag setzen Repaint für das DrawGrid aufrufen.
Nur so nebenbei:
Um deine Rects zu bekommen könntest du die Methode CellRect vom DrawGrid verwenden.
-
Du machst dir das ganze zu umständlich. Da ich die eigentliche Aufgabe kenne als Tipp:
Du musst dein ursprüngliches Feld sichern (z.B.: SpielFeld.Copy[i][j]=SpielFeld.SpielFeld[i][j]
und anschließend setzt du SpielFeld.SpielFeld[i][j]=SpielFeld.InitFeld[i][j]
(gibt dabei aber noch etwas zu beachten in Bezug auf bereits umgedrehte Paare!!!)das zeichnen des 'geschummelten' Feldes übernimmt DrawGrid1->Repaint() von allein.
nach Ablauf des Timers einfach die ganze Funktion wieder umdrehen.
-
Rainbow99 schrieb:
Du machst dir das ganze zu umständlich. Da ich die eigentliche Aufgabe kenne als Tipp:
Du musst dein ursprüngliches Feld sichern (z.B.: SpielFeld.Copy[i][j]=SpielFeld.SpielFeld[i][j]
und anschließend setzt du SpielFeld.SpielFeld[i][j]=SpielFeld.InitFeld[i][j]
(gibt dabei aber noch etwas zu beachten in Bezug auf bereits umgedrehte Paare!!!)das zeichnen des 'geschummelten' Feldes übernimmt DrawGrid1->Repaint() von allein.
nach Ablauf des Timers einfach die ganze Funktion wieder umdrehen.

Ein ganz herzliches Dankeschön an alle, vor allem an Rainbow99.
Jetzt habe ich es endlich geschafft. Alles läuft wie gewollt.
Ich war mit diesem unnützen Code: "ImageList1->Draw(DrawGrid1->Canvas,Rect.Left,Rect.Top,SpielFeldCopy[i][j]);total auf dem falschen Dampfer. Danke nochmal an alle!