So funktioniert das nicht.
Wenn sich in einem Drawgrid etwas ändern soll, dann muss man
Drawgrid1.Invalidate;
aufrufen damit das Grid neu gezeichnet wird.
Natürlich muss man vorher etwas am Spielfeld ändern, damit man was sieht.
Delphi-Quellcode:
var
spielfeld : array[1..3, 1..3] of char; // Tic-Tac-Toe
procedure TForm1.Button1Click(Sender: TObject);
var
x ,y : Integer;
begin
// irgendwelche Figuren setzen
x := 1;
y := 2;
if spielfeld[x,y] = 'X' then
spielfeld[x,y] := '*'
else
spielfeld[x,y] := 'X';
// Neuzeichnen erzwingen
DrawGrid1.Invalidate;
end;
// dieser Eventhandler zeichnet auf dem Drawgrid
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
figur : Char;
canvas : TCanvas;
begin
canvas := DrawGrid1.Canvas; // Zwischenvariable spart Schreibarbeit
// Hintergrund zeichnen (kann entfallen, falls Spielfiguren nicht transparent sind)
canvas.brush.Color := clGrey;
canvas.FillRect(rect);
// Spielfigur zeichen
figur := spielfeld[ACol-1, ARow-1];
case figur of
' ': ImageList1.Draw(canvas, Rect.Left, Rect.Top, 0);
'*': ImageList1.Draw(canvas, Rect.Left, Rect.Top, 1);
'X': ImageList1.Draw(canvas, Rect.Left, Rect.Top, 2);
end;
end;