FillRect
不会在Delphi XE2中绘制完整的TStringGrid
单元格。默认颜色左侧有3个像素的间隙(BiDiMode
设置为bdLeftToRight
)。在我之前使用过的Delphi 6中不存在这个问题。
procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
Stringgrid1.Canvas.Brush.Color:=$00FF80FF;
StringGrid1.Canvas.FillRect(Rect);
end;
我尝试更改所有属性(包括DrawingStyle
)和不同的画笔样式,绘制的矩形不会填充整个单元格。
答案 0 :(得分:18)
当DefaultDrawing = true
和主题被启用时,这是XE2中的预期行为(我不会在这里争论好坏 - 正如您可能已经注意到的,RigthToLeft模式的行为是不同的。 .. 的)。
解决方法是检查此情况并在调用Rect.Left
之前将FillRect
减少4个像素。
答案 1 :(得分:3)
您可以使用返回单元格实际TRect的StringGrid1.CellRect(ACol, ARow)
,而不是使用参数Rect
。
答案 2 :(得分:0)
关闭TStringGrid
中的前4个选项:
然后它不会绘制网格线,并且网格单元格将绘制到边缘。刚试过XE。
答案 3 :(得分:0)
由于您自己绘制网格单元格,因此只需关闭网格属性DefaultDrawing,将其设置为false。