Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism dbgrid aktuelle Zeile im dbGrind färben (https://www.delphipraxis.net/131762-dbgrid-aktuelle-zeile-im-dbgrind-faerben.html)

Andreas Nord 30. Mär 2009 18:49

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:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
 current_row:= Table1.RecNo;
 DBGrid1.Repaint;            // wird benötigt wenn das Mausrad benutzt wird
end;
3. Und zur vollständigkeit noch meine DBGrid1DrawColumnCell-Funktion:
Delphi-Quellcode:

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;
So, tolles Ergebnis für einen Nachmitag Arbeit :glaskugel:

Ü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!

alex517 30. Mär 2009 18:50

Re: dbgrid aktuelle Zeile im dbGrind färben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

Delphi-Quellcode:
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;
sieht dann so aus wie im Anhang.

alex

alex517 30. Mär 2009 19:32

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

Andreas Nord 31. Mär 2009 09:43

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 05:18 Uhr.
Seite 2 von 2     12   

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