PDA

Visualizza versione completa : [VB 6] Scaricare il programma dalla ram


Jamester
30-05-2009, 16.38.13
Buongiorno a tutti. So che magari il titolo non Ŕ molto esplicativo ma cercher˛ di spiegare cosa accade. In pratica il mio programma in VISUAL BASIC 6, se gli dico di uscire cn opzione o pulsante, esce e si scarica dalla memoria come da logica ma se esco dal programma cn la X in alto, esce dal programma ma non dalla memoria: perche'?

Alhazred
30-05-2009, 18.39.08
Penso tu possa associare al pulsante X una funzione alla pressione, potresti associargli quella che ora Ŕ l'opzione di chiusura e che ti fa scaricare il programma dalla ram.

Franzo
04-06-2009, 14.36.00
cosa significa con opzione?
prova a mettere End nell'evento di scaricamento del form

LoryOne
04-06-2009, 15.12.18
PerchŔ un processo pu˛ dar vita ad altri processi, oppure essere lui stesso l'ultimo processo della coda.
Quando premi il tasto con la X, gli eventi che si susseguono per liberare la memoria occupata dal processo vengono presi in carico dal S.O. che, in assenza di procedure atte ad intervenire sulla normale sequenza degli eventi, ne coordina l'esecuzione sequenziale.
Quando viene aperta una finestra, al processo di creazione identificato con un numero, ne vengono accodati altri, come ad esempio l'allocazione della memoria, gli stili della finestra, le procedure di event trapping, ecc. La sola creazione e visualizzazione di una classica finestra in VB6, libera il programmatore da almeno una settantina di righe di codice in C (Win32 API) e parecchie altre in assembly.
Quando la finestra viene chiusa, i processi sequenziali che le hanno dato vita, vengono rieseguiti "al contrario", rispettando una precisa gerarchia.
Agendo sull'evento eseguito in seguito alla pressione del tasto X, puoi far credere ad esempio che la finestra sia chiusa, quando in effetti hai solo cambiato la proprietÓ visible della finestra; In questo caso avresti agito in modo da eseguire una differente azione rispetto a quella che normalmente si sarebbe portata a termine...

Franzo
04-06-2009, 17.29.53
per LoryOne
io sono un amatore della programmazione, tutt'altro che esperto.
Concordo su quanto hai detto ma: di default il tasto X serve a chiudere un programma.
Se poi uno nell'evento di scaricamento della form principale ci scrive l'impossibile e qualcosa impedisce di chiudere definitivamente il programma, la causa sarÓ quella penso io...oppure c'Ŕ qualcosa (oggetti, librerie, connessioni) che necessitano di essere scaricate prima della chiusura del programma

Questo Ŕ quello che penso, magari Ŕ tutto sbagliato! :)

LoryOne
04-06-2009, 19.21.38
io sono un amatore della programmazione
E io no ?
C'ho dato dentro senza ritegno, poi qualcuno mi ha detto che si potevano prendere dei virus, allora ho preso precauzioni perdendo solo il pelo ma non il vizio :D

Ammetto di aver scritto troppo in fretta e di essere stato un po troppo stringato, ma non Ŕ stato per mettere in luce chissÓ quali capacitÓ per fare qualche sorta di confronto ... E' un mare vasto da navigare la programmazione, ho cercato di sintetizzare ahimŔ in malo modo.

Credo che sia utile a tutti che tu posti un po di codice

LoryOne
04-06-2009, 20.42.49
Prima di tutto:
La finestra resta in memoria all'interno dell'ambiente di sviluppo, oppure sul progetto compilato ?

Crea un form ed aggiungi un pulsante
Copia nel form il codice seguente


Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox "UnloadMode=" & UnloadMode
MsgBox "QueryUnload"
'Cancel = 1
End Sub

Private Sub Form_Unload(Cancel As Integer)
MsgBox "Unload"
End Sub

Private Sub Form_Terminate()
MsgBox "Terminate"
End Sub


Capirai la corretta sequenza degli eventi che si susseguono durante la chiusura della finestra.
Questo Ŕ importante, ma presta attenzione al valore di UnloadMode: esso cambia se premi il tasto con la X, oppure se premi il pulsante
Poi togli il commento a Cancel = 1 e verifica la sequenza.

LoryOne
05-06-2009, 08.59.44
Se poi uno nell'evento di scaricamento della form principale ci scrive l'impossibile e qualcosa impedisce di chiudere definitivamente il programma, la causa sarÓ quella penso io...

eh giÓ :)