如何在前台窗体中全屏最大化后台的另一个窗体?
实现从一个窗体全屏最大化另一个窗体的方法
核心问题修正
你之前操作错误的原因是调用ShowWindowAsync时传入了当前窗体的Handle,只要替换为目标后台窗体的句柄,就能正确对目标窗体执行全屏操作。
方法一:纯Delphi属性实现
在前台窗体的OnActivate事件中添加代码(假设后台窗体名为Form2):
procedure TForm1.FormActivate(Sender: TObject); begin // 设置目标窗体无边框 Form2.BorderStyle := bsNone; // 让目标窗体覆盖整个屏幕 Form2.SetBounds(Screen.DesktopLeft, Screen.DesktopTop, Screen.DesktopWidth, Screen.DesktopHeight); // 可选:将目标窗体置于最上层(根据需求调整) Form2.BringToFront; end;
方法二:结合Windows API实现
如果偏好使用ShowWindowAsync,关键是传入目标窗体的句柄:
procedure TForm1.FormActivate(Sender: TObject); begin Form2.BorderStyle := bsNone; // 传入Form2的Handle,而非当前窗体的Handle ShowWindowAsync(Form2.Handle, SW_MAXIMIZE); // 可选:强制刷新目标窗体确保状态生效 UpdateWindow(Form2.Handle); end;
注意事项
- 确保后台窗体
Form2已提前创建(比如主窗体启动时执行Form2 := TForm2.Create(nil); Form2.Show;) - 若需退出全屏,可在合适事件(如前台窗体失去焦点)中恢复
Form2.BorderStyle为bsSizeable或其他样式,并调整窗口尺寸
内容的提问来源于stack exchange,提问作者Pickle
相关产品推荐
相关产品推荐

