15

FillRect不会TStringGrid在 Delphi XE2 中绘制完整的单元格。默认颜色的左侧有 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

4 回答 4

18

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

一种解决方法是在调用之前检查这种情况并减少Rect.Left4 个像素FillRect

于 2012-01-10T16:45:25.840 回答
4

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

于 2012-01-11T13:21:48.720 回答
0

关闭前 4 个选项TStringGrid

  • goFixedVertLine
  • goFixedHorizLine
  • 去垂直线
  • 去水平线

然后它不会绘制网格线,并且您的网格单元将直接绘制到边缘。刚刚用XE试了一下。

于 2012-01-10T16:42:45.763 回答
0

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

于 2015-05-15T20:28:46.277 回答