答案 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
不能被整除时)变得不明显。