Newsgroup: it.comp.programmare.win32
Titolo: [C++ Builder] Problema costruzione Form

Salve,
ho un'applicazione che fa uso di una sola form (Form1). Dato che impiega 
qualche secondo a caricare, volevo mettere una Form2 con un Gauge in modo 
tale da far apparire prima Form2, incrementare il Gauge man mano che il 
codice del costruttore di Form1 viene eseguito e poi chiudere Form2.
Il problema è che dal costruttore di Form1 non posso invocare Form2->Show 
perché la sua costruzione avviene dopo quella di Form1.
Se inverto l'ordine di esecuzione, Form2 diventa quella principale e non 
appena chiamo Form2->Close da Form1 si chiude anche quest'ultima.
In pratica, come faccio ad aggiungere una semplice Form con Gauge che scorra 
durante la costruzione di Form1 e poi si chiuda?
Saluti 

 scorra durante la costruzione di Form1 e poi si chiuda?
Lancia un thread nel costruttore che apra il tuo gauge e lo mostri.
Dovrai far comunicare il caricamento con il nuovo thread, per dirgli a 
che punto è il lavoro, ma non dovrebbe essere una cosa difficile.

 punto è il lavoro, ma non dovrebbe essere una cosa difficile.
Non ho mai usato i thread, puoi farmi un esempio di codice?
Inoltre il gauge deve essere visualizzato su una form che viene costruita 
dopo quella iniziale. Con i thread è possibile farla costruire prima? 

 Non ho mai usato i thread, puoi farmi un esempio di codice?
Ho cercato qualcosa in rete e ho trovato un esempio che sono riuscito a far 
funzionare.
In pratica mi credo una classe ereditata da TThread, faccio l'override del 
costruttore rendendolo pubblico.
Definisco Execute mettendo dei puntantori a funzioni che punteranno alle 
funzioni che devo eseguire i quali poi saranno i parametri di Synchronize.
L'effetto è quello che volevo, ma sorge un problema (che in realtà avevo 
notato anche in precedenza quando ancora non usavo i Thread).
Il programma crea una matrice di 8100 TShape.
Se l'operazione la faccio eseguire al costruttore, impiega circa 7 secondi.
Se invece la faccio eseguire all'evento OnClick di un TButton oppure, come 
in questo caso, da una funzione che poi viene invocata dal Thread, impiega 
circa 30 secondi!
A questo punto le soluzioni sono:
1. Faccio attendere 7 secondi senza nessun indicatore
2. Faccio attendere 30 secondi con il Gauge che si incrementa
Ci dovrà pur essere la
3. Faccio attendere 7 secondi con il Gauge che si incrementa
oppure no? 

 3. Faccio attendere 7 secondi con il Gauge che si incrementa
E infatti c'è! In pratica, la lentezza era dovuta al fatto che quando il 
codice viene eseguito nel costruttore, i TShape non sono ancora 
visualizzati, mentre quando viene eseguito dalla funzione del thread o da un 
evento OnClick ad esempio, man mano che li crea li visualizza.
Chiamando il metodo Hide() in fase di costruzione e Show() solo quando il 
ciclo che costruire la matrice ha terminato, impiega circa 7 secondi e il 
Gauge si incrementa correttamente.
Saluti 

 scorra durante la costruzione di Form1 e poi si chiuda?
mi sembra di ricordare che nella cartella di istallazione tra gli esempi c'č 
uno che fa prorpio quell che tu vuoi,
 l esempio si chiama SPLASH o una cosa delgenere 

 l esempio si chiama SPLASH o una cosa delgenere 
Ok grazie