繁体   English   中英

如何将表格最大化到桌面大小?

[英]How to maximize form to desktop size?

在 Windows 10 上运行的 Delphi 10.4.2 Win32 VCL 应用程序中,在双显示器设置中,当我通过设置WindowState := wsMaximized将 MainForm(或任何其他辅助窗体)设置为开始最大化时,窗体仅在主监视器。

如何将表单最大化到整个桌面,以将表单大小设置为包括两个监视器? 是否有TForm类的内置方法来实现这一点?

一般来说,这个问题并不像你想象的那么简单。 我想你正在想象这样的桌面:

一个简单的桌面布局,由两个大小相同的显示器并排放置。

在这种情况下,我假设您希望窗口像这样放置:

一个跨越两个屏幕的窗口。

但是,如果用户有这个布局怎么办:

横向+纵向+横向屏幕设置

你想要

整个窗口可见,但部分屏幕空间未使用

(整个窗口可见,但一些屏幕空间未使用)或

没有未使用的空间,但窗口的某些部分不可见。

(没有未使用的空间,但窗口的某些部分不可见)?

如果你想使用完整的虚拟桌面空间——最后一种情况——虽然很容易:

BoundsRect := Screen.DesktopRect;

这将在一个简单的设置中完成预期的事情,并且一般来说“没有未使用的空间,但窗口的某些部分可能不可见”。

另请注意,Windows 不喜欢这样的窗口行为,因此用户在使用该应用程序时可能无法获得良好的体验。

一般来说,不要这样做。


请注意,即使是两台显示器都是横向的双显示器设置,也可能很重要:

一个大显示器旁边一个小显示器。

即使两个显示器的尺寸相同,几何形状也可能不重要:

两个相同大小的监视器彼此相邻,都是横向的,但在正交方向上有位移。

每 MSDN:

在多个显示监视器上定位对象

位于多个监视器上的窗口或菜单会导致观看者的视觉中断。 为尽量减少此问题,系统会在一台显示器上显示菜单以及新窗口和最大化窗口

因此,如果您希望TForm窗口横跨整个桌面,使用WindowState=wsMaximize不是WindowState=wsMaximize的方法,因为它只能在主要显示 Form 的单个监视器上工作。

要执行您的要求,您必须从GetSystemMetrics() (或Vcl.Forms.TScreen )获取虚拟屏幕的矩形,然后相应地设置表单的Left / Top / Width / Height ,例如:

if Screen.MonitorCount > 1 then
begin
  Form.WindowState := wsNormal;
  Form.Left := Screen.DesktopLeft;
  Form.Top := Screen.DesktopTop;
  Form.Width := Screen.DesktopWidth;
  Form.Height := Screen.DesktopHeight;
  // or:
  Form.SetBounds(Screen.DesktopLeft, Screen.DesktopTop, Screen.DesktopWidth, Screen.DesktopHeight);
  // or:
  Form.BoundsRect := Screen.DesktopRect;
end else
begin
  Form.WindowState := wsMaximized;
end;

这不是 Windows 应用程序的标准行为。 另请注意,由于桌面可以有多个不需要对齐的显示器,因此桌面可能不是矩形 - 这意味着桌面的边界矩形可能包含不可见的部分。

如果你想这样做,你可以使用 Windows 函数 GetDesktopWindow 来获取桌面窗口,然后获取其大小,然后将窗体的大小设置为该大小。

procedure TMyForm.GoLarge();
var
  rctDesktop:   TRect;
  hDT:          HWND;
begin
  hDT:=GetDesktopWindow();
  if(hDT<>0) then
  begin
    GetWindowRect(hDT, rctDesktop);
    Self.SetBounds(rctDesktop.Left,  rctDesktop.Top, rctDesktop.Width, rctDesktop.Height);
  end;
end;

这不允许任务栏或其他任何使用某些桌面空间的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM