【问题标题】:delphi gridpanel last row height issuedelphi gridpanel最后一行高度问题
【发布时间】:2019-06-04 08:38:49
【问题描述】:

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

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

【问题讨论】:

  • 这是否与滚动条在运行时可以使用的空间相关联?您是否尝试禁用滚动条/隐藏它们?
  • 使用Absolute 而不是Percent 作为Size Type。将TGridPanel 的外边界设计为行数乘以每行的高度。
  • @Ancaron TGridPanel 中没有这样的属性滚动条...
  • @Tom Brunberg 是在运行时...
  • 请看我的回答。

标签: delphi delphi-10.3-rio tgridpanel


【解决方案1】:

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

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

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

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


评论后编辑

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

【讨论】:

  • 感谢您的回答,我需要 TGridPanel 在我的真实项目中以百分比(灵活)为单位,除非我在朗姆酒时间重新计算它们,否则可以在运行时调整网格面板的大小绝对值无济于事
猜你喜欢
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多