1

如何避免gridpanel最后一行比其他行占用更高?我有 10 行 10% 的值

在此处输入图像描述

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

在此处输入图像描述

4

1 回答 1

2

SizeStyle=ssPercent大小计算包含一个double值(百分比)时。结果必须四舍五入为VCL整数(=像素)。代码使用Trunc(), 大概是为了确保行数适合GridPanel. 然后,多余的像素(如果有的话)被“给定”到最后一行。

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

您可以SizeStyle通过TRowItemRowCollection.

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


评论后编辑

如果您使用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并且行下方出现的空白区域(当toth不可整除时)变得不明显。

于 2019-06-04T11:22:49.430 回答