![]() |
TStringGrid.Ondrawcell (Parameter?)
Ich habe folgendes Problem:
Ich möchte eine Zelle aus einem StringGrid bunt Färben. Dazu gibt es den Befehl
Delphi-Quellcode:
ich weiss nur nicht was ich bei Sender: Tobject, Rect :TRect und State :TGridDrawstate hinschreiben muss damit es Bunt wird? :gruebel:
Ondrawcell (Sender: Tobject; ACol :integer; ARow :integer; Rect :TRect; State :TGridDrawstate)
|
Re: TStringGrid.Ondrawcell (Parameter?)
Hallo,
so wird z.B. eine bestimmte Zelle eingefärbt:
Delphi-Quellcode:
Gruß
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var s: String; begin if (ACol = 2) and (ARow = 3) then with Sender as TStringGrid do begin s := Cells[ACol, ARow]; Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT); end; end; s14 |
Re: TStringGrid.Ondrawcell (Parameter?)
Danke für deinen Beitrag, allerdings klappt es nach mehrmaligem ausprobieren noch nicht.
Kann mir das mal jemand für dieses Beispiel eine Prozedure schicken: Feld: TStringGrid; Button1: TButton; Wenn ich nun auf den Button klicke soll die Zelle [x,y] Rot gefärbt werden. Danke an alle die mir helfen! |
Re: TStringGrid.Ondrawcell (Parameter?)
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
Rect: TRect; State: TGridDrawState); Procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; Rect: TRect; State: TGridDrawState);
Delphi-Quellcode:
CellX & CellY sind private Variablen deines Forms und bekommen beim OnClick des Buttons:
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
Rect: TRect; State: TGridDrawState); Var s : String; Begin With Sender As TStringGrid Do Begin If (aCol < FixedCols) Or (aRow < FixedRows) Then Exit; //Fixed col / Fixed row => Exit If (aCol = CellX) And (aRow = CellY) Then // Wenn zu zeichnende Zelle den Koord. entspricht ... Begin s := Cells[aCol, aRow]; Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT); End Else Begin // Wenn nicht dann in der Farbe des Stringgrid einfärben (altes Rot weg) s := Cells[aCol, aRow]; Canvas.Brush.Color := Color; Canvas.FillRect(Rect); DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT); End; End; End;
Delphi-Quellcode:
Da alle Zellen bis auf die "Fixed"-zellen überzeichnet werden kann es bei großen Grids ziemlich aufwending werden!
CellX := StringGrid1.Col;
CellY := StringGrid1.Row; StringGrid1.Repaint; |
Re: TStringGrid.Ondrawcell (Parameter?)
Delphi-Quellcode:
Mit SetLength musst du dann das Array an deine Zeilen und Spaltenzahl anpassen
var MyCells : array of array of TColor;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var s: String; begin if MyCells[ACol,ARow] <> 0 then with Sender as TStringGrid do begin s := Cells[ACol, ARow]; Canvas.Brush.Color := MyCells[ACol,ARow]; Canvas.FillRect(Rect); DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_LEFT); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Setlength(MyCells,10,20); end; procedure TForm1.Button1Click(Sender: TObject); begin MyCells[Stringgrid1.Selection.Left,Stringgrid1.Selection.Top] := clRed; end; (wenn die sich in Programmverlauft ändern sollten). (Siehe FormCreate) |
Re: TStringGrid.Ondrawcell (Parameter?)
Vielen dank an euch alle die mir geholfen haben. Es funktioniert jetzt alles so wie ich es wollte. :dp:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 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