![]() |
Stringgridzelle per mouse-click farblich darstellen
Hallo,
weiß jemand, wie ich eine Stringgridzelle durch einfachen Mouse-click farblich darstellen kann. :witch: Gruss shine |
Hallo und herzlich Willkommen im Forum!
1. Ich habe den Thread nach VCL-Komponenten verschoben. 2. Es bringt nichts in zwei Sparten zu Posten, daher habe ich den anderen Thread gelöscht, sowas gibts hier nicht! ;) Grüsse, Daniel :hi: |
Hi!
Was Besseres fällt mir um die Uhrzeit nicht ein, aber probier's mal hiermit:
Delphi-Quellcode:
MfG,
var
grid_x : Integer = -1; grid_y : Integer; implementation {$R *.dfm} procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin grid_x:=StringGrid1.MouseCoord(x,y).x; grid_y:=StringGrid1.MouseCoord(x,y).y; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ACol = grid_x) and (ARow = grid_y) 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; Peter [edit=Daniel B]Delphi-Tags gesezt. MfG Daniel B.[/edit] |
Danke Peter,
aber ich möchte mehrere Zellen anklicken/markieren. Gruss Shine :( |
Dann mal so:
Delphi-Quellcode:
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.
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; MfG, Peter @Daniel B: bin aus AUQ die Code-Tags so gewohnt, dass ich sie ohne nachzudenken setze. Delphi-Tags sind cool. |
Danke Peter
Gruss Shine :spin: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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 by Thomas Breitkreuz