![]() |
Text im DBgrid einfärben
Hallo,
zu diesem Thema habe ich im Forum keine Hilfe gefunden. Deshalb wende ich mich jetzt an die Gemeinschaft: Ich kontrolliere in meinem Grid zwei nebeneinanderliegende Felder. Sind die enthaltenen Werte unterschiedlich, möchte ich den Text des einen Feldes mit einer Farbe hervorheben. Wie kann ich die Farbe eines bestimmten Feldinhaltes ändern? Danke & |
Re: Text im DBgrid einfärben
Zitat:
[dp]dbgrid AND färben[/dp] |
Re: Text im DBgrid einfärben
Hai sharky,
ich möchte weder das 'OnDrawColumnCell'-Ereignis strapazieren noch ein Feld oder eine Reihe einfärben. Ich würde bevorzugen mein Problem im 'OnCalculateField'-Ereignis abzuhandeln. Dort liegt mir das aktuelle Feld vor und ich muss 'nur' die Textfarbe abändern...?! Noch andere Vorschläge? Danke & |
Re: Text im DBgrid einfärben
Hi,
nach meiner Meinung ist es die einzige Möglichkeit beim Zeichnen des Grids also in 'OnDrawColumnCell' die Farbe einer Zelle abzuändern ausser du benutzt nicht TDBGrid sondern z.B. TGXDBGrid (von GExperts) dann gibt es u.a. dieses Ereignis:
Delphi-Quellcode:
Einen Link habe ich nicht da das DBGrid nicht mehr von GExperts gepflegt wird sondern zwischenzeitlich von jemand anderen übernommen worden ist der es aber auch nicht mehr macht. Ich kann dir aber gerne meine für Delphi 7 geeignete und leicht verbesserte Version geben.
procedure TFKunEdit.KAGBrowCalcColors(Sender: TObject; Brush: TBrush;
Font: TFont; Column: TColumn; DataCol, DataRow: Integer; State: TGridDrawState); begin if KAGStat.GL('JAHR')= 0 then Brush.Color := clMoneyGreen else if KAGStat.GL('MONAT')= 0 then Brush.Color := clSkyBlue else if KAGStat.GL('ARTGRUPPE')= 0 then Brush.Color := clCream; end; Grüße Frank |
Re: Text im DBgrid einfärben
Hi Frank,
das habe ich beinahe vermutet, dass das nur über diese Ereignisse funktioniert. Ist echt unbequem, da es viel Performance kostet. Gerne schaue ich mal auf die von Dir vorgeschagene Kompo. Gibts denn eine Doku? Danke und |
Re: Text im DBgrid einfärben
Liste der Anhänge anzeigen (Anzahl: 1)
Nein eine Doku habe ich leider nicht aber das ist eigentlich selbst erklärend. Für Fragen stehe ich aber gerne zur Verfügung.
Gruß Frank |
Re: Text im DBgrid einfärben
Hi,
danke Dir. Ich werde bei Gelegenheit mal reinschauen. Zur Zeit bin ich leider indisponiert... |
Re: Text im DBgrid einfärben
Hi,
der Vollständigkeit halber:
Delphi-Quellcode:
Gefunden procedure TForm_Main.DBGrid_MasterDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid: TDBGrid; begin Grid:= TDBGrid(Sender); if 'Bedingung zum Ändern der Schriftfarbe' then begin Grid.Canvas.Font.Color:= clRed; // Text des akt. Feldes Grid.Canvas.TextRect(Rect,Rect.Left +2, Rect.Top +2,Column.Field.AsString); end ![]() |
Re: Text im DBgrid einfärben
???? Ich hatte gedacht Du wolltest DrawColumnCell nicht bemühen ? Oder ging es Grid.Canvas.Font.Color ? Ansonsten ist das der Standardweg den du da beschreibst.
Delphi-Quellcode:
Gruß
procedure TForm_Main.DBGrid_MasterDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid: TDBGrid; begin Grid:= TDBGrid(Sender); if 'Bedingung zum Ändern der Schriftfarbe' then begin Grid.Canvas.Font.Color:= clRed; // Text des akt. Feldes Grid.Canvas.TextRect(Rect,Rect.Left +2, Rect.Top +2,Column.Field.AsString); end Frank |
Re: Text im DBgrid einfärben
Hi Frank,
da hast Du vollkommen Recht. Ich habe bisher keine andere Möglichkeit gefunden. Außer die von Dir angesprochene Komponente. Da ich das OnDrawColumnCell so weit wie möglich eingeschränkt und den Code kurz gehalten habe, kann ich damit leben. |
Re: Text im DBgrid einfärben
Hallo barnti,
ich hab' das mal ausprobiert, weil Du doch in Deiner Problemstellung geschrieben hast, daß Du nur eine einzelne Zelle färben willst. Bei mir wird aber die ganze Zeile verändert. War das so von Dir geplant oder fehlt die Lösung? mfg eddy |
Re: Text im DBgrid einfärben
Hi eddy,
das sollte so Funktionieren. Du musst nur die entsprechende Bedingung setzen. Ich verwende den Code genau so. Die Bedingung bezieht sich auf den Text des zu färbenden Feldes:
Delphi-Quellcode:
...
if Column.FieldName='FeldName' then ... |
Re: Text im DBgrid einfärben
Hallo barnti,
habe Deinen Vorschlag probiert, hat mir aber keine Färbung der Zellen gebracht (nach dem Warum habe ich nicht weiter gesucht. Damit hat's in beiden Varianten funktioniert:
Code:
mfg
// if (DataCol = 1) or (DataCol = 4) or (DataCol = 5) // wenn man die Spalte kennt
s := lower(Grid.Columns.Items[DataCol].FieldName); // wenn man den Feldnamen verwendet if (s = 'kurs') or (s = 'diff') or (s = 'diffp') then Grid.DefaultDrawColumnCell(Rect, 0, Column, State); eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz