Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TStringGrid.Ondrawcell (Parameter?) (https://www.delphipraxis.net/14616-tstringgrid-ondrawcell-parameter.html)

Michael Leyhe 12. Jan 2004 16:10


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:
Ondrawcell (Sender: Tobject; ACol :integer; ARow :integer; Rect :TRect; State :TGridDrawstate)
ich weiss nur nicht was ich bei Sender: Tobject, Rect :TRect und State :TGridDrawstate hinschreiben muss damit es Bunt wird? :gruebel:

s14 12. Jan 2004 16:12

Re: TStringGrid.Ondrawcell (Parameter?)
 
Hallo,
so wird z.B. eine bestimmte Zelle eingefärbt:

Delphi-Quellcode:
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;
Gruß
s14

Michael Leyhe 12. Jan 2004 16:32

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!

Robert_G 12. Jan 2004 16:51

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:
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;
CellX & CellY sind private Variablen deines Forms und bekommen beim OnClick des Buttons:

Delphi-Quellcode:
CellX := StringGrid1.Col;
CellY := StringGrid1.Row;
StringGrid1.Repaint;
Da alle Zellen bis auf die "Fixed"-zellen überzeichnet werden kann es bei großen Grids ziemlich aufwending werden!

Nightshade 12. Jan 2004 17:08

Re: TStringGrid.Ondrawcell (Parameter?)
 
Delphi-Quellcode:
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;
Mit SetLength musst du dann das Array an deine Zeilen und Spaltenzahl anpassen
(wenn die sich in Programmverlauft ändern sollten). (Siehe FormCreate)

Michael Leyhe 12. Jan 2004 19:51

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 21:32 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