FillRect不会在Delphi XE2中绘制完整的TStringGrid单元格

时间:2012-01-10 15:54:59

标签: delphi delphi-xe2 delphi-xe tstringgrid

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)和不同的画笔样式,绘制的矩形不会填充整个单元格。

4 个答案:

答案 0 :(得分:18)

DefaultDrawing = true和主题被启用时,这是XE2中的预期行为(我不会在这里争论好坏 - 正如您可能已经注意到的,RigthToLeft模式的行为是不同的。 .. 的)。

解决方法是检查此情况并在调用Rect.Left之前将FillRect减少4个像素。

答案 1 :(得分:3)

您可以使用返回单元格实际TRect的StringGrid1.CellRect(ACol, ARow),而不是使用参数Rect

答案 2 :(得分:0)

关闭TStringGrid中的前4个选项:

  • goFixedVertLine
  • goFixedHorizLine
  • goVertLine
  • goHorizLine

然后它不会绘制网格线,并且网格单元格将绘制到边缘。刚试过XE。

答案 3 :(得分:0)

由于您自己绘制网格单元格,因此只需关闭网格属性DefaultDrawing,将其设置为false。