procedure TForm1.DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  //DBGridEh1.Canvas.Font.Color := clgreen;
  if gdSelected in state then
    SetBkColor(DBGridEh1.canvas.handle, clred)
  else
    setbkcolor(DBGridEh1.canvas.handle, clwhite);
  DBGridEh1.Canvas.TextRect(rect, 0, 0, field.AsString);
  DBGridEh1.Canvas.Textout(rect.Left, rect.Top, field.AsString);
end;

解决方案 »

  1.   

    理解失误,不好意思
    procedure TForm1.DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    var
      OldColor: TColor;
    begin
      OldColor := DBGridEh1.Canvas.Font.Color;
      if gdSelected in state then
      begin
        DBGridEh1.Canvas.Font.Color := clRed;
        DBGridEh1.Canvas.Textout(rect.Left, rect.Top, field.AsString);
        DBGridEh1.Canvas.Font.Color := OldColor;
      end;
    end;
      

  2.   

    procedure TForm1.DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    var
      OldColor: TColor;
    begin
      OldColor := DBGridEh1.Canvas.Font.Color;
      if gdSelected in state then
      begin
        DBGridEh1.Canvas.Font.Color := clRed;
        DBGridEh1.Canvas.TextRect(rect, 0, 0, field.AsString);
        DBGridEh1.Canvas.Textout(rect.Left, rect.Top, field.AsString);
        DBGridEh1.Canvas.Font.Color := OldColor;
      end;
    end;
      

  3.   

    在dbgrid的drawcolumncell事件中加入
    if (rect.top=tstringgrid(dbgrid1).cellrect(tstringgrid(dbgrid1).col,
    tstringgrid(dbgrid1).row).top) and (not(gdfoused in state)) then
    dbgrid1.canvas.font.color:=clred;
    dbgrid1.defaultdrawdatacell(rect,column.field,state);
    前两行是一句话
      

  4.   

    procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    begin
    IF (gdSelected in state   )  THEN
    BEGIN
     AFONT.Color :=CLRED;
    END;
    end;
      

  5.   

    就是在dbgrid事件ondrawcolumncell事件处理,通过更改canvas将背景变色
      

  6.   

    uses Grids, DBGrids;
    procedure TForm1.DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    var
      OldColor: TColor;
    begin
      OldColor := DBGridEh1.Canvas.Font.Color;
      if gdSelected in state then
      begin
        DBGridEh1.Canvas.Font.Color := clRed;
        DBGridEh1.Canvas.TextRect(rect, 0, 0, field.AsString);
        DBGridEh1.Canvas.Textout(rect.Left, rect.Top, field.AsString);
        DBGridEh1.Canvas.Font.Color := OldColor;
      end;
    end;
      

  7.   

    把defaultDrawing属性设为false试试