在StringGrid的DrawCell事件中写先设DefaultDraw属性为falseprocedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
根据ACol和ARow来判断当前的单元格,
  if ACol=0 then begin
     StringGrid1.Canvas.Brush.Color := clRed; //重画背景色
     StringGrid1.Canvas.FillRect(Rect);
  end;
end;

解决方案 »

  1.   

    改进一下procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var tmp: string;
        r_left : integer;
    begin
      tmp := sgridService.Cells[ACol,ARow];
      if ACol=0 then begin
         StringGrid1.Canvas.Brush.Color := clRed;
         StringGrid1.Canvas.FillRect(Rect);
         StringGrid1.Canvas.Font.Color := clBlack; //字体颜色
         //居中显示文字
         r_left := Rect.Left + (Rect.Right-Rect.Left-sgridService.Canvas.TextWidth(tmp)) div 2; 
         StringGrid1.Canvas.TextRect(Rect, r_left, Rect.Top + 6, tmp); //重画文字    
      end;
    end;
      

  2.   

    转载在Delphi中随意控制DBGrid 每一行的颜色---- Delphi中使用DBGrid控件时,每一列都能按需要随意地改变颜色,但要改变每一行的颜色却很难,那么在不重新制作新控制件的情况下,有没有好的办法让DBGrid按照用户自己要求随意改变每一行颜色的?答案是有,下面介绍一种简单的方法。
    ---- 要改变DBGrid每一行的颜色,只要在ONDrawColumnCell事件中设定要改变颜色的行的条件,并指定DBGrid的Canvas.Brush.color属性并且把Canvas.pen.mode属性设成pmmask,再调用DBGrid的DefaultDrawColumnCell方法即可。注意在改变这两个属性前要先保护好原来的Canvas.Brush.color属性的值,调节器用完成 DefaultDrawColumnCell方法后要把原属性值改回,现以Delphi\demos\db\clientmd 目录下的演示程序clintproj.dpr 为例子做简单说明,下面是对程序中的栅格MemberGrid的合条件的整行进行变色,变成黑体背景黄色的,其它不合条件的行的颜色为正常字体,白色背景,只在DrawColumnCelL 事件中设条件其它的不变,如下:
    procedure TClientForm.MemberGridDrawColumnCell(
    Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn;
    State: TGridDrawState);
    var
    oldcolor:tcolor;
    oldpm:tpenmode;
    begin
    if DM.ProjectTEAM_LEADER.Value =
    DM.Emp_ProjEMP_NO.Value then {设定变色的行的条件}
    MemberGrid.Canvas.Font.Style := [fsBold];
    MemberGrid.DefaultDrawColumnCell
    (RectDataColColumnState);
    {上面是演示程序的原内容,以下是增加部分}
    if DM.ProjectTEAM_LEADER.Value =
    DM.Emp_ProjEMP_NO.Value then {设定变色的行的条件}
    begin
    oldpm:= MemberGrid.Canvas.pen.mode;
    oldcolor:= MemberGrid.Canvas.Brush.color;
    MemberGrid.Canvas.Brush.color:=clyellow;
    MemberGrid.Canvas.pen.mode:=pmmask;
    MemberGrid.DefaultDrawColumnCell
    (RectDataColColumnState);
    MemberGrid.Canvas.Brush.color:=oldcolor;
    MemberGrid.Canvas.pen.mode:=oldpm;
    end;
    end;