Ti riporto alcuni "assiomi" della programmazione Delphi che potrebbero esserti utili.
Primo fra tutti, il problema della MainForm. Essa è la form principale del programma e deve essere creata attraverso Application.CreateForm nel codice sorgente del programma (file DPR).
Nessun altra form può essere creata prima di questa, a meno di non utilizzare la scrittura TMyForm.Create(Application), adatta alla creazione di form che devono essere visualizzate o utilizzate prima (finestre di presentazione "SplashForm", finestre di login, ecc.), sebbene il codice relativo debba sempre apparire nel file sorgente del programma e non all'interno di eventi OnCreate di form collegate, ancora più sconsigliati quelli della form principale.
Ti scrivo un esempio di file sorgente (non verificato):
codice:
begin
Application.Initialize;
LoginForm := TLoginForm.Create(Application);
try
if LoginForm.ShowModal = mrOk then
begin
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
finally
LoginForm.Free;
end;
end.
Descrivendo brevemente, si tratta di modificare il sorgente del programma introducendo nuove istruzioni oltre a quelle create da Delphi in automatico; le istruzioni prevedono la creazione di una LoginForm visualizzata tramite ShowModal: se il login va a buon fine, il metodo restituisce mrOk permettendo la creazione della form principale con Application.CreateForm e il lancio dell'applicazione (Application.Run), che corrisponde in realtà all'avvio del thread primario che gestisce i messaggi in arrivo per l'applicazione stessa.
Ultima indicazione: l'applicazione termina sempre quando si chiude la form principale (MainForm); in alternativa, si può richiamare il metodo Application.Terminate, ma io suggerirei sempre il primo metodo che giudico più sicuro e pulito (poichè richiede le conferme del caso, se previste).
Spero di averti dato sufficienti indicazioni.
Ciao!