DBGrid --> aktuelle Zeile erkennen, Farben ändern
Hallo Leute,
ich habe in einem DBGrid die Hintergrund- und Schriftfarbe in den Zeilen in Abhängigkeit eines Zellwertes unter Nutzung von OnDrawColumnCell geändert. Der standardmäßig blaue Balken (clNavy) mit weißer Schrift, der mir die aktuelle Zeile anzeigt, geht mir in diesen Zeilen verloren. Gibt es eine Möglichkeit festzustellen, ob die aktuell zu zeichnende Zeile die aktuell gewählte ist, damit ich die Verwendung von OnDrawColumnCell für diese Zeile unterbinden kann? Beispiel: wenn Feldx den Text 'SUMME' enthält, dann zeichne diese Zeile mit gelber Schrift auf blauen Grund, wenn diese Zeile aber die aktuelle ist, dann verwende die Standardfarben mfg eddy |
Wenn Du OnDrawCell nutzt, dann kannst Du den Parameter State testen.
Delphi-Quellcode:
...:cat:...
if (gdSelected in State) or (gdFocused in State) then
// die zelle ist markiert und/oder selektiert |
Hallo sakura,
vielen Dank für Deine schnell Hilfe! Habe diese Zeile in meine Funktion eingefügt und es klappt jetzt so, wie ich das gern hätte. Der Vollständigkeit halber hänge ich hier noch den Quelltext an, falls mal jemand ein ähnliches Problem hat.
Delphi-Quellcode:
procedure TFAuf.dbg32DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); const parr : array[0..2] of string =(cRAB, cZSM, cA); var s : string; begin // die zelle ist markiert und/oder selektiert // dann sollen die Standard-Farben verwendet werden (weiß auf navy) if (gdSelected in State) or (gdFocused in State) then exit; { ansonsten soll die Farbe in Abhängigkeit eines Strings der angezeigten Datenbank geändert werden Hinweis: die Farben sind hier nur zu Testzwecken ohne Rücksicht darauf, ob sie zueinander passen, frei gewählt worden} s := TabPP.FieldByName('PosArt').AsString; // Number of String - ermöglicht case-Auswertung von Strings // -1, wenn s nicht in Array vorhanden ist sonst 0 für's Erste, usw. case NofStr(s, parr) of 0: begin dbg32.Canvas.Brush.Color := clBlue; dbg32.Canvas.Font.Color := clYellow; end; 1: begin dbg32.Canvas.Brush.Color := clRed; dbg32.Canvas.Font.Color := clAqua; end; 2: if TabPP.FieldByName('SummenKopf').AsBoolean then begin dbg32.Canvas.Brush.Color := clGreen; end; end; dbg32.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; mfg eddy |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
:oops:
ich schaffe es nicht. meine DBGrid Tabelle lässt sich nciht durch canvas.font.color oder so steuern... *heul*!!!!!! kann mir jemand eine demo zur verfügung stellen? |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
Poste mal deine Fehlermeldung, sonst können wir dir nicht helfen ;-)
|
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
nix fehlermeldung. alles ist ok. nur die befehle zeigen keine reaktion. ich vermute, dass ich den code an eine falsche stelle gesetzt habe. ich habe on FormShow und in DrawCell versucht.
Das Beispiel oben bringt mich nicht weiter. Sorry. :freak: |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
eddy hatte es in drawcolumncell realisiert. vielleict liegt da der fehler, oder zeige mal den aufruf !
raik |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
Kann mir bitte jemad sagen was das "TabPP" von eddy bedeutet?
Danke. |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
hallo kolio,
in dem oberen quelltext ist TAbPP eine Tabelle. herzlich willkommen in der DP. raik |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
Danke.
Ich hab's mit
Code:
versucht, geht aber leider nur für die erste Spalte. DataSource1 ist bei mir mit eine Query verbunden.
if DataSource1.DataSet.FieldByName('Wochentag').AsString = '' then
begin // end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 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