我想扩展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;
我做错了什么?
答案 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);