Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DevExpress TcxGrid Zeilen einfärben (https://www.delphipraxis.net/205287-devexpress-tcxgrid-zeilen-einfaerben.html)

rokli 21. Aug 2020 11:44

DevExpress TcxGrid Zeilen einfärben
 
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

EarlyBird 21. Aug 2020 13:07

AW: DevExpress TcxGrid Zeilen einfärben
 
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

juergen 21. Aug 2020 13:28

AW: DevExpress TcxGrid Zeilen einfärben
 
ggf. könnte auch conditional formatting rules interessant sein.

rokli 21. Aug 2020 14:37

AW: DevExpress TcxGrid Zeilen einfärben
 
Liste der Anhänge anzeigen (Anzahl: 1)
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!

himitsu 21. Aug 2020 18:41

AW: DevExpress TcxGrid Zeilen einfärben
 
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.

juergen 21. Aug 2020 19:53

AW: DevExpress TcxGrid Zeilen einfärben
 
Zitat:

Zitat von himitsu (Beitrag 1472197)
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.

lxo 22. Aug 2020 08:01

AW: DevExpress TcxGrid Zeilen einfärben
 
Ich würde auch OnGetContentStyle bevorzugen, ist nochmal deutlich performanter als OnCustomDrawCell.

rokli 25. Aug 2020 11:41

AW: DevExpress TcxGrid Zeilen einfärben
 
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.


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