delphi gridpanel最后一行高度问题

时间:2019-06-04 08:38:49

标签: delphi delphi-10.3-rio tgridpanel

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

enter image description here

如果我将新行添加为0%,则前一行通常是最后一行,其高度正确,但是我不希望在底部出现新行borders

enter image description here

1 个答案:

答案 0 :(得分:2)

SizeStyle=ssPercent时,大小计算包括一个double值(百分比)。在VCL中,结果必须四舍五入为整数(=像素)。该代码使用Trunc(),以确保行数适合GridPanel。然后,多余的像素(如果有)被“赋予”到最后一行。

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

您可以通过在SizeStyle下的结构窗格中选择所有TRowItem来在IDE(对象检查器)中选择RowCollection

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


评论后编辑

如果使用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不能被整除时)变得不明显。