gpt4 book ai didi

delphi - 在最大化丢失分配值之前动态分配表单大小

转载 作者:行者123 更新时间:2023-12-03 23:34:22 24 4
gpt4 key购买 nike

我有一个应用程序,它总是在最初最大化的情况下启动。这包括将 Self.WindowState := wsMaximized; 放在主窗体的 OnCreate 中。

在此之前,如果用户要将窗口状态更改为 wsNormal,我将指定主窗体的默认尺寸。

因此,简而言之,主窗体的 OnCreate 处理程序类似于:

procedure TfrmMain.FormCreate(Sender: TObject);
begin
Width:= 1300;
Height:= 800;
WindowState:= wsMaximized;
end;

理论上,我可以在设计时分配这些维度,而这正是我所需要的。但是,由于我的屏幕大小以及 IDE 的原因,如果不滚动,整个表单一目了然。在设计中,我保持表单尺寸很小,所以我可以看到所有内容。但是在运行时,我需要分配这些默认尺寸,然后默认最大化。当用户将窗口状态更改为最大化时,我希望它转到我动态分配的那些尺寸。

问题是它似乎在最大化表单后失去了这些维度,并且它恢复到设计时的任何值。如果我注释掉 WindowState:= wsMaximized; 行,那么它将以所需的默认尺寸显示表单。但是,最大化它似乎会覆盖并忽略我刚刚分配的这些值。

如何创建并显示默认最大化的主窗体,同时动态分配默认大小,而不会丢失分配的值?

最佳答案

(与 10.3.3 确认。)这个问题的确切原因我无法确定,但一个合理的原因是在构造函数期间正在读取表单组件并且之前的大小似乎被明确备份:

procedure TControl.SetWidth(Value: Integer);
begin
SetBounds(FLeft, FTop, Value, FHeight);
Include(FScalingFlags, sfWidth);
if csReading in ComponentState then
FExplicitWidth := FWidth;
end;

一种可能的解决方案是在 OnCreate 中设置所需的大小。事件,就像你现在正在做的那样,但是推迟设置所需的 WindowsState 直到 OnShow事件。

procedure TForm1.FormCreate(Sender: TObject);
begin
Width := 1300;
Height := 800;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
WindowState := wsMaximized;
end;

当然,您可能应该使用 a one-off mechanism 来防止连续调用。 .请看wsMaximized forms do not appear maximized也是。

关于delphi - 在最大化丢失分配值之前动态分配表单大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62604026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com