![]() |
DBGrid - Option dgRowSelect vs dgEditing
Beim DBGrid kann die selektierte Zeile mit der Option dgRowSelect optisch markiert werden.
Dies hat allerdings den Nachteil, dass die Option dgEditing nicht mehr zur Verfügung steht. Diese brauche ich aber um eine einzelne Zelle zu markieren (Doppelklick) und deren Inhalt in die Zwischenablage zu kopieren und z.B. in einem Dokument einzufügen (copy/paste) Daher zeichne ich im DrawColumnCell selber, der Ansatz sieht sieht so aus:
Delphi-Quellcode:
Die FAuftrag_ID wird im Datachange vom Dataset zwischengespeichert.
if dgAuftraege.DataSource.DataSet.RecNo = FAuftrag_ID
then begin dgAuftraege.Canvas.Brush.Color := clHighlight; dgAuftraege.Canvas.Font.Color := clwhite; end; Dieser Ansatz funktioniert soweit, allerdings nur wenn ich auf eine Zelle klicke. Wenn ich mittels dem Mausrad durchscrolle, ist es nur eine Frage der Zeit, bis sämtliche Einträge eingefärbt sind. Wie würdet Ihr dies lösen oder was mache ich falsch? |
AW: DBGrid - Option dgRowSelect vs dgEditing
Hallo Roland,
Du kannst die Zeilen im DbGrid mit OnDrawDataCell beeinflussen - auch nach dem Inhalt eines Feldes - und das funktioniert auch beim Bewegen des Mauszeiges:
Delphi-Quellcode:
procedure TfrmMain.dbgKSuchDrawDataCell(Sender: TObject; const [Ref] Rect: TRect; Field: TField; State: TGridDrawState);
{------------------------------------------------------------------------------- bei einem Grid die Zeilen in Abhängigkeit eines Feldwertes farbig machen -------------------------------------------------------------------------------} var clNew : TColor; clOld : TColor; begin // alte Farbe merken clOld := TDBGrid(Sender).Canvas.Brush.Color; // neue Farbe in Abhängikeit des Wertes einstellen if qryKSuch.FieldByName('BEZ').AsString = '*** fehlt in Parametertabelle ***' then begin clNew := clRed; end else begin if qryKSuch.FieldByName('ART').AsString = 'Parameter 1' then begin clNew := clGreen; end else begin if qryKSuch.FieldByName('ART').AsString = 'Parameter 2' then begin clNew := clBlue; end else begin clNew := clOld; end; end; end; // aktive Zeile anders zeichen with (Sender as TDBGrid) do begin if (gdSelected in State) then begin Canvas.Brush.Color :=clSkyBlue; // Cursor-Farbe Canvas.Brush.Style :=bsSolid; Canvas.Pen.Style :=psclear; Canvas.FillRect(Rect); end else begin Canvas.Brush.Color :=clNew; Canvas.Brush.Style :=bsSolid; Canvas.Pen.Style :=psclear; Canvas.FillRect(Rect); end; end; //Text (muss separat gezeichnet werden) TDBGrid(Sender).Canvas.Pen.Style :=psSolid; TDBGrid(Sender).Canvas.Pen.Color :=clBlack; TDBGrid(Sender).Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,Field.AsString); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 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