怎样在DBGrid中改变单元格的颜色?

时间:2021-07-08 19:25:03
我用DBGrid显示一个学生成绩数据库时,希望在DBGrid中,学生不及格成绩所在单元格的颜色与及格成绩的颜色有所区别,该如何解决,请教各位。谢谢!

18 个解决方案

#1


这是我的一个关于stringgrid的例子,你看看dbgrid和它差不多
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
    if (acol=1) and (arow=2) then
    begin
        StringGrid1.Canvas.Font.Color:=clred;
        StringGrid1.Canvas.Brush.Color:=clyellow;
        StringGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,StringGrid1.Cells[Acol,arow]);
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    i,j : integer;
begin
    StringGrid1.RowCount:=5;
    StringGrid1.ColCount:=5;
    for i:=0 to 4 do
        for j:= 0 to 4 do
            StringGrid1.Cells[i,j]:=inttostr(i*j);
end;

end.

#2


用DBGrid比較麻煩,換個吧(StringGrid,AdvStringGrid)可能好多了

#3


dbgrid主要用ondrawdatacell事件
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
   
end;

#4


dbgridg一样可以控制,在DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);中写代码
自已画,利用column来写判别条件,用RECT填充颜色

#5


procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
   
end;
好像有一个什么default什么属性来着找找看:)
有点记不清了:)

#6


mengbo(心有独钟) :能不能具体点?

#7


dbgrid主要用ondrawdatacell事件
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  dbgrid1.Canvas.Brush.Color := clred;
  dbgrid1.DefaultDrawDataCell(rect,field,state);
   
end;

#8


dbgrid的ondrawdatacell事件
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
     if 分数<60 then 
        begin
          dbgrid1.Canvas.Brush.Color := clred;
          dbgrid1.DefaultDrawDataCell(rect,field,state);
        end;
   
end;

#9


procedure Tfrmlog.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  inherited;
  try
   if dm.quinformation.FieldByName('remark').asstring='异常' then
      DBGrid1.Canvas.Font.Color := clRed;
  finally
   DBGrid1.DefaultDrawcolumnCell(Rect, datacol,column, State);
  end;
  
end;

#10


试试哩个啦,经调试OK

procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumneh; State: TGridDrawState);
begin
   i:=1;
 h:=1;

  for i:=1 to adostoredproc1.RecordCount do
   begin
  if adostoredproc1.RecNo=h then

  begin


   dbgrideh1.Canvas.Brush .Color:=clyellow;
   dbgrideh1.DefaultDrawColumnCell(rect,datacol,column,state);
   dbgrideh1.Canvas.Font.Color:=clblue;
   dbgrideh1.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    h:=h+2;
    end;

end;

#11


DBGrid1.Canvas.Font.Color := clRed;//字为红色
dbgrid1.Canvas.Brush.Color := clred;//格子为红色

#12


DBGrid1.Canvas.Font.Color := clRed;//字为红色
DBGrid1.Canvas.Brush.Color := clred;//格子为红色

#13


procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
     if field.fieldname='条件' then 
        begin
          dbgrid1.Canvas.Brush.Color := clred;
          dbgrid1.DefaultDrawDataCell(rect,field,state);
        end;   
end;

#14


实战Delphi数据网格色彩特效
  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
  以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
  file://在DbGrid的DrawColumnCell事件中编写如下代码:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  DbGrid1.Canvas.Pen.Mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
  file://将上述代码修改为:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
      DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
  file://其它属性设置同3,将上述代码修改为:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   begin
    Case DataCol Mod 2 = 0 of
     True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
     False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end;
5.横向斑马线,同时以红色突显当前行效果:
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
  end;
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
   DbGrid1.Canvas.Brush.color:=clRed;
   DbGrid1.Canvas.pen.mode:=pmMask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
  end;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
  Case DataCol mod 2 = 0 of
   True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
   False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
  end;
DbGrid1.Canvas.pen.mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin 
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic]; 
//不仅可以改变颜色,还可以改变字体
end;
if  (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;

#15


实战Delphi数据网格色彩特效
  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
  以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
  file://在DbGrid的DrawColumnCell事件中编写如下代码:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  DbGrid1.Canvas.Pen.Mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
  file://将上述代码修改为:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
      DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
  file://其它属性设置同3,将上述代码修改为:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   begin
    Case DataCol Mod 2 = 0 of
     True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
     False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end;
5.横向斑马线,同时以红色突显当前行效果:
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
  end;
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
   DbGrid1.Canvas.Brush.color:=clRed;
   DbGrid1.Canvas.pen.mode:=pmMask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
  end;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
  Case DataCol mod 2 = 0 of
   True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
   False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
  end;
DbGrid1.Canvas.pen.mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin 
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic]; 
//不仅可以改变颜色,还可以改变字体
end;
if  (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;

#16


实战Delphi数据网格色彩特效
  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
  以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
  file://在DbGrid的DrawColumnCell事件中编写如下代码:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  DbGrid1.Canvas.Pen.Mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
  file://将上述代码修改为:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
      DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
  file://其它属性设置同3,将上述代码修改为:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   begin
    Case DataCol Mod 2 = 0 of
     True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
     False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end;
5.横向斑马线,同时以红色突显当前行效果:
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
  end;
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
   DbGrid1.Canvas.Brush.color:=clRed;
   DbGrid1.Canvas.pen.mode:=pmMask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
  end;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
  Case DataCol mod 2 = 0 of
   True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
   False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
  end;
DbGrid1.Canvas.pen.mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin 
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic]; 
//不仅可以改变颜色,还可以改变字体
end;
if  (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;

#17


surfguy(冲浪小子)及其相同方法经试验,只能将不及格所在行改变颜色,而不能达到只将不及格的单元格变色的目的。
gxchen() 的方法中涉及ADO,本人没有使用过,不知如何设置,无法试验。hnsyf()详细讲述了有关设置,但都是对固定行或列进行设置,而我的问题是“对各门课程的成绩进行判断后设置不同颜色”,即先取第一门课程的第1名学生成绩判断,再依次取第二门课程....,再取第2名学生的第一门课程、第二门课程....,至到最后一名学生的最后一门课程。

#18


经试验,并将lin513(东方求救)的方法略作修改,实现了我的目的。非常感谢各位!给分!

#1


这是我的一个关于stringgrid的例子,你看看dbgrid和它差不多
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
    if (acol=1) and (arow=2) then
    begin
        StringGrid1.Canvas.Font.Color:=clred;
        StringGrid1.Canvas.Brush.Color:=clyellow;
        StringGrid1.Canvas.TextRect(Rect,Rect.Left,Rect.Top,StringGrid1.Cells[Acol,arow]);
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    i,j : integer;
begin
    StringGrid1.RowCount:=5;
    StringGrid1.ColCount:=5;
    for i:=0 to 4 do
        for j:= 0 to 4 do
            StringGrid1.Cells[i,j]:=inttostr(i*j);
end;

end.

#2


用DBGrid比較麻煩,換個吧(StringGrid,AdvStringGrid)可能好多了

#3


dbgrid主要用ondrawdatacell事件
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
   
end;

#4


dbgridg一样可以控制,在DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);中写代码
自已画,利用column来写判别条件,用RECT填充颜色

#5


procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
   
end;
好像有一个什么default什么属性来着找找看:)
有点记不清了:)

#6


mengbo(心有独钟) :能不能具体点?

#7


dbgrid主要用ondrawdatacell事件
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  dbgrid1.Canvas.Brush.Color := clred;
  dbgrid1.DefaultDrawDataCell(rect,field,state);
   
end;

#8


dbgrid的ondrawdatacell事件
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
     if 分数<60 then 
        begin
          dbgrid1.Canvas.Brush.Color := clred;
          dbgrid1.DefaultDrawDataCell(rect,field,state);
        end;
   
end;

#9


procedure Tfrmlog.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  inherited;
  try
   if dm.quinformation.FieldByName('remark').asstring='异常' then
      DBGrid1.Canvas.Font.Color := clRed;
  finally
   DBGrid1.DefaultDrawcolumnCell(Rect, datacol,column, State);
  end;
  
end;

#10


试试哩个啦,经调试OK

procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumneh; State: TGridDrawState);
begin
   i:=1;
 h:=1;

  for i:=1 to adostoredproc1.RecordCount do
   begin
  if adostoredproc1.RecNo=h then

  begin


   dbgrideh1.Canvas.Brush .Color:=clyellow;
   dbgrideh1.DefaultDrawColumnCell(rect,datacol,column,state);
   dbgrideh1.Canvas.Font.Color:=clblue;
   dbgrideh1.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    h:=h+2;
    end;

end;

#11


DBGrid1.Canvas.Font.Color := clRed;//字为红色
dbgrid1.Canvas.Brush.Color := clred;//格子为红色

#12


DBGrid1.Canvas.Font.Color := clRed;//字为红色
DBGrid1.Canvas.Brush.Color := clred;//格子为红色

#13


procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
     if field.fieldname='条件' then 
        begin
          dbgrid1.Canvas.Brush.Color := clred;
          dbgrid1.DefaultDrawDataCell(rect,field,state);
        end;   
end;

#14


实战Delphi数据网格色彩特效
  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
  以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
  file://在DbGrid的DrawColumnCell事件中编写如下代码:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  DbGrid1.Canvas.Pen.Mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
  file://将上述代码修改为:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
      DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
  file://其它属性设置同3,将上述代码修改为:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   begin
    Case DataCol Mod 2 = 0 of
     True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
     False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end;
5.横向斑马线,同时以红色突显当前行效果:
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
  end;
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
   DbGrid1.Canvas.Brush.color:=clRed;
   DbGrid1.Canvas.pen.mode:=pmMask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
  end;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
  Case DataCol mod 2 = 0 of
   True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
   False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
  end;
DbGrid1.Canvas.pen.mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin 
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic]; 
//不仅可以改变颜色,还可以改变字体
end;
if  (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;

#15


实战Delphi数据网格色彩特效
  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
  以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
  file://在DbGrid的DrawColumnCell事件中编写如下代码:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  DbGrid1.Canvas.Pen.Mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
  file://将上述代码修改为:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
      DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
  file://其它属性设置同3,将上述代码修改为:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   begin
    Case DataCol Mod 2 = 0 of
     True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
     False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end;
5.横向斑马线,同时以红色突显当前行效果:
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
  end;
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
   DbGrid1.Canvas.Brush.color:=clRed;
   DbGrid1.Canvas.pen.mode:=pmMask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
  end;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
  Case DataCol mod 2 = 0 of
   True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
   False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
  end;
DbGrid1.Canvas.pen.mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin 
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic]; 
//不仅可以改变颜色,还可以改变字体
end;
if  (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;

#16


实战Delphi数据网格色彩特效
  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
  以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
  file://在DbGrid的DrawColumnCell事件中编写如下代码:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  DbGrid1.Canvas.Pen.Mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
  file://将上述代码修改为:
  Case DataCol Mod 2 = 0 of
   True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
   False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
  End;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
      DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
      DbGrid1.Canvas.Pen.Mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
  file://其它属性设置同3,将上述代码修改为:
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
   begin
    Case DataCol Mod 2 = 0 of
     True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
     False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
   DbGrid1.Canvas.pen.mode:=pmmask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
  end;
5.横向斑马线,同时以红色突显当前行效果:
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
  end;
  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
   DbGrid1.Canvas.Brush.color:=clRed;
   DbGrid1.Canvas.pen.mode:=pmMask;
   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
  file://其它属性设置同3,将上述代码修改为:
  Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
   True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
   False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
  end;
  If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
  Case DataCol mod 2 = 0 of
   True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
   False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
  end;
DbGrid1.Canvas.pen.mode:=pmMask;
  DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin 
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic]; 
//不仅可以改变颜色,还可以改变字体
end;
if  (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;

#17


surfguy(冲浪小子)及其相同方法经试验,只能将不及格所在行改变颜色,而不能达到只将不及格的单元格变色的目的。
gxchen() 的方法中涉及ADO,本人没有使用过,不知如何设置,无法试验。hnsyf()详细讲述了有关设置,但都是对固定行或列进行设置,而我的问题是“对各门课程的成绩进行判断后设置不同颜色”,即先取第一门课程的第1名学生成绩判断,再依次取第二门课程....,再取第2名学生的第一门课程、第二门课程....,至到最后一名学生的最后一门课程。

#18


经试验,并将lin513(东方求救)的方法略作修改,实现了我的目的。非常感谢各位!给分!