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/)
-   -   StringGrid einfärben (https://www.delphipraxis.net/103065-stringgrid-einfaerben.html)

c.Stetter 9. Nov 2007 12:49


StringGrid einfärben
 
Hallo,


ich wollte ein StringGrid einfärben (4 Zeilen Geld, 3 Zeilen Rot, usw)

Manuel mache ich das so :

Delphi-Quellcode:
procedure TMainForm.grd_SpieleDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  inherited;
  with (sender as TStringGrid) do
  begin
    if ((aRow = 9) or (aRow = 10) or (aRow = 11) or (aRow = 12)) then
    begin
     Canvas.Brush.Color := clGradientActiveCaption ;
     Canvas.FillRect(Rect);
     Canvas.TextOut(Rect.Left+2, Rect.Top+2, (sender as TStringGrid).Cells[ACol, ARow]);
    end;
  end;
end;
hier werden die Zeilen 9, 10, 11, 12 eingefärbt.

Ich habe 18 Farben, mit der ich das StringGrid einfärben muss.
Würde ich das manuel machen, so würde der Quelltext ziemlich lang.

Danke für eure Hilfe

mkinzler 9. Nov 2007 12:52

Re: StringGrid einfärben
 
Und nach welcher Logik soll gefärbt werden?

DP-Maintenance 9. Nov 2007 12:53

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
TStringGrid -> VCL

c.Stetter 9. Nov 2007 12:56

Re: StringGrid einfärben
 
Ich bräuchte eine procedure oder function in der ich zum beispiel parameter übergebe.

ich stelle mir z.b vor

procedure Einfaeben(aStringGrid: TStringGrid; aRow, aCol : integer; Farbe : TColor);


nur weiß ich nicht genau wie man das mach. Bin noch nicht lange dabei. :oops:

mkinzler 9. Nov 2007 12:58

Re: StringGrid einfärben
 
So geht es nicht. du könntest aber einen Eigenschaftenarray, in dem du das ablegst, anlegen, welcher dann im Ownerdraw ausgewertet wird.

c.Stetter 9. Nov 2007 13:26

Re: StringGrid einfärben
 
:wiejetzt:

ich glaube das ist ein bißchen zu hoch für mich. kannst du mir nen kleinen tipp geben, wie ich anfangen muss.

c.Stetter 9. Nov 2007 13:35

Re: StringGrid einfärben
 
Ich habe nur ein problem mit :

Delphi-Quellcode:
  with (sender as TJVStringGrid) do
  begin
=>   if ((aRow = 9) or (aRow = 2) or (aRow = 5) or (aRow = 1)) then
    begin
     Canvas.Brush.Color := Farbe ;
     Canvas.FillRect(Rect);
     Canvas.TextOut(Rect.Left+2, Rect.Top+2, (sender as TJvStringGrid).Cells[ACol, ARow]);
    end;
  end;
gibt es eine möglichkeit hier zu bestimmen, welche zeile übergeben wird ???

marabu 9. Nov 2007 15:04

Re: StringGrid einfärben
 
Herzlich willkommen in der Delphi-PRAXiS, c.Stetter.

Deine Code-Zeilen stammen doch aus dem OnDrawCell-Handler, oder? Dort werden dir schon die Zell-Koordinaten (ACol, ARow) übermittelt. Du kannst mit einer Abbildungsfunktion arbeiten oder das CASE-Konstrukt direkt im Event-Handler reinschreiben:

Delphi-Quellcode:
function LookupColor(index: Integer): TColor;
begin
  case index of
    0..4: Result := clRed;
    5..9: Result := clBlue;
    else
      if Odd(index)
        then Result := clGreen
        else Result := clWhite;
  end;
end;

procedure TMainForm.grd_SpieleDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  with (Sender as TJVStringGrid) do
  begin
    Canvas.Brush.Color := LookupColor(ARow);
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
  end;
end;
Freundliche Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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