如何避免gridpanel最后一行比其他行占用更高?我有 10 行 10% 的值
如果我追加一个 0% 的新行,前一行往往是最后一行,采用正确的高度,但borders
底部出现我不希望的新行
当SizeStyle=ssPercent
大小计算包含一个double
值(百分比)时。结果必须四舍五入为VCL
整数(=像素)。代码使用Trunc()
, 大概是为了确保行数适合GridPanel
. 然后,多余的像素(如果有的话)被“给定”到最后一行。
而不是SizeStyle=ssPercent
您可以使用SizeStyle=ssAbsolute
并将行高定义为像素数。在这种情况下,计算不包括浮点值,也不需要四舍五入。在这种情况下,您可以声明每行的高度,例如 28,如果高度GridPanel1
为 280,则所有行的高度相同。
您可以SizeStyle
通过TRowItem
在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
不可整除时)变得不明显。