使用某些行颜色扩展DBGrid

时间:2012-03-08 16:05:03

标签: 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;

我做错了什么?

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

你应该尝试免费的3D派对解决方案,并且已经扩展了很多DBGrid,就像Jedi project提供的那样

答案 2 :(得分:0)

Opc0de,您可能应该覆盖“DrawCell”方法而不是“DrawCellBackground”吗?

答案 3 :(得分:0)

在定义画笔颜色后,尝试绘制单元格:

Self.Canvas.FillRect(ARect);