procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  with (Sender as TDBGrid) do
  begin
    if ((State = [gdSelected]) or (State = [gdSelected, gdFocused])) then
    begin
      Canvas.Font.Color := clHighlightText;
      Canvas.Brush.Color := clHighlight;
    end;
    DefaultDrawColumnCell(Rect, DataCol, Column, State); //这行是关键
  end;
end;

解决方案 »

  1.   

    在ondrawcolumncell里写代码
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if Dbgrid1.DataSource.DataSet.RecNo = TStringGrid(DbGrid1).Row   then
      begin
        tag := TDBGrid(Sender).Canvas.brush.Color;
        TDBGrid(Sender).Canvas.brush.Color := clred;    //你也可以改一下font.color来达到你的目的    TDBGrid(Sender).DefaultDrawColumnCell(rect, datacol, column, state);
        TDBGrid(Sender).Canvas.brush.Color := tag;
      end;
    end;
      

  2.   

    Canvas.Font.Color是字体颜色
    Canvas.Brush.Color就是背景色,必成clRed就可以了
      

  3.   

    to qiubolecn(来自差生市):
    如果记录只有页就可以,可是如果记录多于两页,在拉下下一页时就不起作用了。to Snakeguo(枫):
    这样好象只能对选择的单元格变色,但不是整行都变色。
      

  4.   

    是不是还要将DefaultDrawing  设为 false
      

  5.   

    不是那个的问题,当然,我们在option里设置为行选可以用Snakeguo(枫):
    的办法,但
      

  6.   

    终于搞定:)
      if (Rect.Top = TStringGrid(DBGrid1).CellRect(TStringGrid(DBGrid1).Col,TStringGrid(DBGrid1).Row).Top) and (not (gdFocused in State) or not DBGrid1.Focused) then
        DBGrid1.Canvas.Brush.Color := clAqua;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);我擦擦汗先
      

  7.   

    哦,那个color忘了设成 clred
    :(