![]() |
Re: DBGrid --> aktuelle Zeile erkennen, Farben ändern
Hallo Leute,
ich habe noch ein einfaches Beispiel gemacht und getestet:
Code:
Wenn irgendetwas bei Euch nicht funktioniert, müßt Ihr mal ein bischen was vom verwendeten Code zeigen.
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; mfg eddy |
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. |
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! |
Wäre es zuviel verlangt, wenn man mal eine Antwort bekommen würde? gg
|
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:
Grüße vom marabu
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; |
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 04:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz