En el caso (2) puedes hacer que el formulario de Login sea el principal y el principal lo creas a demanda.
Código Delphi
[-]
program Sistema;
uses
Forms,
Login in 'Login.pas' ,
Main in 'Main.pas' ;
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TfrmLogin, frmLogin);
Application.Run;
end.
En el botón OK del formulario Login, si ls credenciales son correctas, escondes el formulario y creas el principal:
Código Delphi
[-]
procedure TfrmLogin.btnOkClick(Sender: TObject);
begin
if (txtUserName.Text = 'barack') and (txtPassword.Text = 'supersecreto') then
begin
Hide;
with Main.TfrmMain.Create(Self) do
Show;
end;
end;
En el evento Close del formulario Principal lo destruyes y vuelves a mostrar el de Login:
Código Delphi
[-]
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Login.frmLogin.Show;
end;
// Saludos