delphidelphi-10.4-sydneytform

How to maximize form to desktop size?


In a Delphi 10.4.2 Win32 VCL application running on Windows 10, in a dual-monitor setup, when I set my MainForm (or any other secondary form) to start maximized by setting WindowState := wsMaximized, then the form is maximized only on the Primary Monitor.

How can I maximize the Form to the whole Desktop instead, to set the Form size to include BOTH MONITORS? Is there a built-in method of the TForm class to achieve this?


Solution

  • In general, this problem isn't as simple as you may think. I suppose you are imagining a desktop like this:

    A simple desktop layout consisting of two monitors of the same size placed next to each other.

    In this case, I assume you want the window to be placed like this:

    A window spanning both screens.

    However, what if the user has this layout:

    Landscape + portrait + landscape screen setup

    Do you want

    Entire window visible, but some screen space unused

    (entire window visible, but some screen space unused) or

    No unused space, but some parts of the window not visible.

    (no unused space, but some parts of the window not visible)?

    If you want to use the full virtual desktop space -- the last case -- it is easy though:

    BoundsRect := Screen.DesktopRect;
    

    This will do the expected thing in a simple setup, and the "no unused space, but some parts of the window might not be visible" thing in general.

    Also be aware that Windows doesn't like that windows behave like this, so the user might not get a nice experience using the app.

    In general, don't do this.


    Please note that even a two-monitor setup, in which both monitors are landscape, can be non-trivial:

    One large monitor next to a small one.

    The geometry may be non-trivial even if both monitors are the same size:

    Two same-size monitors next to each other, both in landscape, but with displaced in the orthogonal direction.