I made a sample code showing how to have a login form shown BEFORE main form. I checked (Win10) that minimizing the window with task bar click, it can be reactivated with task bar click.
In the login form, I just made it with two buttons, one for login OK and one for login failed, without actuallu checking any usercode/password. I assumed you was able to do that part.
Project file:
program LoginDemo;
uses
Vcl.Forms, Vcl.Dialogs, Vcl.Controls,
LoginDemoMain in 'LoginDemoMain.pas' {DemoMainForm},
LoginDemoDialog in 'LoginDemoDialog.pas' {DemoLoginForm};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDemoLoginForm, DemoLoginForm);
try
if DemoLoginForm.ShowModal <> mrOK then begin
ShowMessage('Invalid login, sorry...');
Exit;
end;
finally
DemoLoginForm.Free;
end;
Application.CreateForm(TDemoMainForm, DemoMainForm);
Application.Run;
end.
Login dialog:
unit LoginDemoDialog;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TDemoLoginForm = class(TForm)
LoginOKButton: TButton;
LoginFailedButton: TButton;
Label1: TLabel;
procedure LoginFailedButtonClick(Sender: TObject);
procedure LoginOKButtonClick(Sender: TObject);
end;
var
DemoLoginForm: TDemoLoginForm;
implementation
{$R *.dfm}
procedure TDemoLoginForm.LoginFailedButtonClick(Sender: TObject);
begin
Close;
ModalResult := mrCancel;
end;
procedure TDemoLoginForm.LoginOKButtonClick(Sender: TObject);
begin
Close;
ModalResult := mrOK;
end;
end.
Main form:
unit LoginDemoMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TDemoMainForm = class(TForm)
Label1: TLabel;
ExitButton: TButton;
procedure ExitButtonClick(Sender: TObject);
end;
var
DemoMainForm: TDemoMainForm;
implementation
{$R *.dfm}
procedure TDemoMainForm.ExitButtonClick(Sender: TObject);
begin
Close;
end;
end.
if not TForm1.Execute...it would also be better to use the application created instance, so using Execute as an object method, not a class method. - Rob Lambden