Newsgroup: it.comp.lang.visual-basic
Titolo: Apertura Form Modale

Un saluto a tutto il gruppo,
ho bisogno di un piccolo(?!?) aiuto:
Sto lavorando su un programmino, il quale ad un certo punto, chiama
una funzione che impiega un bel po' di tempo prima di terminare.
Siccome avrei intenzione di avvisare l'utente in qualche modo, avevo
pensato di creare una maschera con una label che contiene (ad esempio)
il messaggio "Attendere, programma in esecuzione", e magari una barra
segnatempo. Insomma una cosa carina.
Ora, se chiamo la maschera con Form.Show tutto funziona (pero', cosi'
facendo, l'utente ha la possibilita' di richiamare altre funzioni,
cosa che deve essere assolutamente evitata), ma con Form.Show 1 il
programma chiama la maschera e si blocca (non chiama cioe' la Funzione
di cui sopra), rimanendo in attesa della chiusura della maschera
stessa.
Mi spiego meglio con un esempio:
   ...
   ...
   Me.Show
   Form.Show                   OK, il programma apre la maschera
   Call Funzione                   e chiama la Funzione
   ...
mentre:
   ...
   ...
   Me.Show
   Form.Show 1                 Il programma apre la maschera
   Call Funzione  ............. FUNZIONE NON VIENE CHIAMATA 
   ...                                  finche' non viene chiusa la   
                                        maschera chiamata
Qualcuno conosce la soluzione?
P.S.: Non so se mi sono capito!
 
                        Ciao, Mario <M.Do...@FlashNet.it>

On Sat, 07 Mar 1998 23:06:24 GMT, (M.Do...@Flashnet.It) wrote:
Il tuo programma deve prevedere una variabile globale che contenga un
valore 1 quando è attivo e 0 quando non lo è. In questo modo una
seconda FORM con all'interno un timer controllerà ogni evento timer
questa variabile e potrà, diventando visibile,  presentare o meno il
messaggio in questione.
Se non mi ricordo male ho fatto proprio così anch'io.
Ciao.
Marco Grignoli    
sinfosofNO...@tin.it
 senza NOSPAZZATURA

Marco Grignoli
Mi pare di aver capito che Mario ha bisogno di una form di attesa MODALE, e
una form esterna che 'monitorizzi' lo stato di un flag non può esserlo.
Una soluzione potrebbe essese il trasferimento della chiamata alla funzione
(deve però essere public) nella form d'attesa, che può essere in questo caso
visualizzata come vbModal. Il problema è dove mettere la chiamata alla
funzione: nella Form_Load è troppo presto: la form non è  ancora
visualizzata.
Un buon posto mi sembra l'evento Form_GotFocus. Quindi:
[nella form principale]
frmWait.Show vbModal    'visualizza la form d'attesa
...
[nella form d'attesa]
Sub Form_GotFocus
    Call frmMain.Funzione    'chiama la funzione
    Unload Me    'quando la funzione si conclude si chiude la form
End Sub
Ciao, Silvio
pa0088@###
panservice.it

Un buon posto mi sembra l'evento Form_GotFocus
Grossa stupidaggine! Scusate, avevo provato il codice in una form con solo
una label. In realtà come ci piazzo un oggetto sopra la form non riceve
prorio il focus iniziale... L'evento più indicato potrebbe essere
Form_Activate che viene generato quando un oggetto diventa la finestra
attiva.
Ciao, Silvio
pa0088@###
panservice.it

...

 cosa che deve essere assolutamente evitata), 
   Sei sicuro? A meno che nella funzione non ci siano delle DoEvents, il
programma non dovrebbe rispondere a nessun evento fino al termine della
routine.

Ciao ragazzi,
grazie per avermi aiutato a risolvere un problema che mi assillava
gia' da un po'. 
                             ]\/[ario (M.Do...@Flashnet.It)


wrote:

Ciao Claudio,
