Und ich würde sogar das Login-Form als Hauptformular definieren.
Klickt man auf Login, wird einfach eine Instanz des 'Mainforms' erzeugt und angezeigt. Nach Beendigung des MainForms ist man wieder im Login-Formular. Alternativ kann man die Eigenschaft 'ModalResult' des Login-Buttons auch auf mrClose setzen. Im OnClick-Ereignis des Login-Buttons wird die Hauptanwendung mit ShowModal gezeigt. Wenn der Anwender dann in der Hauptanwendung auf 'Beenden' klickt, wird zuerst das Hauptformular und dann der Login-Dialog geschlossen.
Delphi-Quellcode:
Procedure TMyLoginDialog.btLoginClick (Sender : TObject);
Begin
With TMainForm.Create(Nil) Do Begin
ShowModal;
Release;
End;
// ModalResult := mrClose; <-- die '//' wegnehmen, wenn der Login-Dialog immer da sein soll.
End;
Das hat gegenüber den anderen beiden Lösungen den Vorteil, das man erstens nicht im Projektquelltext rumwurschteln muss und 2. keine unliebsamen Überrraschungen erlebt, wenn man im OnCreate der Hauptanwendung gleich ein Application.Terminate aufruft.