![]() |
Färben von einer Zelle nicht mit Event von Zelle möglich
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:
Dann habe ich mir gedacht, dass das OnMouseDown-Event so aussehen müsste:
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;
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
Delphi-Quellcode:
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.
StrGrdSpielFeld.Repaint;
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 :gruebel: ? Danke :zwinker: |
Re: Färben von einer Zelle nicht mit Event von Zelle möglich
Zitat:
Delphi-Quellcode:
Gruss Reinhard
procedure TFrmMain.StrGrdSpielfeldMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin StrGrdSpielfeld.MouseToCell(X, Y, ClickedCol, ClickedRow); { vielleicht Invalidate nötig } end; procedure TFrmMain.StrGrdSpielfeldMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ClickedCol := -1; ClickedRow := -1; { vielleicht Invalidate nötig } end; procedure TFrmMain.StrGrdSpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var CellColor : TColor; begin CellColor := clBtnFace; if (ACol=ClickedCol) and (ARow=ClickedRow) then CellColor := clLime; StrGrdSpielfeld.Canvas.Brush.Color := CellColor; StrGrdSpielfeld.Canvas.FillRect(Rect); end; |
Re: Färben von einer Zelle nicht mit Event von Zelle möglich
Aber so wird man doch "gezwungen" Unit-Globale Variablen zu verwenden, oder ?
|
Re: Färben von einer Zelle nicht mit Event von Zelle möglich
Zitat:
Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz