在Delphi中按比例调整面板组件的大小

在Delphi中按比例调整面板组件的大小,delphi,delphi-10.3-rio,Delphi,Delphi 10.3 Rio,所以我使用的是DelphiRadStudio版本10.3 我必须为学校(11年级)的PAT创建一个统计表 我正在尝试创建一个包含两个面板的窗体。一个用于显示统计信息并与之交互的按钮,另一个用于实际统计信息 问题是: 我希望能够调整窗体的大小,两个面板应该按比例调整大小。我的代码中的错误,我似乎无法修复,是当表单变小时,面板的宽度并没有减少,而是增加了。我使用第三个面板来确定更改的原因是表单的大小调整,因为我发现表单的Witdh!=可放置组件的宽度 以下是我创建的函数的代码,用于对2个数字进行舍入

所以我使用的是DelphiRadStudio版本10.3

我必须为学校(11年级)的PAT创建一个统计表

我正在尝试创建一个包含两个面板的窗体。一个用于显示统计信息并与之交互的按钮,另一个用于实际统计信息

问题是: 我希望能够调整窗体的大小,两个面板应该按比例调整大小。我的代码中的错误,我似乎无法修复,是当表单变小时,面板的宽度并没有减少,而是增加了。我使用第三个面板来确定更改的原因是表单的大小调整,因为我发现表单的Witdh!=可放置组件的宽度

以下是我创建的函数的代码,用于对2个数字进行舍入(frmHelp_Dialog.my_round): 这是我的密码:

问候,,
Romans

首先,您应该注意控件的客户端区域的宽度是
ClientWidth
。使用该选项,不要使用宽度,宽度也包括任何边框。这也适用于表单

现在,创建一个新的VCL应用程序,并在其上放置两个
TPanel
控件

在第一个上设置
Align=alLeft
,在第二个上设置
Align=alClient

最后,为表单添加一个
OnResize
处理程序:

procedure TForm1.FormResize(Sender: TObject);
const
  Factor = 0.5;
begin
  Panel1.Width := Round(Factor * ClientWidth);
end;
这里,
因子是
Panel1
应该使用的表单宽度的分数。它是一个介于0和1之间的实数。
Panel2
将使用的表单宽度部分是
1-因子


例如,如果
Factor=0.5
,表单将被分成两个大小相同的部分。

首先,您应该注意控件的客户端区域的宽度是
ClientWidth
。使用该选项,不要使用宽度,宽度也包括任何边框。这也适用于表单

现在,创建一个新的VCL应用程序,并在其上放置两个
TPanel
控件

在第一个上设置
Align=alLeft
,在第二个上设置
Align=alClient

最后,为表单添加一个
OnResize
处理程序:

procedure TForm1.FormResize(Sender: TObject);
const
  Factor = 0.5;
begin
  Panel1.Width := Round(Factor * ClientWidth);
end;
这里,
因子是
Panel1
应该使用的表单宽度的分数。它是一个介于0和1之间的实数。
Panel2
将使用的表单宽度部分是
1-因子


例如,如果
Factor=0.5
,表单将被分成两个大小相同的部分。

Hello。好的,谢谢!你的答案正是我想要的。我可以再问一个问题吗?Persay我想要面板1中的4个按钮,也要随着面板调整大小,我该怎么做?我假设你有一列垂直的按钮,并且希望按钮的宽度随着面板的增加而增加。如果是这样,只需将每个按钮的
锚定设置为
[akLeft,akTop,akRight]
(即添加
akRight
)。在设计时对它们进行精确定位,它们将在运行时自动调整大小。实际上,这些按钮在两列中彼此相邻,如图所示,但不用担心。我知道了!又是Thx!@Andreas Rejbrand介意帮我提另一个问题吗?你好好的,谢谢!你的答案正是我想要的。我可以再问一个问题吗?Persay我想要面板1中的4个按钮,也要随着面板调整大小,我该怎么做?我假设你有一列垂直的按钮,并且希望按钮的宽度随着面板的增加而增加。如果是这样,只需将每个按钮的
锚定设置为
[akLeft,akTop,akRight]
(即添加
akRight
)。在设计时对它们进行精确定位,它们将在运行时自动调整大小。实际上,这些按钮在两列中彼此相邻,如图所示,但不用担心。我知道了!又是Thx!@Andreas Rejbrand介意帮我提另一个问题吗?
procedure TForm1.FormResize(Sender: TObject);
const
  Factor = 0.5;
begin
  Panel1.Width := Round(Factor * ClientWidth);
end;