Newsgroup: it.comp.lang.visual-basic
Titolo: aiuto .... non compare la schermata iniziale .... !!!

ciao, ho voluto aggiungere al programma una schermata iniziale (una
"Splash") con una immagine personalizzata, che si carichi all'avvio del
programma. Facendo un po' di prove però ho notato che non mi viene
visualizzata. Il codice che ho utilizzato è il seguente:
Private Sub Main()
frmSplash.Show ' la mia scheermata iniziale.
' Inserisco un ciclo per il test della schermata, in teoria la schermata
dovrebbe rimanere visualizzata fino al termine del ciclo ....
For i = 0 to 1000000
Debug.Print i
Next
' visualizzo il form principale e scarico la schermata iniziale.
frmMain.Show
Unload frmSplash
End Sub
Inoltre, ovviamente ho impostato come oggetto di avvio la Sub Main.
Quando vado ad eseguire l'applicazione da VB, all'inizio non compare nulla
(evidentemente il ciclo è in fase di iterazione senza però mostrarmi la
Spalsh). In seguito mi appare subito il frmMain.
Perchè ?? L'unico modo per vedere la schermata è quello di impostarla come
vbModal, cosa che però non mi serve a nulla dato che mi deve scomparire da
sola al termine delle routine di avvio che avrei intenzione di creare (al
posto , del ciclo di test) e deve scomparire senza l'intervento dell'utente.
Non si veramente cosa pensare ... mi potreste dare una mano a caoire ???
grazie.

aggiungi un frmSplash.Refresh dopo il comando show o nel peggiore dei casi
un doevents
L2K

 ha scritto nel messaggio
news:jmd_7.38386$s04.1...@news.infostrada.it...

Prova ad aggiungere prima del ciclo un DoEvents()
--
                  \/
                 -   -
                 (.) (.)
----o0O0o--(_)--o0O0o----
<<Oh Grande Spirito,
Concedimi la serenità
Di accettare le cose
Che non posso cambiare,
Il coraggio di cambiare le cose
Che posso cambiare,
E la Saggezza di capirne la differenza.>>
               (Preghiera Cherokee)
Ciao
Franco

Ho provato con il suggerimento di Lukino2000 ha inserire un
frmSpalsh.Refresh e il tutto funziona finalmente in modo corretto ..... .
Dato che amo capire il motivo delle cose ..... perchè senza aggiungere il
Refresh non funzionava correttamente. Io non me lo so spiegare.
grazie ancora.

 Refresh non funzionava correttamente. Io non me lo so spiegare.
Diciamo che l'aggiornamento della parte video (la form e tutti i controlli
inseriti) viene fatto quando il programma ha terminato di fare i suoi compiti o
si ferma per aspettare un input da parte dell'utente. Nel tuo caso, dopo la
visualizzazione della form il programma continua le sue operazioni, e se non gli
viene detto esplicitamente di aggiornare i dati sullo schermo tu non vedi nulla.
L'istruzione DoEvents dice semplicemente di controllare la coda dei messaggi
dell'oggetto e fare altre operazioni se ce ne sono. altrimento non fa nulla.
Lo stesso comportamento lo vedi quando tutta la finestra di un'applicazione
diventa grigia (o del colore dello sfondo): invece di "perdere tempo" ad
aggiornare lo schermo, continua i suoi compiti e basta. Dico "perdere tempo"
perche' e' un'operazione estremamente lenta, pero' se l'elaborazione e' lunga
occorre aggiornare l'utente sullo stato di avanzamento del processo, altrimenti
potrebbe pensare ad un blocco dell'applicazione.
Usare DoEvents o Refresh con moderazione.
Era sufficiente scrivere la parola DOEVENTS e premere il tasto F1 da VB per
ottenere la seguente spiegazione:
"Yields execution so that the operating system can process other events"...
Michele
--
Per l'e-mail togli "xxx".
Home page: 
http://spazioweb.inwind.it/fochinet

O grande spirito insegna alla gente a QUOTARE il testo CORRETTAMENTE senza
includerlo tuttto e a contenersi nella lunghezza delle firme! :(

 O grande [...]
Sorry
F.

 includerlo tuttto e a contenersi nella lunghezza delle firme! :(
:)
--
Starla. SP.

 Refresh non funzionava correttamente. Io non me lo so spiegare.
Beh, per dire in modo semplice quanto detto da Michele, tutti gli eventi (o
messaggi, WM_PAINT compreso) vengono accodati appunto nella coda di messaggi
della finestra, e Windows se li smazza quando l'applicazione non sta facendo
niente.
Quindi se dopo lo show c'è del codice windows aspetta a dipingere (WM_PAINT)
la finestra finchè tutto il codice non è stato processato.
Il DoEvents al contrario dà un attimo di respiro all'applicazione e fa in
modo che windows svuoti la coda di messaggi prima di continuare, con tutti i
benefici e rischi ne ne conseguono.
Il Refresh si limita a forzare il ridisegno della finestra (a intuito direi
che  faccia un PostMessage(WM_PAINT) seguito dal PeekMessage(WM_PAINT)).
Ciao