Einzelnen Beitrag anzeigen

Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#5
  Alt 4. Mai 2003, 17:21
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
  Mit Zitat antworten Zitat