.
       .
       .
    DBGrid.DefaultDrawing := false;
       .
       .
       .procedure TFormMain.DBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin    if (iRowID = 奇数) then//iRowID为全局整型变量,此处
                            //判据你应该会写
    begin
      DBGridTask.Canvas.Font.Color := clRed;
    end
    else begin
      DBGridTask.Canvas.Font.Color := clBlue;
    end;    DBGridTask.DefaultDrawDataCell(Rect, Column.Field, State);    Inc(iRowID);
  
end;

解决方案 »

  1.   

    .
           .
           .
        DBGrid.DefaultDrawing := false;
           .
           .
           .procedure TFormMain.DBGridDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin    if (iRowID = 奇数) then//iRowID为全局整型变量,此处
                                //判据你应该会写
        begin
          DBGrid.Canvas.Font.Color := clRed;
        end
        else begin
          DBGrid.Canvas.Font.Color := clBlue;
        end;    DBGrid.DefaultDrawDataCell(Rect, Column.Field, State);    Inc(iRowID);
      
    end;
      

  2.   

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

  3.   

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

  4.   

    我以前做的一个简单控件,好象还有些问题,不过应该可以用。如果你改好了可要告诉我啊。[email protected]
    unit DBGridPro;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Grids, DBGrids, stdctrls, extctrls, db ;type
      TEnumPro = (poShowPic,poShowMem,poPicInCell);
      TProOption = set of TEnumPro;
      TDBGridPro = class(TDBGrid)
      private
        { Private declarations }
        image:timage;
        scrollbox:tscrollbox;
        memo:tmemo;
        form:tform;
        FColumn:TColumn;
        FSetPro:Tprooption;
        FColor1,FColor2:tcolor;
      protected
        { Protected declarations }
      public
        { Public declarations }
        procedure cellclick(column:tcolumn);override;
        procedure DrawdataCell(const Rect:TRect;Field:TField;
                  State: TGridDrawState); override;    constructor Create(AOwner: TComponent); override;
        procedure formexit(sender: tobject);
        //procedure memoexit(sender: tobject);
      published
        { Published declarations }
        property Color1  : tcolor read FColor1 write FColor1;
        property Color2  : tcolor read fcolor2 write Fcolor2;
        property ProOption:tprooption read fsetpro write fsetpro;
      end;procedure Register;implementationconstructor tdbgridpro.create(aowner: tcomponent);
    begin
      inherited;
      fcolor1:=$00f7af9b;
      fcolor2:=$00ff9d9d;
    end;procedure tdbgridpro.memoexit;
    begin
      if memo<>nil then
      with self.DataSource.DataSet do
      begin
        if canmodify then
        begin
          edit;
          Fcolumn.field.assign(memo.lines);
        end;
      end;
    end;procedure tdbgridpro.formexit;
    begin
      form.release;
    end;procedure Tdbgridpro.DrawdataCell(const Rect:TRect;Field:TField;
                  State: TGridDrawState);
    var
      bmp:tbitmap;
      textwidth:word;
    begin
      textwidth:=field.displaywidth*5;
      if odd(rect.top div 18) then canvas.Brush.Color:=Fcolor1
      else canvas.brush.Color:=Fcolor2;
      Canvas.fillrect(rect);
      if (Field is tfloatfield) or (Field is tfloatfield)
        or (Field is tsmallintfield) or (Field is tintegerfield)
        or (Field is twordfield)
      then
        Canvas.Textout(rect.right-textwidth-2,rect.top+2,field.displaytext)
      else
        Canvas.TextOut(rect.left+2,rect.top+2,field.displaytext);  if Field.datatype in [fttypedbinary,ftgraphic,ftblob] then
      if popicincell in fsetpro then
      begin
        bmp:=tbitmap.Create;
        bmp.assign(field);
        self.canvas.stretchdraw(rect,bmp);
        bmp.free;
      end;  inherited;
    end;
      

  5.   

    其实不需要全局变量iRecNo,可以通过判断DataSource.DataSet.RecNo如:
     if (Table1.RecNo mod 2 ) = 0 then begin