Newsgroup: it.comp.lang.visual-basic
Titolo: Evento QueryUnload

Ciao a tutti.
In un mio programma ho la necessità di eseguire delle operazioni sul
registro di sistema quando un form viene chiuso.
Ho provato, ma pare che il programma non esegua l'operazione, e il codice
che modifica il registro se usato all'esterno dell'evento funziona. Come
mai? Ho provato anche ad usare l'evento Terminate e l'Unload, ma non
funzionano. Come mai?
Quasi dimenticavo: per il registro, non uso le funzioni di vb, uso le api.
Ciao e grazie

Il 04/01/2004 16.55, Ricky scrisse:

Se metti un punto di interruzione dove comincia il tuo codice per le 
operzioni sul registro, poi avvii il programma e chiudi il form, il 
programma si ferma nel punto di interruzione?
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 maxx
Ciao

 ha scritto nel messaggio
news:8iXJb.38975$VW.18...@news3.tin.it...


 DoEvents subito dopo il richiamo della procedura per il regstro.
La soluzione che hai trovato non ha senso ;)
Tieni presente che il registro di sistema ha una sua cache e che il flush
può ritardare anche di qualche secondo (questo per non prendere troppe
risorse al sistema).
Per ovviare a questo problema usa la RegFlushKey() dopo la scrittura e prima
della lettura della chiave.
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Ciao
Ciao e grazie

Il 04/01/2004 20.34, Ricky scrisse:

E' una delle abitanti dell'alveare!



:-)
Ho provato a mettere un breakpoint all'interno della funzione che viene
richiamata, ma non fa effetto.! Evidentemente non si possono richiamare
procedure esterne nell'evento? La funzione sta in un modulo bas.
Ciao

 
Si' che si puo'. Controlla che non vi sia qualche procedura con lo 
stesso nome o con un nome di variabile.
Oppure si verifica un errore prima che venga eseguita la tua funzione.
Prova a modificare nelle opzioni di VB il modo in cui vengono gestiti e 
gli errori e specifica di bloccare l ésecuzione su tutti gli errori.
ciao


 Cosa è la RegFlushKey?
Ma non dicevi di aver usato l'API per il registro?


 procedure esterne nell'evento? La funzione sta in un modulo bas.
Mmmm... qui mancano alcuni concetti di base a quanto pare.
Il breakpoint è raggiunto o no?
Se no, allora o stai bloccando il programma in modo drastico (es. il bottone
"stop" di VB) oppure il form non viene scaricato.
Oppure il breakpoint non è nella funzione giusta.
Se sì, allora la funzione viene sicuramente eseguita, altrimenti non
partirebbe nemmeno il programma.
In questo caso occorre verificare il valore di ritorno delle funzioni
dell'api (vedi MSDN) per vedere qual è quella che non fa ciò che ti aspetti.


 Ma non dicevi di aver usato l'API per il registro?
Sì, l'ho fatto, stavo solo chiedendo a Zanna cosa è, visto che mi ha
consigliato di usarla.
Ciao

 maxx
Ciao,
Ricky

 Oppure il breakpoint non è nella funzione giusta.
Sarà il breakpoint messo male, perché non interrompo con stop, premo un
pulsante con un End nell'evento click, ed il form viene scaricato,
altrimenti i pulsanti di esecuzione del vb non tornerebbero alla forma
normale di progettazione, con play  abilitato e pause e stp disabilitati
Io intercetto l'evento QueryUnload dell'unico form del programma, sia per
eseguire le operazioni sul registro, sia per evitare che il programma si
chiuda premendo la X sul form, in modo tale da far chiudere il programma
solo dal tasto Esci (senza contare dal taskmanager e chiusura di windows)
Questo è il codice:


 Questo è il codice:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'Imposta le opzioni nel registro
PutRegSettings
Select Case UnloadMode
    Case 0 ' vbFormControlMenu
        Cancel = True
    Case 1 ' vbFormCode
        Cancel = False
    Case 2 ' vbAppWindows
        Cancel = False
    Case 3 ' vbAppTaskManager
        Cancel = False
End Select
End Sub

 pulsante con un End nell'evento click, ed il form viene scaricato,
Credo di aver trovato l'errore.
Se premo la X, oppure se uso Unload Me al posto di End, la procedura
QueryUnload viene richiamata. Ma a questo punto mi sorge il dubbio che usare
End al posto di Unload sia come premere il tasto stop, o sbaglio? Ringrazio
tutti per l'aiuto, e ne approfitto per augurarvi Buona Befana (e che sia
meno brutta del solito).
Ciao,
Ricky

 normale di progettazione
L'istruzione End (leggiamolo 'sto MSDN) equivale allo "stop" di VB, e
interrompe il programma bruscamente.
Per scaricare il programma in modo corretto devi richiamare l'unload di ogni
form aperto (sostituisci End con Unload Me) e così avrai anche tutti gli
eventi dei vari oggetti.


Il 05/01/2004 11.29, Ricky scrisse:

Dimentica l'istruzione end. Non va usata!!! Significa che il codice e' 
scritto male.
L'uso di end interrompe bruscamente il programma senza richiamare tutti 
gli eventi di chiusura.
ciao


 maxx
Ciao e grazie ancora a tutti

 Posso usare Unload Forms per terminare tutte le form aperte giusto?
Anche google su questo gruppo può essere molto utile in casi di FAQ come la
tua.
http://snipurl.com/3nfj


 Ciao
Grazie e ciao