这是我的一个关于stringgrid的例子,你看看dbgrid和它差不多
unit Unit1;interfaceuses
  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.

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

    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;
      

  7.   

    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;
      

  8.   

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

  9.   

    试试哩个啦,经调试OKprocedure 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;
      

  10.   

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

  11.   

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

  12.   

    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;
      

  13.   

    实战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;
      

  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.   

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

  17.   

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