Delphi-PRAXiS
Seite 2 von 2     12   

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 31. Jan 2005 10:55

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
Hallo Leute,

ich habe noch ein einfaches Beispiel gemacht und getestet:

Code:
type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Panel1: TPanel;
    Tab1: TTable;
    DS1: TDataSource;
    dbg1: TDBGrid;
    procedure dbg1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// verwendete Datenbank enthält folgendes Feld
//  Geschlecht, A, 1
// in Abhängigkeit von W = weiblich oder M = männlich werden die Zeilen des
//  DBGrid unterschiedlich gefärbt


procedure TForm1.dbg1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
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}
  // Variante 1 zum Einlesen des Wertes aus der Datenbank:
  s := uppercase(Tab1.FieldByName('Geschlecht').AsString);
  // oder
  // Variante 2
  s := uppercase((dbg1.DataSource.DataSet as TTable).FieldByName('Geschlecht').AsString);
  // oder
  // Variante 3
  s := uppercase(((Sender as TDBGrid).DataSource.DataSet as TTable).FieldByName('Geschlecht').AsString);
  // eine Variante reicht natürlich aus !!! 

  if s = 'W' then begin
    dbg1.Canvas.Brush.Color := clBlue;
    dbg1.Canvas.Font.Color := clYellow;
  end
  else if s = 'M' then begin
    dbg1.Canvas.Brush.Color := clRed;
    dbg1.Canvas.Font.Color := clAqua;
  end;
  // falls weder M noch W, dann bleibt die Zeile wie Standard
  dbg1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Wenn irgendetwas bei Euch nicht funktioniert, müßt Ihr mal ein bischen was vom verwendeten Code zeigen.

mfg
eddy

kolio 31. Jan 2005 20:26

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
Vielen Dank eddy,
hab das Problem gefunden. Lag daran, das beim Programmstart noch keine Daten in der Datasource vorhanden sind.

justify 16. Mai 2005 20:01

Hallo zusammen,

ich habe ein Urlaubsantragformular programmiert. Wenn der Chef sich einloggt, hat er via ComboBox die Möglichkeit auszuwählen, welche Urlaubsanträge er sehen will. Einmal alle, einmal die genehmigten, und einmal die nicht genehmigten.

Jetzt möchte ich es so machen, daß die nicht genehmigten rot eingefärbt sind (also nur die Zellen), die genehmigten grün und, wenn er alle sieht, sollen halt auch die nicht genehmigten rot und die genehmigten grün sein.

Kann mir jemand weiterhelfen?

Danke schon mal im Voraus!

justify 17. Mai 2005 17:56

Wäre es zuviel verlangt, wenn man mal eine Antwort bekommen würde? gg

marabu 17. Mai 2005 18:35

Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
 
Was hast du in den letzten 24 Stunden unternommen, um selbst an die Lösung zu gelangen?

Delphi-Quellcode:
procedure TMainForm.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  f: TField;
begin
  f := Query.FieldByName('GENEHMIGT');
  with Sender as TDBGrid do begin
    if f.IsNull then
      Canvas.Brush.Color := clWhite
    else if f.AsBoolean then
      Canvas.Brush.Color := clGreen
    else
      Canvas.Brush.Color := clRed;
    DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;
Grüße vom marabu

justify 18. Mai 2005 19:25

Hallo,

danke für den Code, ich werde es auf der Arbeit mal ausprobieren.

Ich habe nichts unternommen, da ich auf der Arbeit drei Projekte gleichzeitig mache und ich mich, während ich dort nicht weiterkam, mit etwas anderem beschäftigt habe.

Nochmals danke für die Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Seite 2 von 2     12   

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