Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid --> aktuelle Zeile erkennen, Farben ändern (https://www.delphipraxis.net/2813-dbgrid-aktuelle-zeile-erkennen-farben-aendern.html)

eddy 8. Feb 2003 11:33


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

sakura 8. Feb 2003 13:00

Wenn Du OnDrawCell nutzt, dann kannst Du den Parameter State testen.
Delphi-Quellcode:
if (gdSelected in State) or (gdFocused in State) then
  // die zelle ist markiert und/oder selektiert
...:cat:...

eddy 8. Feb 2003 13:19

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

mojo777 13. Sep 2003 16:05

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?

Alexander 13. Sep 2003 16:13

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
Poste mal deine Fehlermeldung, sonst können wir dir nicht helfen ;-)

mojo777 13. Sep 2003 17:43

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:

kiar 13. Sep 2003 17:51

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
eddy hatte es in drawcolumncell realisiert. vielleict liegt da der fehler, oder zeige mal den aufruf !

raik

kolio 30. Jan 2005 20:43

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
Kann mir bitte jemad sagen was das "TabPP" von eddy bedeutet?
Danke.

kiar 30. Jan 2005 20:47

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
hallo kolio,

in dem oberen quelltext ist TAbPP eine Tabelle.


herzlich willkommen in der DP.

raik

kolio 30. Jan 2005 21:38

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
Danke.

Ich hab's mit

Code:
if DataSource1.DataSet.FieldByName('Wochentag').AsString = '' then
begin
  //
end;
versucht, geht aber leider nur für die erste Spalte. DataSource1 ist bei mir mit eine Query verbunden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Seite 1 von 2  1 2      

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