AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DevExpress TcxGrid Zeilen einfärben

DevExpress TcxGrid Zeilen einfärben

Ein Thema von rokli · begonnen am 21. Aug 2020 · letzter Beitrag vom 25. Aug 2020
Antwort Antwort
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
244 Beiträge
 
Delphi 10.4 Sydney
 
#1

DevExpress TcxGrid Zeilen einfärben

  Alt 21. Aug 2020, 12:44
Hallo zusammen,

seit einiger Zeit kämpfe ich mit DevExpress VCL! Super Tools! Super Möglichkeiten! Super schwer (für mich)!

Ich habe ein TcxGrid, das ich über den DataController mit einer DataSource verbunden habe. Da ich persistente Felder in der Query habe, hab ich die auf dem Weg eingebunden und die Felder auch bereist im Aussehen (Breite, Ausrichtung) angepasst. Alles gut.

Ein Tipp zum Einfärben von Zeilen im DevExpress Forum war, wie bei einem Delphi Grid über das Neuzeichnen (OnDrawDataCelll) die Farbe hinzuzufügen. Aber das Event find ich nicht.

Wie kann ich die Zeilen einfärben? Zum einen möchte die guten alten Leselinien (grün/hellgrün) im Grid darstellen und in der Folge dann auch mal einzelne Zeilen werteabhängig einfärben.

Hat jemand eine Info? Danke!

Edit: Kleine Korrekturen
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney

Geändert von rokli (21. Aug 2020 um 12:54 Uhr)
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
231 Beiträge
 
#2

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 21. Aug 2020, 14:07
das Event nennt sich OnCustomDrawCell
Du kannst aber auch das Event OnGetContentStyle nehmen.
Dort kann man einer Zelle einfach Styles zuweisen.
Die Styles kannst Du vorher im Designer erstellen oder du fügst welche per code ein
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.009 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 21. Aug 2020, 14:28
ggf. könnte auch conditional formatting rules interessant sein.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
244 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 21. Aug 2020, 15:37
Hallo Early Bird,

ich habs gefunden! Habe mal die Position angehängt. Und probiere das heute oder morgen aus!

Hallo Juergen,

hab mir das Sample heruntergeladen und schaue mir auch das morgen an!

Danke!
Miniaturansicht angehängter Grafiken
oncustmerdrawcell_devexp_grid.png  
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.492 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 21. Aug 2020, 19:41
Wir hatten/haben auch ziemlich oft OnCustomDrawCell implementiert.

Dann auch teilweise in dynamischen SQLs gewisse Formatierungsspalten, welche im OnCustomDrawCell abgerufen wurden.

Das hatte ich dann mal in eine zentrale Komponente verfrachtet und verallgemeinter, welche inzwischen direkt im DBGridView eingebaut ist.
Das mit den Conditional-Formatting-Rules klingt allerdings nett und es lässt sich bestimmt Vieles darauf umstellen.
Allerdings kommt es bei uns auch auf die Reihenfolge drauf an. Die erste Spalte mit einem Wert hat vorrang.
..., Yellow=False, Red=True, Green=True -> Zeile ist rot
..., Yellow=False, Green=True, Red=True -> Zeile ist grün


Boolean-Spalten: für Red, Green, Blue, Yellow (Hintergrund), TextGreen (Text), Bold, Italic usw.
Dann noch eine Color-Spalte, die einen Farbwert angeben kann (RGB mit Integer/TColor oder RGB/Name als String)
Und noch eine generelle Format-Spalte, wo man mehrere "Formate" in einem String angeben kann.

Das gilt so für die ganze Zeile und nochmal mit Feldname_Format (z.B. name_red) für eine bestimmte Spalte/Zelle.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (21. Aug 2020 um 21:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.009 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 21. Aug 2020, 20:53
Das mit den Conditional-Formatting-Rules klingt allerdings nett und es lässt sich bestimmt Vieles darauf umstellen.
Als Hinweis: Ich hatte Conditional-Formatting-Rules mal getestet als es rauskam. Damals war es für mich viel zu langsam. Ich meine aber gelesen zu haben, dass da inzw. an der Performance gefeilt wurde. Datenmenge ist wohl entscheidend.
Bisher hatte ich farbliche Anpassungen bei bestimmten Bedingungen auch immer über Styles umgesetzt, so wie es EarlyBird in Post #2 beschrieben hat.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
134 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 22. Aug 2020, 09:01
Ich würde auch OnGetContentStyle bevorzugen, ist nochmal deutlich performanter als OnCustomDrawCell.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
244 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: DevExpress TcxGrid Zeilen einfärben

  Alt 25. Aug 2020, 12:41
Hallo und vielen Dank für die Tipps.

Wenn man mit einer "manuellen" Einstellung arbeiten will, kann man das so machen:

Delphi-Quellcode:
procedure TfrmMain.cxGrid1DBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
{-----------------------------------------------------------------------------------------------------------------------
   Farbeinstellungen im DevExpress TcxGrid
   sind Spalten und Zeilen aktiv, wird die letzte Einstellung verwendet
-----------------------------------------------------------------------------------------------------------------------}

var
   clBkHell         : TColor;
   clTxHell         : Tcolor;
   clBkDunkel      : TColor;
   clTxDunkel : TColor;
   clBkCursor      : TColor;
   clTxCursor    : TColor;
begin
   clBkHell         := clWebCornSilk;
   clTxHell         := clBlack;
   clBkDunkel      := clWebWheat;
   clTxDunkel      := clBlack;
   clBkCursor      := clNavy;
   clTxCursor      := clWhite;

// Spalten
{   with AViewInfo.GridRecord do begin
      if Odd(AViewInfo.Item.ID) then begin// bei ungerader Spaltenzahl
         ACanvas.FillRect(AViewInfo.Bounds, clBkDunkel);   // RootLookAndFeel.Painter.DefaultContentOddColor );
         ACanvas.Font.Color := clTxDunkel;
      end
      else begin
         ACanvas.FillRect(AViewInfo.Bounds, clBkHell); // RootLookAndFeel.Painter.DefaultContentEvenColor );
         ACanvas.Font.Color := clTxHell;
      end;
   end;
}

   // Zeilen
   if Odd(AViewInfo.GridRecord.RecordIndex) then begin
      ACanvas.FillRect(AViewInfo.Bounds, clBkDunkel);   // RootLookAndFeel.Painter.DefaultContentOddColor );
      ACanvas.Font.Color := clTxDunkel;
   end
   else begin
      ACanvas.FillRect(AViewInfo.Bounds, clBkHell); // RootLookAndFeel.Painter.DefaultContentEvenColor );
      ACanvas.Font.Color := clTxHell;
   end;

   // Cursor Zeile
   if AViewInfo.Selected then begin
      ACanvas.FillRect(AViewInfo.Bounds, clBkCursor); // RootLookAndFeel.Painter.DefaultContentOddColor );
      ACanvas.Font.Color := clTxCursor;
   end;
end;
Das funktioniert immer dann gut, wenn Skins und Styles nicht eingesetzt werden.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 22:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf