![]() |
Datenbank: bde • Zugriff über: keine ahnung
dbgrid aktuelle Zeile im dbGrind färben
Hallo, würde zu gerne die gesamte ausgewählte Zeile in einen DbGrind einfärben.
Bekomme leider nur die aktuelle Zelle gefärbt:
Delphi-Quellcode:
Hab schon mindestens 3 Stunden gesucht. Wäre sehr dankbar!
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (State=[gdSelected,gdFocused]) then DBGrid1.Canvas.Brush.Color := clred else DBGrid1.Canvas.Brush.Color := clWhite; end; |
Re: dbgrid aktuelle Zeile im dbGrind färben
Und wenn Du unter "Options" RowSelect auf true stellst?
[edit] BDE unter Delphi.NET? Bist Du da sicher? [/edit] |
Re: dbgrid aktuelle Zeile im dbGrind färben
Klappt leider auch nicht. Möchte auch gerne jede Celle zur laufzeit editieren können. Aber trotzdem Danke.
Ist eine Paradox 7 Tabelle. |
Re: dbgrid aktuelle Zeile im dbGrind färben
Dann such doch mal nach
![]() |
Re: dbgrid aktuelle Zeile im dbGrind färben
Das Problem ist, dass du hier zwei Mengen auf Gleichheit überprüfst.
Nur Zellen, die Selected und Fokusiert werden eingefärbt (nur eine Zelle hat den Fokus)
Delphi-Quellcode:
begin
if gdSelected in State then // *** DBGrid1.Canvas.Brush.Color := clred else DBGrid1.Canvas.Brush.Color := clWhite; end; |
Re: dbgrid aktuelle Zeile im dbGrind färben
:wall: das hab ich natürlich geflissentlich übersehen. Vielleicht sollte ich mich mal sinnvollen Dingen wie Fliegenfischen in der Badewanne widmen, so wird das hier eh nichts mehr.
|
Re: dbgrid aktuelle Zeile im dbGrind färben
Sorry, laut Delphi-Hilfe:
gdSelected - Die Zelle ist aktuell ausgewählt Ich möchte wissen, ob die Zeile und nicht die Zelle ausgewählt ist! Danke für die Bemühungen. |
Re: dbgrid aktuelle Zeile im dbGrind färben
Nochmal: RowSelect auf true stellen und die Abfrage ändern.
Zitat:
Delphi-Quellcode:
if (gdSelected in State) or (gdFocused in State)
|
Re: dbgrid aktuelle Zeile im dbGrind färben
Also mit:
Delphi-Quellcode:
und der Option "RowSelect" erhalte ich genau mein erwünschtes ergebnis.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then DBGrid1.Canvas.Brush.Color := clred else DBGrid1.Canvas.Brush.Color := clWhite; end; Nun kann ich aber nicht mehr die einzelnen Zellen editieren :wall: |
Re: dbgrid aktuelle Zeile im dbGrind färben
Es muss doch irgendwie möglichsein, innerhalb der Funktion "DBGrid1DrawColumnCell" festzustellen welche Zeile bei einer Tabelle ausgewählt ist!?
Mit RecNo geht das leider nicht, da inerhalb von DBGrid1DrawColumnCell dieser von 0 bis an das Tabellenende Hochgezählt wird. |
Re: dbgrid aktuelle Zeile im dbGrind färben
So, hab eine Lösung gefunden. Wenn auch nicht ganz sauber:
1. hab mir ne globale Variable erstellet: current_row: integer; 2. Diese setze ich beim "DataSource1DataChange" auf die ausgewählte Zeile:
Delphi-Quellcode:
3. Und zur vollständigkeit noch meine DBGrid1DrawColumnCell-Funktion:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin current_row:= Table1.RecNo; DBGrid1.Repaint; // wird benötigt wenn das Mausrad benutzt wird end;
Delphi-Quellcode:
So, tolles Ergebnis für einen Nachmitag Arbeit :glaskugel: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1.RecNo=current_row then DBGrid1.Canvas.Brush.Color := clred else DBGrid1.Canvas.Brush.Color := clWhite; DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state); end; Über eine Sauber kurze Lösung wäre ich echt noch dankbar, oder teilt mal mit, wenn ihr das selbe problem habt. Und danke an alle! |
Re: dbgrid aktuelle Zeile im dbGrind färben
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Delphi-Quellcode:
sieht dann so aus wie im Anhang.
type
// kleiner Trick um an die aktuelle Row heranzukommen. TDBGrid = class(DBGrids.TDBGrid) public property Row; end; TForm1 = class(TForm) MyDBGrid: TDBGrid; ..... procedure MyDBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyDBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (State * [gdFocused, gdSelected] = []) then begin if MyDBGrid.Row = MyDBGrid.MouseCoord(Rect.Left, Rect.Top).Y then begin // aktuelle Zeile MyDBGrid.Canvas.Brush.Color := clAqua; MyDBGrid.Canvas.Font.Color := clWindowText; end else if MyDBGrid.SelectedRows.IndexOf(MyDBGrid.DataSource.DataSet.Bookmark) >= 0 then begin // alle selektierten Zeilen MyDBGrid.Canvas.Brush.Color := clHighlight; MyDBGrid.Canvas.Font.Color := clWindowText; end else begin // alle anderen Zeilen if (MyDBGrid.DataSource.DataSet.RecNo mod 2) = 0 then MyDBGrid.Canvas.Brush.Color := clInfoBk else MyDBGrid.Canvas.Brush.Color := clWindow; MyDBGrid.Canvas.Font.Color := clWindowText; end; end; MyDBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; alex |
Re: dbgrid aktuelle Zeile im dbGrind färben
Liste der Anhänge anzeigen (Anzahl: 1)
Hier nochmal das ganze Project (für D7) mit Scrollrad.
alex |
Re: dbgrid aktuelle Zeile im dbGrind färben
Vielen Dank, bin mit meiner Lösung doch zu frieden. Musste halt ne Nacht drüber schlafen.
Find es halt schade, das beim dbgrid so ohnen weiteres nicht möglich die aktuelle Zeile hervorzuheben und ich denke, dass ich nicht der einzige mit diesem wunsch bin! Dank noch mal an alle. :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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