delphi 网格面板最后一行高度问题

delphi gridpanel last row height issue

如何避免gridpanel最后一行比别人高? 我有 10 行,价值为 10%

如果我附加一个 0% 的新行,前一行(往往是最后一行)采用正确的高度,但新行 borders 出现在底部,这是我不希望的

SizeStyle=ssPercent 时,尺寸计算包括 double 值(百分比)。在 VCL 中,结果必须四舍五入为整数(= 像素)。代码使用 Trunc(),大概是为了确保行数适合 GridPanel。然后,多余的像素(如果有的话)是"given"到最后一行。

您可以使用 SizeStyle=ssAbsolute 而不是 SizeStyle=ssPercent 并将行高定义为像素数。在这种情况下,计算不包括浮点值,也不需要四舍五入。在这种情况下,您可以声明每行的高度,例如28 如果 GridPanel1 的高度为 280,则所有行的高度都相等。

您可以在 IDE(对象检查器)中 select SizeStyle 通过 select 在 [=21= 下的结构面板中 TRowItem ].

您也可以在运行时定义这些设置。


评论后编辑

如果您使用 SizeStyle=ssPercent,您需要在问题中显示的两种情况之间做出选择。

如果您使用SizeStyle=ssAbsolute,您可以使用TGridPanel1.OnResize()事件重新计算项目高度:

procedure TForm7.GridPanel1Resize(Sender: TObject);
var
  i, toth, rowh: integer;
  gp: TGridPanel;
begin
  gp := Sender as TGridPanel;

  toth := gp.Height;
  rowh := toth div gp.RowCollection.Count;

  for i := 0 to gp.RowCollection.Count-1 do
    gp.RowCollection.Items[i].Value := rowh;
end;

此外,如果GridPanel1的颜色与表格的颜色相同,您可能需要设置GridPanel1.BevelOuter=bvNone隐藏GridPanel1的边框线并且出现在行下方的空 space(当 toth 不可整除时)变得不明显。