procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TCustomDBGridC(Sender) do
case DataLink.Fields[14].AsInteger of
1: Canvas.Brush.Color:=clGreen;
2: Canvas.Brush.Color:=clSkyBlue;
3: Canvas.Brush.Color:=clSilver;
4: Canvas.Brush.Color:=clAqua;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Обновление цветов в TDBGrid
Есть таблица с полем Status с возможными значениями 1, 2, 3, 4, есть DBGrid, с обработчиком OnDrawColumnCell, который в соответствии со значением присваивает цвет ячейке
Код:
А может весь код приведёте? А лучше бы весь проект выложить, дабы ускорить процесс и не морочить голову форумчан...
Цитата: SergPas
А может весь код приведёте? А лучше бы весь проект выложить, дабы ускорить процесс и не морочить голову форумчан...
Весь проект выкладывать не совсем легко, цвета были последними штрихами... пока набросок делал понял что я сам себя заморочил, всё работает без лишних вызовов функций. 7 часов просидел :(
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids, XPMan;
type
TCustomDBGridC = class(TCustomDBGrid);
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOQuery1id: TAutoIncField;
ADOQuery1Status: TIntegerField;
ADOQuery1SimpleText: TWideStringField;
Button1: TButton;
XPManifest1: TXPManifest;
procedure Button1Click(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
ADOQuery1.First;
for i := 0 to ADOQuery1.RecordCount - 1 do begin
ADOQuery1.Edit;
ADOQuery1Status.Value:=Random(4);
ADOQuery1.Next;
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TCustomDBGridC(Sender) do
case DataLink.Fields[1].AsInteger of
1: Canvas.Brush.Color:=clGreen;
2: Canvas.Brush.Color:=clSkyBlue;
3: Canvas.Brush.Color:=clSilver;
4: Canvas.Brush.Color:=clAqua;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids, XPMan;
type
TCustomDBGridC = class(TCustomDBGrid);
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOQuery1id: TAutoIncField;
ADOQuery1Status: TIntegerField;
ADOQuery1SimpleText: TWideStringField;
Button1: TButton;
XPManifest1: TXPManifest;
procedure Button1Click(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
ADOQuery1.First;
for i := 0 to ADOQuery1.RecordCount - 1 do begin
ADOQuery1.Edit;
ADOQuery1Status.Value:=Random(4);
ADOQuery1.Next;
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with TCustomDBGridC(Sender) do
case DataLink.Fields[1].AsInteger of
1: Canvas.Brush.Color:=clGreen;
2: Canvas.Brush.Color:=clSkyBlue;
3: Canvas.Brush.Color:=clSilver;
4: Canvas.Brush.Color:=clAqua;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end.
И еще.. не совсем в тему. Выкини нафиг с формы XP манифест. Пользы от него нет, только память занимает. Чтобы контролы отображались со стилями, достаточно просто подключить модуль XPMan в любом юните проекта. Собственно компонент TXPManufest и предназначен для этого - кинул его на форму - в uses добавилось XPMan :) В общем сделан он для ленивых компонентокидателей...