Newsgroup: it.comp.lang.delphi
Titolo: Halt o Terminate ?

salve
volevo chiedere come agite di solito quando al create della mainform il
controllo della password dell'applicazione dà esito negativo.
Mi spiego meglio.
All'avvio controllo che la password inserita dall'utente sia quella giusta,
se lo è tutto ok e continua l'esecuzione.
Se invece non lo è chiamo Application.terminate, ma oltre ad eseguire tutto
il restante codice della procedura in oggetto, ho anche uno sgradevole
effetto show/hide della form e solo dopo finalmente il programma termina
realmente.
La mia domanda è questa: quali sono le controindicazioni nell'usare un Halt
invece che App.Terminate (oltre al non rilascio delle risorse impiegate) ?
Voi di solito come agite?
Ciao e grazie
Andrea


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)


E' una strada che non avevo considerato..(quella di creare form a runtime)
Credo sia la soluzione più adeguata
Grazie
Ciao e buona Befana anche a te
Andrea

 ha scritto nel messaggio
news:nxmKb.229011$vO5.9...@twister1.libero.it...

Dipende dal tipo di applicazione, ma io in genere gestisco tutto nel Main
Program dell'applicazione, ovvero modificando direttamente il codice nel
.dpr, piu o meno come segue
begin
  Application.Initialize;
  { Creazione del datamodule contenente la connessione al Database }
  Application.CreateForm(TdmAppConfig, dmAppConfig);
  try
   { Inizializzazione database di configurazione }
   dmAppConfig.InitializeIniFile;
   dmAppConfig.InitializeApConf;
   { Login dell'Utente }
   frmLogin := TfrmLogin.Create(Application);
   try
     if frmLogin.ShowModal = mrCancel then begin
       raise Exception.Create(MSG_LOGIN_001);
     end
   finally
     frmLogin.Free;
   end;
  { Visualizzazione Form Splash }
   frmSplash := TfrmSplash.Create(Application);
   frmSplash.Show;
   frmSplash.Refresh;
   { Inizializzazione dell'applicazione }
   Application.CreateForm(TdmAppController, dmAppController);
   Application.CreateForm(TdmLavorazioni, dmLavorazioni);
   dmLavorazioni.LoadDbInformations;
   dmLavorazioni.InitializeDatabase;
   Application.CreateForm(TfrmMain, frmMain);
   frmSplash.Close;
   frmSplash.Free;
   Application.Run;
 except
    { Gestione delle eccezioni }
   on E: Exception do begin
      MessageDlg(E.Message, mtError, [mbOk], 0);
      dmAppConfig.cnnApConf.Connected := False;
    end;
  end;
In sostanza:
1 - creo ed inizializzo la connessione al database contenente le
informazioni di sicurezza
2 - viene creata al momento la form di Login, la quale si occuperà di
eseguire tutte le verifiche del caso, quindi o l'utente ha inserito le
informazioni corrette ed il form viene chiuso tramite "OK", oppure l'utente
ha annullato il login tramite "Annulla"
3 - se l'utente annulla l'inserimento sollevo un'eccezione che viene gestita
sia nel blocco finally, che nel blocco except
4 - se invece frmLogin.ShowModal <> mrCancel, significa che l'utente ha
inserito informazioni corrette e quindi l'inizializzazione dell'applicazione
continua, con la visualizzazione di un form di Splash, ecc.
In questo modo è possibile evitare il caricamento di qualunque risorsa non
necessaria e quindi si bypassa qualunque problema supplementare.
Inoltre, a livello di interfaccia utente, si ha una risposta piu' veloce
dell'applicazione e l'aspetto risulta piu' gradevole in quanto all'avvio
viene mostrata solo la form di Login e niente altro.
Ho notato che i form creati "manualmente" come frmLogin e frmSplash
andrebbero creati con TFrom.Create e non con Application.CreateForm, non per
evitare malfunzionamenti ma semplicemente perchè, a quanto pare, Delphi usa
Application.CreateForm per identificare quali form sono in AutoCreate tra le
opzioni del progetto.
Inoltre ogni tanto vedo che le opzioni mi si "incasinano" e delphi non
capisce piu' qual'è il form principale dell'applicazione. Problema che in
genere risolvo caricando manualmente tutti i form (ma lo faccio
normalmente), tranno appunto quello che per me è principale.
Ciao.
Gianluca.