Delphi 使用某些行颜色扩展DBGrid

Delphi 使用某些行颜色扩展DBGrid,delphi,components,delphi-7,Delphi,Components,Delphi 7,我想扩展DbGrid功能,在奇数行和偶数行上添加颜色。所以我写了这个 procedure TGridx.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); var row : Integer; begin inherited; row := Self.DataSource.DataSet.RecNo; if (row mod 2 = 0) then Self.Canvas.Brush.

我想扩展DbGrid功能,在奇数行和偶数行上添加颜色。所以我写了这个

procedure TGridx.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var
  row : Integer;
begin
   inherited;
  row := Self.DataSource.DataSet.RecNo;
  if (row mod 2 = 0) then
    Self.Canvas.Brush.Color := FColor1  //some color
  else
    Self.Canvas.Brush.Color := FColor2; //some color

end;

我做错了什么?

Opc0de,可能是您不应该重写“DrawCell”方法,而应该重写“DrawCellBackground”

您想要的事件被称为
DBGridDrawColumnCell
,您需要决定是打开还是关闭DefaultDrawing属性,处理DBGridDrawColumnCell的方式也会相应地改变。对于您的情况,您只需设置颜色,但保留DefaultDrawing为true,并且不执行任何其他canvas.Text或GDI绘图


我最近提出的一个问题表明,在更高的Delphi版本(2010,Xe,Xe2)中,有时还需要调用
画布。在ownerdraw事件中更改画布属性时,刷新TDBGRID和TListView的
,但这不适用于Delphi 7。定义笔刷颜色后,尝试绘制单元格:

Self.Canvas.FillRect(ARect);

您还应该尝试3d party解决方案,该解决方案是免费的,并且已经扩展了很多DBGrid,例如在基类中找不到的

DrawCellBackground提供的解决方案。您使用的是哪个Delphi版本?很抱歉,我帮不上忙。我没有德尔福7。显然,7和XE之间存在差异:)试试看。您可能希望在事件退出之前使用
继承的
,或者尝试调用
DefaultDrawColumnCell
。我尝试了这两种方法。我无法调用DefaultDrawColumnCell,因为我正在重写一个没有该函数参数的方法。它是否也有行内搜索?我的意思是如果你按一个键,它会到达那个字母吗?