![]() |
DBGrid -> Mehrere Zeilen farblich
Hallo zusammen,
ich möchte in meinem DBGrid die Zeilen farblich machen, welche alle das Datum der selektierten Zeile beinhalten. So habe ich es versucht: Hier wird das Datum der selektierten Zeile in eine Globale Variabel geschrieben:
Delphi-Quellcode:
Hier wird dann das ganze farblich gemacht:
procedure TDM_Query_UP.DS1DataChange(Sender: TObject; Field: TField);
begin Arbeitsplan_Datum_Selektiert := ''; if DM_Query_UP.Query1.isempty then exit; Arbeitsplan_Datum_Selektiert := datetostr(DM_Query_UP.Query1['DATUM']); end;
Delphi-Quellcode:
Wenn ich nun die verschiedenen Zeilen selektiere werden die Zeilen nicht richtig farblich gezeichnet.
procedure TForm1.DBG1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if DM_Query_UP.Query1.isempty then exit; DBG1.Canvas.Brush.Color := clGradientInactiveCaption; DBG1.DefaultDrawColumnCell(Rect, DataCol, Column, State); if (datetostr(DM_Query_UP.Query1['DATUM']) = Arbeitsplan_Datum_Selektiert) then begin DBG1.Canvas.Brush.Color := clInfoBK; DBG1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end; Führe ich nach dem selektieren ein Refresh der Query1 durch klappt es. Wie kann ich nun meinen Code verbessern, das es klappt oder wo könnte ich den Refresh implementieren ? Gruss Holger |
Re: DBGrid -> Mehrere Zeilen farblich
Hallo Holger,
wenn ich Dich richtig verstehe, willst Du auf den aktuellen Datensatz abgleichen...? Ich habe mal einen alten Auszug von mir herausgekramt:
Delphi-Quellcode:
Ich bin nicht ganz sicher, aber vielleicht musst Du über Column.Field.DataSet.FieldByName(xxx) auf Deine Zellenwerte abgleichen.
procedure TFormAw.DBGridSchuldnerDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var FaelligFlag:Boolean; begin if (Sender is TDBGrid) then with (Sender as TDBGrid) do begin FaelligFlag:=False; if Assigned(Column.Field) then begin if (Column.Field.DataSet.FindField('Faellig')<>nil) then begin FaelligFlag:=(((Column.Field.DataSet.FieldByName('Faellig').AsDateTime<=Date) or (Column.Field.DataSet.FieldByName('Faellig').AsString='31.12.9999')) and (Column.Field.DataSet.FieldByName('Faellig').AsString<>'')); end; end; if (not FaelligFlag) then begin Canvas.Font.Color:=clSilver; if (Copy(Column.Title.Caption,1,3)='OFF') then begin if (Column.Title.Caption='OFFBETR') then Canvas.Font.Style:=[fsBold]; if (Column.Field.DataSet.FieldByName(Column.Title.Caption).AsFloat<0) then Canvas.Font.Color:=clGreen; end; if (Canvas.Brush.Color=clHighlight) then Canvas.Brush.Color:=$00FEF8F5; DefaultDrawColumnCell(Rect,DataCol,Column,State); end else begin Canvas.Font.Color:=clBlack; if (Column.Title.Caption='FAELLIG') then Canvas.Brush.Color:=$00B3B3FF; if (Copy(Column.Title.Caption,1,3)='OFF') then begin if (Column.Title.Caption='OFFBETR') then Canvas.Font.Style:=[fsBold]; if (Column.Field.DataSet.FieldByName(Column.Title.Caption).AsFloat<0) then Canvas.Font.Color:=clGreen else if (Column.Field.DataSet.FieldByName(Column.Title.Caption).AsFloat>0) then Canvas.Font.Color:=clRed; end; if (Canvas.Brush.Color=clHighlight) then Canvas.Brush.Color:=$00FEF8F5 DefaultDrawColumnCell(Rect,DataCol,Column,State); end; end; end; Stahli |
Re: DBGrid -> Mehrere Zeilen farblich
@HolgerCW
Im DS1DataChange das Grid informieren, daß die Darstellung nicht mehr aktuell ist.
Delphi-Quellcode:
FForm1.DBG1.Invalidate;
|
Re: DBGrid -> Mehrere Zeilen farblich
Das klappt super mit dem Invalidate
Danke Holger |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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