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