Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgridzelle per mouse-click farblich darstellen (https://www.delphipraxis.net/4538-stringgridzelle-per-mouse-click-farblich-darstellen.html)

shine 3. Mai 2003 19:34


Stringgridzelle per mouse-click farblich darstellen
 
Hallo,

weiß jemand, wie ich eine Stringgridzelle durch einfachen Mouse-click farblich darstellen kann.


:witch: Gruss shine

Daniel B 3. Mai 2003 20:40

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:

Christian S. 3. Mai 2003 20:54

Hi!

Was Besseres fällt mir um die Uhrzeit nicht ein, aber probier's mal hiermit:

Delphi-Quellcode:
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;
MfG,
Peter

[edit=Daniel B]Delphi-Tags gesezt. MfG Daniel B.[/edit]

shine 4. Mai 2003 14:02

Danke Peter,

aber ich möchte mehrere Zellen anklicken/markieren.

Gruss Shine :(

Christian S. 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.

shine 5. Mai 2003 08:45

Danke Peter

Gruss Shine :spin:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz