Dann mal so:
Delphi-Quellcode:
var zellen : Array of Array of Boolean; //Genauso viele Elemente wie das StringGrid Zellen hat, muss irgendwo noch init. werden
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
VAR col, row : Integer;
begin
col:=StringGrid1.MouseCoord(x,y).x;
row:=StringGrid1.MouseCoord(x,y).y;
zellen[col,row]:=not zellen[col,row]; //Achtung, hier musst Du sicher sein, dass das Array auch wirklich so groß ist!
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if zellen[Acol,ARow] then
begin
StringGrid1.Canvas.Brush.Color:=clGreen;
StringGrid1.Canvas.FillRect(rect);
StringGrid1.Canvas.TextRect(rect,rect.left+2,rect.top+2,StringGrid1.Cells[Acol,Arow]);
end else inherited;
end;
Probleme bereitet es noch, wenn jemand die Maus in einer Zelle drückt und in einer anderen loslässt. Da müsstest Du noch ein bisschen rumprobieren. Also beispielsweise die Zellen-Koordinaten speichern, in denen gedrückt wurde und im MouseUp-Ereignis schauen, ob es bei den selben Zellen-Koordinaten ausgelöst wird. Dann erst das Array-Element setzen.
MfG,
Peter
@Daniel B: bin aus AUQ die Code-Tags so gewohnt, dass ich sie ohne nachzudenken setze. Delphi-Tags sind cool.
Christian S.
Admin in der Entwickler-Ecke