Delphi窗体恢复状态的位置和大小

4
在最大化的 Delphi 窗体中,如何获取窗体还原时的位置和大小?我知道在 .NET 中,我们使用 RestoreBoundsDesktopBound

1
您可以使用JediVCL库,其中包含TJvFormPlacementTJvFormStorage组件,可自动将窗体的边界保存/恢复到注册表、ini或DB中。 - Arioch 'The
1个回答

7

这个功能不是由VCL框架暴露的,相反你需要深入Win32 API。你需要的函数是GetWindowPlacement

var
  WindowPlacement: TWindowPlacement;
....
WindowPlacement.length := SizeOf(WindowPlacement);
Win32Check(GetWindowPlacement(Form.Handle, WindowPlacement));

您需要的信息可以在WindowPlacement结构中找到。请注意,坐标是相对于工作区而不是屏幕报告的。
通常您希望获取这些信息以便稍后恢复它们。使用SetWindowPlacement来实现。

如果您始终拥有相同数量的监视器,则简单的“获取”和“设置”工作。 如果您在稍后拔出的监视器上进行“获取”,然后将其设置回保存的值,则您的应用程序将显示在屏幕外。 JVCL测试以确保“WindowPlacement.rcNormalPosition”在屏幕上,然后执行“SetWindowPlacement”(请参见JvJVCLUtils.pas“InternalRestoreFormPlacement”)。 - James L.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接