From 4b4e2cef9c0a511f0e313c0425a0def515f18a26 Mon Sep 17 00:00:00 2001 From: Bart <9132501-flyingsheep@users.noreply.gitlab.com> Date: Sat, 29 Oct 2022 18:41:12 +0200 Subject: [PATCH] =?UTF-8?q?Win32:=20handle=20System.CmdShow=20at=20startup?= =?UTF-8?q?.=20Patch=20by=20Domingo=20Galm=C3=A9s,=20slightly=20modified?= =?UTF-8?q?=20by=20me.=20Issue=20##39363.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lcl/include/application.inc | 6 +++++- lcl/include/interfacebase.inc | 4 ++++ lcl/interfacebase.pp | 1 + lcl/interfaces/win32/win32int.pp | 1 + lcl/interfaces/win32/win32object.inc | 16 ++++++++++++++++ 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lcl/include/application.inc b/lcl/include/application.inc index 923ac1c8c9..668c208720 100644 --- a/lcl/include/application.inc +++ b/lcl/include/application.inc @@ -1384,7 +1384,11 @@ end; ------------------------------------------------------------------------------} procedure TApplication.Run; begin - if (FMainForm <> nil) and FShowMainForm then FMainForm.Show; + if (FMainForm <> nil) and FShowMainForm then + begin + WidgetSet.AppSetupMainForm(FMainForm); + FMainForm.Show; + end; WidgetSet.AppRun(@RunLoop); end; diff --git a/lcl/include/interfacebase.inc b/lcl/include/interfacebase.inc index caed5f4b84..fbf88c4818 100644 --- a/lcl/include/interfacebase.inc +++ b/lcl/include/interfacebase.inc @@ -80,6 +80,10 @@ procedure TWidgetSet.AppSetMainFormOnTaskBar(const DoSet: Boolean); begin end; +procedure TWidgetSet.AppSetupMainForm(AMainForm: TObject); //e.g. handle widgetset specific startup info +begin +end; + function TWidgetSet.GetLCLCapability(ACapability: TLCLCapability): PtrUInt; begin case ACapability of diff --git a/lcl/interfacebase.pp b/lcl/interfacebase.pp index 211cd6eb65..1ba0b1589f 100644 --- a/lcl/interfacebase.pp +++ b/lcl/interfacebase.pp @@ -146,6 +146,7 @@ type function AppRemoveStayOnTopFlags(const ASystemTopAlso: Boolean = False): Boolean; virtual; function AppRestoreStayOnTopFlags(const ASystemTopAlso: Boolean = False): Boolean; virtual; procedure AppSetMainFormOnTaskBar(const DoSet: Boolean); virtual; + procedure AppSetupMainForm(AMainForm: TObject); virtual; function LCLPlatform: TLCLPlatform; virtual; abstract; function GetLCLCapability(ACapability: TLCLCapability): PtrUInt; virtual; diff --git a/lcl/interfaces/win32/win32int.pp b/lcl/interfaces/win32/win32int.pp index b35fb79919..4723c49cef 100644 --- a/lcl/interfaces/win32/win32int.pp +++ b/lcl/interfaces/win32/win32int.pp @@ -187,6 +187,7 @@ type function AppRemoveStayOnTopFlags(const ASystemTopAlso: Boolean = False): Boolean; override; function AppRestoreStayOnTopFlags(const ASystemTopAlso: Boolean = False): Boolean; override; procedure AppSetMainFormOnTaskBar(const DoSet: Boolean); override; + procedure AppSetupMainForm(AMainForm: TObject); override; function InitStockFont(AFont: TObject; AStockFont: TStockFont): Boolean; override; diff --git a/lcl/interfaces/win32/win32object.inc b/lcl/interfaces/win32/win32object.inc index aff8b78a3d..ea259a5c42 100644 --- a/lcl/interfaces/win32/win32object.inc +++ b/lcl/interfaces/win32/win32object.inc @@ -562,6 +562,22 @@ begin RecreateWnd(Application.MainForm); end; +procedure TWin32WidgetSet.AppSetupMainForm(AMainForm: TObject); +var + // AMainForm is guaranteed to be a TCustomForm + MainForm: TCustomForm absolute AMainForm; +begin + //Handle CmdShow parameter when invoked from a shortcut. + case System.CmdShow of + SW_SHOWNORMAL: ; //don't alter WindowState + SW_SHOWMINNOACTIVE, + SW_SHOWMINIMIZED, + SW_MINIMIZE: MainForm.WindowState := wsMinimized; + SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized; + SW_SHOWFULLSCREEN: MainForm.WindowState := wsFullScreen; + end; +end; + function TWin32WidgetSet.LCLPlatform: TLCLPlatform; begin Result:= lpWin32;