使用某些行颜色扩展DBGrid

opc*_*0de 3 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.Color := FColor1  //some color
  else
    Self.Canvas.Brush.Color := FColor2; //some color

end;
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

War*_* P 5

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

在这里到的一个最近的问题表明,在后来的Delphi版本(2010,Xe,Xe2)中Canvas.Refresh,当在ownerdraw事件中更改canvas属性时,有时需要同时调用TDBGRID和TListView,但这不适用于delphi 7.