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
不可整除时)变得不明显。
如何避免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
不可整除时)变得不明显。