Win32: handle System.CmdShow at startup. Patch by Domingo Galmés, slightly modified by me. Issue ##39363.

This commit is contained in:
Bart 2022-10-29 18:41:12 +02:00
parent 65b11fca12
commit 4b4e2cef9c
5 changed files with 27 additions and 1 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;