Autor Beitrag
red-7-seven
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 20.03.03 15:53 
Hallo mal wieder!

Habe folgendes Problem mit meinem Stringgrid. Ich lade dort per ondraw-cell-Ereignis Bilder von einer Imageliste in das Stringgrid.
Wenn ich dann beim Ausführen des Programms auf eine Zelle d. Stringgrids mit der Maus klicke, so verschwindet entweder das Bild und weißer Hintergrund erscheint, oder die ein anderes Bild erscheint...

Wie schaffe ich es, dass die Bilder da bleiben, wo sie sind und nich irgendwie verschwinden?

*danke im voraus*

MfG red-7-seven
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 20.03.03 16:07 
Du solltest mal Deine OnDrawCell-Prozedur zeigen, dann kann man mehr dazu sagen.

Gruß
red-7-seven Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 20.03.03 16:29 
Sieht folgendermaßen aus:
nummer - is global deklariert

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TFrm_Spielfeldeditor.Bilder_ins_Grid_packen(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  bild: Tbitmap;
begin
  bild := Tbitmap.create;

 with Sender as TDrawGrid do
 begin
     Frm_Spielfeldeditor.Image_List_Grid.GetBitmap(nummer, bild);
     Canvas.StretchDraw(rect,bild);
     inc(nummer);
 end;
end;


hoping for help :)

MfG red-7-seven

Moderiert von user profile iconUGrohne: Code-Tags eingefügt!
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 20.03.03 16:38 
Die Frage ist nur noch, wo nummer gesetzt wird. An Deiner Stelle würde ich das zeilenmäßig verarbeiten. Du hast nämlich mit ARow die Zeilenangabe und damit könntest Du u.U. die Bildnummer herausbekommen. Ich weiß ja leider nicht, wie das am Ende laufen soll, aber das ist ein Tipp.

Denn wenn Du einmal gezeichnet hast, hat ja nummer den Index der letzte Zeile und wird dann weiter erhöht. Irgendwann hast Du dann kein Bild mehr in Deiner ImageList und schon wird kein Bild mehr gezeichnet. Also versuchs über ARow.

Gruß
red-7-seven Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 20.03.03 17:00 
Hmm, versteh aber trotzdem irgendwie nich warum meine Bilder verschwinden, wenn ich mit der Maus draufklicke...
was hat das dann mit der Nummer zu tun?
Ondrawcell - wird das denn nicht nur einmal ausgeführt? Dann müssten die Bilder doch dableiben!
Und wie soll das dann mit ARow konkret aussehen *verstehdasirgendwienich*



zweck is die Programmierung einem Spiel... wenn ich es denn schaffen sollte ;)

MfG red-7-seven
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 20.03.03 17:10 
Also, wenn das Grid relativ statisch ist, also in jeder Zeile immer ein bestimmtes Bild aus der ImageList kommt, dann würde ich folgenden Code vorschlagen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TFrm_Spielfeldeditor.Bilder_ins_Grid_packen(Sender: TObject; ACol, 
  ARow: Integer; Rect: TRect; State: TGridDrawState); 
var 
  bild: Tbitmap;
  nummer:Integer; 
begin 
  bild := Tbitmap.create; 
with Sender as TDrawGrid do 
begin 
     nummer:=ACol+(ARow*Grid1.ColCount);
     Frm_Spielfeldeditor.Image_List_Grid.GetBitmap(ARow, bild); 
     Canvas.StretchDraw(rect,bild); 
     end; 
bild.Free //<---- solltest Du auch machen
end;


Oder Du fügst noch irgendwelche Bedinungen ein, in welche Zeile, welches Bild gehört.

Achja, hab gerade gesehen, dass Du mit dem Code ja in jede Zelle ein Bild zeichnest, deswegen hab ich kurzerhand den Code noch etwas umgeformt.
Und vor allem noch das Bild aus dem Speicher gelöscht.
Hoffe, das da oben kommt so in etwa rum, kannst damit ja ein bisschen rumspielen.
red-7-seven Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 21.03.03 09:55 
Danke ! Funktioniert perfekt :)

bis zum nächsten Problem ;)
MfG
red-7-seven