Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   DBGrid Farbe (https://www.delphipraxis.net/152510-dbgrid-farbe.html)

KalEl 25. Jun 2010 07:44

DBGrid Farbe
 
Hallo,

ich weiss, dass es hier schon eine Menge Threads zum Thema DBGrid Farben gibt - ich habe alle relevanten soweit es mir möglich war gelesen. Aber in keinem wird das Problem behandelt, vor dem ich stehe:

Die Farbe einer Cell zu ändern ist im Prinzip extrem einfach, lediglich Canvas.Brush auf die gewünschte Farbe setzen im OnDrawColumnCell und DefaultDrawDataCell(Rect, Column.Field, State) aufrufen.

Funktioniert wunderbar, mit der Methode kann man auch die selektierte Zeile entsprechend färben - vorausgesetzt RowSelect ist auf true gesetzt. Nun habe ich aber das Problem, dass es in meinem Grid möglich sein muss zu editieren, d.h. RowSelect ist false. Multiselect ist ebenfalls deaktiviert. Ich würde nun gerne die Zeile in der sich der Benutzer befindet (d.h. die gesamte Zeile in der sich die aktuell ausgewählte cell befindet) mit einer anderen Farbe darstellen. TGridDrawState kann man dafür offenbar nicht verwenden, weil nur die cell selbst (nicht aber die Zeile) gdSelect ist.

Hat hier jemand eine Idee dazu?

Bummi 25. Jun 2010 08:52

AW: DBGrid Farbe
 
Quick and Dirty, vielleicht kannst Du es fü Deine Zwecke anpassen
Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ADODB;

type
  THackGrid=Class( TCustomGrid)


  published
    property Row;
    property TopRow;
    property DefaultRowHeight;
    property Selection;
  End;
  TForm5 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    procedure ADODataSet1AfterScroll(DataSet: TDataSet);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.ADODataSet1AfterScroll(DataSet: TDataSet);
begin
  ADODataSet1.Tag := (THackGrid(DBGrid1).Row- THackGrid(DBGrid1).TopRow + 1) * (THackGrid(DBGrid1).DefaultRowHeight+1);
  DBGrid1.Invalidate;
end;

procedure TForm5.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
           if Rect.Top=ADODataSet1.Tag then

           begin
                 DBGrid1.Canvas.Brush.Color := clred;
                 DBGrid1.Canvas.Fillrect(rect);
           end;


end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz