DrawGrids haben ein Ereignis namens "OnDrawCell", das wird zum Zeichnen jeder einzelnen Zelle aufgerufen.
So ungefähr könnte das aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if not (gdFixed in State) then with (Sender as TDrawGrid) do begin Dec(ACol, FixedCols); Dec(ARow, FixedRows); Canvas.StretchDraw(Rect, EinBitmap); end; end; |
Dieses Beispiel zeichnet das Bitmap "EinBitmap" in alle Zellen des DrawGrids. "Canvas.StretchDraw" sorgt dafür, dass das Bitmap auf Zellengröße gestaucht oder gestreckt wird. Falls das nicht erwünscht ist, kann natürlich auch "Canvas.Draw" benutzt werden. Die beiden "Dec" Anweisungen sind hier eigentlich überflüssig, sollen aber daran erinnern, dass die "ACol, ARow" Koordinaten immer die "festen Zellen" (die grauen am oberen und linken Rand) beinhalten. Wenn man also nur in die normalen Zellen zeichnen will und die Koordinaten für irgendetwas braucht, muss man sie wie gezeigt anpassen.
Wenn du deine Bitmap-Objekte und Zufallszahlen in Arrays speicherst, dann könnte das ganz konkret so aussehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| var Bitmaps: array [0..3] of TBitmap; Zufall: array [0..9, 0..9] of Byte;
procedure Init; var x, y: Integer; begin for x := Low(Bitmaps) to High(Bitmaps) do begin Bitmaps[x] := TBitmap.Create; Bitmaps[x].LoadFromFile(Format('bla%d.bmp', [x])); end; Randomize; for y := Low(Zufall) to High(Zufall) do for x := Low(Zufall[y]) to High(Zufall[y]) do Zufall[y, x] := Random(Length(Bitmaps)); end;
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if not (gdFixed in State) then with (Sender as TDrawGrid) do begin Dec(ACol, FixedCols); Dec(ARow, FixedRows); Canvas.StretchDraw(Rect, Bitmaps[Zufall[ARow, ACol]]); end; end; |