Delphi7 如何让多个窗体保持在主窗体之上,而不是在其他应用程序之上
How to make multiple forms stay on top of main form, but not on top of other applications, in Delphi 7
这是我在主窗体中使用的代码:
if not Assigned(FPerHist) then
begin
Application.CreateForm(TFPerHist,FPerHist);
end;
FPerHist.Show;
我将 FPerHist 的 FormStyle 设置为 StayOnTop。
这适用于允许打开多个表单,同时将所有子表单保持在主表单之上。但是,当表单正在加载某些内容或在调试时到达检查点时,表单会停留在其他应用程序之上。
用户觉得这很烦人,因为在加载此表单时他们无法处理其他事情,并且在调试时我无法切换到 Delphi 7 window 直到我将此应用程序移至另一个桌面(我正在使用 Windows 10)。
还有其他方法可以在 Delphi 7 上运行吗?
后来的 Delphi 版本通过引入 TForm.PopupParent
属性 解决了这个问题。您只需删除 fsStayOnTop
样式,并将 MainForm 设置为您的辅助表单的 PopupParent
。
但是,PopupParent
在 Delphi 7 中不存在,因此您必须手动模拟它,方法是覆盖辅助表单的虚拟 CreateParams()
方法以分配 MainForm.Handle
作为 TCreateParams.WndParent
。
这是我在主窗体中使用的代码:
if not Assigned(FPerHist) then
begin
Application.CreateForm(TFPerHist,FPerHist);
end;
FPerHist.Show;
我将 FPerHist 的 FormStyle 设置为 StayOnTop。
这适用于允许打开多个表单,同时将所有子表单保持在主表单之上。但是,当表单正在加载某些内容或在调试时到达检查点时,表单会停留在其他应用程序之上。
用户觉得这很烦人,因为在加载此表单时他们无法处理其他事情,并且在调试时我无法切换到 Delphi 7 window 直到我将此应用程序移至另一个桌面(我正在使用 Windows 10)。
还有其他方法可以在 Delphi 7 上运行吗?
后来的 Delphi 版本通过引入 TForm.PopupParent
属性 解决了这个问题。您只需删除 fsStayOnTop
样式,并将 MainForm 设置为您的辅助表单的 PopupParent
。
但是,PopupParent
在 Delphi 7 中不存在,因此您必须手动模拟它,方法是覆盖辅助表单的虚拟 CreateParams()
方法以分配 MainForm.Handle
作为 TCreateParams.WndParent
。