Hallo,
ich stehe vor folgendem Problem. Durch einen Klick auf eine Stringgrid-Zelle soll diese oder auch eine andere (aber immer nur eine) eingefäbt werden. Das ganze soll so sein, dass es beim OnMouseDown-Event passiert. Bei OnMouseUp soll die Farbe wieder weg sein.
Ich habe sowieso ein OnDrawCell-Event für das Stringgrid, was wie folgt aussieht:
Delphi-Quellcode:
procedure TFrmMain.StrGrdSpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if ((ACol=0) and (ARow=1)) or ((ACol=7) and (ARow=0)) then
begin
StrGrdSpielfeld.Canvas.Brush.Color := clBtnFace;
StrGrdSpielfeld.Canvas.FillRect(Rect);
end;
end;
Dann habe ich mir gedacht, dass das OnMouseDown-Event so aussehen müsste:
Delphi-Quellcode:
procedure TFrmMain.StrGrdSpielfeldMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
col,row,dest_col,dest_row : Integer;
tmpZelle : String;
Markierung: TRect;
begin
//Umwandeln der Koordinaten in col und row
StrGrdSpielfeld.MouseToCell(X, Y, col, row);
//Ausgabebereich wählen!
Markierung := StrGrdSpielfeld.CellRect(col,row);
//Markierung auf Zelle setzen
StrGrdSpielfeld.Canvas.Brush.Color := clLime;
StrGrdSpielfeld.Canvas.FillRect(Markierung);
end;
Und das OnMouseUpEvent nur mit dem Inhalt
StrGrdSpielFeld.Repaint;
Leider funktioniert das nicht. Wenn ich allerdings col und row festlege und diese nicht der angeklickten Zelle entsprechen funktioniert es. Col und Row werden aber richtig ermittelt.
Das Problem scheint also dort zu liegen wenn man eine angeklickte Zelle beim OnMouseDown-Event einfärben möchte, hat da jemand villeicht einen Tip
?
Danke