Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TStringGrid zellen färben (https://www.delphipraxis.net/190533-tstringgrid-zellen-faerben.html)

Grizu 12. Okt 2016 14:46


TStringGrid zellen färben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe ein TStringGrid bei dem jeder 2. Col eingefärbt wird.
Das funktioniert auch sehr gut.
Aber wenn ich mir das anschaue, dann ist der Anfang der Zelle immer noch weiß. Die Zelle ist nicht komplett eingefärbt.

Hat jemand eine Idee dazu? ich hab jetzt schon Stunden damit verbracht.

Ist wahrscheinlich eine simple Sache aber ich finds nicht.....

hab noch einen Screenshot angefügt

sakura 12. Okt 2016 14:50

AW: TStringGrid zellen färben
 
Poste doch mal den Code, welchen Du im OnDrawCell nutzt...

...:cat:...

mkinzler 12. Okt 2016 14:50

AW: TStringGrid zellen färben
 
Wie sieht Dein Code aus?

Grizu 12. Okt 2016 21:09

AW: TStringGrid zellen färben
 
Das ist der Code den ich benutzt habe:

Delphi-Quellcode:
procedure Tm_settings.tab_visu_settingsDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
  var
  gr : TStringGrid;
begin
gr := (Sender as TStringGrid);

if not odd(aCol) and not (gdFixed in State) then begin
  gr.Canvas.Brush.Color := TColor($D9D9C0);
  gr.Canvas.FillRect(Rect);
  gr.Canvas.TextOut(Rect.Left + 3, Rect.Top + 4, gr.Cells[ACol, ARow]);
end;

if (ARow = 5) then begin
  gr.Canvas.Brush.Color := TColor($FFCC99);
  gr.Canvas.FillRect(Rect);
  gr.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, gr.Cells[ACol, ARow]);
end;

end;

mkinzler 12. Okt 2016 21:37

AW: TStringGrid zellen färben
 
Laut Referenz füllt FillRect den rechten und unteren Rand nicht, aber er scheint den linken und oberen Rand nicht zu Zeichnen. Zeichne mal den Rand mit.

nahpets 12. Okt 2016 21:41

AW: TStringGrid zellen färben
 
Naja, die weißen Striche sind halt die vom Grid gemachten Abstände zwischen den Zellen.

Schau beim Grid im Objektinspektor bei den Options, ob Du da durch Änderungen etwas an der Optik in Deinem Sinne bewegen kannst.

sakura 12. Okt 2016 21:46

AW: TStringGrid zellen färben
 
Setze mal den Pen.Style auf psNone (oder psClear? ) und Pen.Width auf 0...

...:cat:...

Grizu 12. Okt 2016 22:40

AW: TStringGrid zellen färben
 
Ich hab jetzt mal pen.Style und Pen.Width probiert. Das hat leider nicht geholfen.

Der Ansatz von Markus ist gut. Wenn man nur ...Canvas.Frame.Rect(Rect) nimmt, dann sieht man das das Rectangle kleiner als das eigentliche Feld ist.
Und es hängt wohl mit dem Texteinzug zusammen. Setze ich im Objectinspektor BiDiMode auf RightToLeft dann fehlt etwas an der rechten Seite.

Hmm wird noch eine lange Nacht denke ich.

Grizu 12. Okt 2016 23:22

AW: TStringGrid zellen färben
 
Liste der Anhänge anzeigen (Anzahl: 1)
je später der Abend umso einfacher die Lösung...grins.

Dank dem Ansatz von Markus und vielen vielen Lösungsversuchen habe ich es hin bekommen. ob das so die schönste und eleganteste Lösung weiß ich nicht. Aber es geht.
man verschiebt einfach vor dem FillRect den Rect.Left nach links und schon füllt er weiter aus.....

Danke nochmals für eure Hilfe.


Hier nochmal der Code:

Delphi-Quellcode:
procedure Tm_settings.tab_visu_settingsDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
  var
  gr : TStringGrid;
begin
gr := (Sender as TStringGrid);

if not odd(aCol) and not (gdFixed in State) then begin
  gr.Canvas.Brush.Color := TColor($D9D9C0);
  Rect.Left := Rect.Left - 4;
  gr.Canvas.FillRect(Rect);
  gr.Canvas.TextOut(Rect.Left + 3, Rect.Top + 4, gr.Cells[ACol, ARow]);
end;

if (ARow = 5) then begin
  gr.Canvas.Brush.Color := TColor($FFCC99);
  Rect.Left := Rect.Left - 5;
  gr.Canvas.FillRect(Rect);
  gr.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, gr.Cells[ACol, ARow]);
end;

end;
Und noch einen finalen Screenshot:

HolgerX 13. Okt 2016 04:53

AW: TStringGrid zellen färben
 
Hmm..

Hab das mal bei mir nachgebaut:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if not odd(aCol) and not (gdFixed in State) then
    TStringGrid(Sender).Canvas.Brush.Color := TColor($D9D9C0);

  if (ARow = 5) then
    TStringGrid(Sender).Canvas.Brush.Color := TColor($FFCC99);

  TStringGrid(Sender).Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, TStringGrid(Sender).Cells[ACol, ARow]);
end;

Das macht bei mir, dass was Du willst...

das

Canvas.TextRect(

habe ich übringens direkt aus dem Default DrawCell genommen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Seite 1 von 2  1 2      

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