Einzelnen Beitrag anzeigen

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