AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringGrid zellen färben

Ein Thema von Grizu · begonnen am 12. Okt 2016 · letzter Beitrag vom 13. Okt 2016
Antwort Antwort
Seite 1 von 2  1 2      
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

TStringGrid zellen färben

  Alt 12. Okt 2016, 15:46
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
Miniaturansicht angehängter Grafiken
grid.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 15:50
Poste doch mal den Code, welchen Du im OnDrawCell nutzt...

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 15:50
Wie sieht Dein Code aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 22:09
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 22:37
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.
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 22:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#7

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 22:46
Setze mal den Pen.Style auf psNone (oder psClear? ) und Pen.Width auf 0...

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: TStringGrid zellen färben

  Alt 12. Okt 2016, 23:40
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.
  Mit Zitat antworten Zitat
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: TStringGrid zellen färben

  Alt 13. Okt 2016, 00:22
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:
Miniaturansicht angehängter Grafiken
rect.jpg  
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#10

AW: TStringGrid zellen färben

  Alt 13. Okt 2016, 05:53
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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 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