AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid --> aktuelle Zeile erkennen, Farben ändern
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid --> aktuelle Zeile erkennen, Farben ändern

Ein Thema von eddy · begonnen am 8. Feb 2003 · letzter Beitrag vom 18. Mai 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#11

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

  Alt 31. Jan 2005, 11:55
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
  Mit Zitat antworten Zitat
kolio

Registriert seit: 30. Jan 2005
Ort: Plauen
9 Beiträge
 
#12

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

  Alt 31. Jan 2005, 21:26
Vielen Dank eddy,
hab das Problem gefunden. Lag daran, das beim Programmstart noch keine Daten in der Datasource vorhanden sind.
  Mit Zitat antworten Zitat
justify
(Gast)

n/a Beiträge
 
#13
  Alt 16. Mai 2005, 21: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!
  Mit Zitat antworten Zitat
justify
(Gast)

n/a Beiträge
 
#14
  Alt 17. Mai 2005, 18:56
Wäre es zuviel verlangt, wenn man mal eine Antwort bekommen würde? gg
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

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

  Alt 17. Mai 2005, 19:35
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
  Mit Zitat antworten Zitat
justify
(Gast)

n/a Beiträge
 
#16
  Alt 18. Mai 2005, 20: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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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