Newsgroup: it.comp.lang.delphi
Titolo: Cambiare la Form d'avvio in esecuzione!

E' possibile cambiare la Form principale d'avvio in esecuzione?
Mi spiego meglio!
Ho la Form principale, all'avvio del mio software, che esegue i vari
controlli di sistema. La procedura
dei controlli la faccio eseguire sull'evento FormShow.
Alla fine di questi controlli, la form corrente deve distruggersi lasciando
il posto alla Form dove c'è
il menù principale. Cos'è che non va? Siccome la 1 Form è la form d'avvio, e
quindi impostata nella
dichiarazione di TApplication, quando tendo di chiuderla, richiamando il
metodo show, e apro la 2 Form,
il software si chiude completamente.
Come posso fare? Qualcuno si è già trovato davanti a questo problema?
Grazie a chi mi saprà proporre una soluzione!

 dei controlli la faccio eseguire sull'evento FormShow.
Io lo farei sull'oncreate, ma del datamodule principale.
Tu hai un datamodule dove hai un tadatase|tadoconnection|tslconnection?
Nella OnCreate di questo, ci metti i controlli, tutto qui.
Imho...
I datamodule sono una grossa comodita per inserirci la "logica".
I form vanno sono da intefaccia, savo le ovvie eccezioni che ci possono
capitare tra capo e collo.
Bye
AS

Scusa...ma non ho capito una mazza di quello che hai scritto.
Potresti farmi un esempio di codice?
Io non ho detto che ho oggetti per le connessioni....(TADOCONNECTION,
TDATASET). Forse hai capito male il quesito.
Grazie ancora!

Se i controlli non hanno parte visuale, sposta il codice in un datamodule.
Questo datamodule, tipicamente dmMain, lo metti negli autocreate e fai in
modo che venga creato PRIMA del mainform.
Ora, nella OnCreate del datamodule metti un codice del tipo:
begin
  if Not MieiControlliOk then
  begin
  ShowMessage('i controlli sono falliti, Ciao ciao!!')
  Application.Terminate;
  Sleep(5);
end;
Bye
AS

Grazie mille per il consiglio ma tra i controlli esiste anche l'avvio di
alcune form in determinate condizioni. E' possibile farle avviare da un
datamodule?
Grazie ancora!

>   Sleep(5);
xchč?

 datamodule?
Ies
MiodataModuleOnCreate....
begin
  if MieiControlliOk then
  begin
    EseguiControll1ConForm;
  end;
...
procedure TMiodataModule.EseguiControllo1ConForm;
begin
  With TMioForm.Create(Application) do
  begin
    try
    ShowModal;
   finally
     ....
   end;
 end;
end;
Bye
AS

procedure Terminate;
Description
Terminate calls the Windows API PostQuitMessage function to perform an
orderly shutdown of the application. Terminate is not immediate.
-----------------------------^^^^^^^^^^^^^^^^^^^^^
Bye
AS

 wrote in message
news:acivt1$15o5$
1...@newsreader1.mclink.it

Eh, ma lo Sleep() dopo Terminate comunque non serve a nulla, fa solo
addormentare l'applicazione per 5 millisecondi, in cui non viene
elaborato alcun messaggio.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 E' possibile cambiare la Form principale d'avvio in esecuzione?
Leggendo quello che hai scritto di seguito (e che non ho capito
al 100%) mi pare che cio' di cui tu abbia bisogno e' uno splash
form, cioe' di un form di presentazione, che magari informi delle
operazioni iniziali che l'applicazione sta facendo, prima di 
mostrare il form principale vero e proprio di interazione con 
l'utente.  E' cosi' ? ho capito male ?


Per cui suppongo il metodo migliore sarebbe fare un "ciclettino" utilizzando
GetTickCount all'interno del quale chiamo la ProcessMessages.
Giusto?

Ma scusa, io sono duro, non ho ancora ben capito.
Ho capito il pezzo di documentazione ma non ho capito che cosa sto tentando
di prevenire introducendo un ritardo dopo la postquitmessage; sto forse
tantando di evitare che l'applicazione venge reistanziata prima che sia
completamente terminata?

hai capito bene.
Ma il form di presentazione fa partire a sua volta altri form con cui dovrà
interagire l'utente se si presentano determinate condizioni.
Tu hai mai affrontato questo problema?
Mi sai consigliare qualcos'altro?
Grazie!

 elaborato alcun messaggio.
In un contesto di questo tipo:
...
if not EseguiLogin then
begin
  Application.Terminate
end;
FaiQualcosa;
FaiQualcosaltro;
...
come eviteresti che le due chiamate successive vengano eseguite dopo che č
stato applicato il metodo terminate alla applicazione?
Bye
AS


sinceramente ho capito poco :))
perņ ti do questo piccolo pezzo di codice magari ti sarą utile .....
dal file di progetto:
č un piccolo esempio di come puoi controllare i parametri quando viene
chiamatoil tuo programa e creare il form in base al comando...
se avvia il programma in quest1 modi:
// Project1.exe 1  comparirą form 1
// Project1.exe 2    form2
program Project1;
uses
  Forms,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
var a:integer;
begin
Application.Initialize;
a:=strtoint(ParamStr(1));
if a=1 then  Application.CreateForm(TForm1, Form1);
if a=2 then  Application.CreateForm(TForm2, Form2);
Application.Run;
end.
ma non ho capito molto di quello che hai chiesto ciao :))

> ma non ho capito molto di quello che hai chiesto ciao :))
ti aggiungo anche questa prova
program Project1;
uses
  Forms,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
// qui crei un form fai le tue inizializzazioni e quando lo chiuderai
partirà quello principale
 with tform1.Create(nil) do begin
   ShowModal ;
   free ;
 end;
Application.Initialize;
Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

 stato applicato il metodo terminate alla applicazione?
Le due chiamate successive non possono essere eseguite dopo il
Terminate, il metodo Terminate del TApplication esegue da subito
tutte le procedure di shutdown.


 Tu hai mai affrontato questo problema?
Non mi e' mai capitato di dover aprire altri form oltre a quello
di presentazione, durante la fase di presentazione, appunto.
Che problemi hai nel far comparire questi form di dialogo con
l'utente *dopo* che lo splash form e' stato visualizzato ?


 stato applicato il metodo terminate alla applicazione?
o metterle in un ramo else, o, piu' semplicemente, Exit (non Abort) dopo
App.Terminate;
Inoltre e' spesso opportuno _proteggere_ alcune cose come l'esecuzione
di operazioni di logging, l'accesso a funzioni lente (sincrone ma che
comportano una attesa sensibile), con un if not Application.Terminated
then ...
Saluti
Paolo Arosio