MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > Visual Basic 6



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 16-03-2010, 16:44   #1 (permalink)
Utente della community

 L'avatar di StegcO

 
385 Messaggi

StegcO novizio della comunita' ( + 10 )
Unload Me.. Load Me

Non sapevo come descrivere questo mio dubbio, tutto è nato nellaa creazione di un Loader ( vi ricordate? ) per le mie applicazioni, riassuamento controlla se c'è una nuova versione, se c'è la scarica e avvia il programma aggiornato altrimenti si chiude e avvia il programma come al solito.

Tutto era nato a causa di un problema nel chiudere tutto il programma per fare l'aggiornamento, ed eravamo venuti a capo del problema dicendo che cnviene fare un Loader.

Ora mi trovo di fronte a un problema che mi era già capitato tempo fa e che avevo aggirato, cioè che, come in questo caso il comando Unload Me, quando lanciato, invece che scaricare la Form me la riesegue, cioè se io alla fine di FormActivate (o FormLoad) metto questo comando invece che andare in QueryUnload mi ricarica tutto il progetto come se lo avessi appena aperto, ecco il codice:

codice:
Option Explicit

Private Sub Form_Load()

'##### Posiziono la Form #####

Me.Top = (Screen.Height - Me.Height) / 2
Me.Left = (Screen.Width - Me.Width) / 2

frm_main.Caption = " Applicazione"

'##### Controllo se bisogna aggiornare #####

Dim Linea As String

Dim Attuale As Date
Dim Nuova As Date

'##### Trovo la data della versione in uso #####

Open App.Path & "\Version.ini" For Input As #1
    
    Input #1, Linea
    Attuale = CDate(Linea)
    
Close #1

'##### Trovo la data dell'ultima versione #####

Open "\\DiscoRete\Applicazioni$\Applicazione\Version.ini" For Input As #1
    
    Input #1, Linea
    Nuova = CDate(Linea)
    
Close #1

'##### Controllo se bisogna aggiornare #####

If Nuova > Attuale Then

    Me.Show
    
    Else
    
    Call Shell("Client.exe", vbNormalFocus)
    
    Unload Me '##### Al momento risolvo con il comando End #####

End If

'##### Inserisco il Change Log #####

Open "\\DiscoRete\Applicazioni$\Applicazione\Change Log.txt" For Input As #1
    
    Do Until EOF(1)
           Input #1, Linea
           txt_change_log.Text = txt_change_log.Text & Linea & vbCrLf
    Loop
    
Close #1

'##### Svuoto le variabili #####

Linea = 0
Attuale = 0
Nuova = 0

End Sub

Private Sub cmd_aggiorna_Click()

Dim FSO As New Scripting.FileSystemObject

FSO.CopyFolder "\\DiscoRete\Applicazioni$\Applicazione", App.Path, True

Call Shell("Client.exe", vbNormalFocus)
    
Unload Me

End Sub
Sono io che non sò cos'è l'Unload ed è normale che faccia così o sbaglio qualcosa? A rigor di logica io mi immagino che con questo comando mi si interrompa l'esecuzione e, appunto, vada nella Sub Form_Unload(Cancel As Integer) o QueryUnload o se dovesse mancare chiuda tutto.

__________________
Luca Corrarati .it
MDB/ASP/VB6 Developer & IntraNet Administrator

Ultima modifica di StegcO : 16-03-2010 a 17:19.
StegcO non è in linea   Bookmark and Share Rispondi quotando
Vecchio 16-03-2010, 17:30   #2 (permalink)
Very Important Person

 L'avatar di Brontolo

 
1,118 Messaggi

Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )
Quote:
Originariamente inviata da StegcO Visualizza il messaggio
A rigor di logica io mi immagino che con questo comando mi si interrompa l'esecuzione e...
...e quindi, come potrebbero essere eseguite le istruzioni successive, cioè quelle che hai intitolato "Inserisco il Change log" ?
Queste istruzioni tentano di riempire una TextBox - mi pare - che è contenuta nel form che tenti di scaricare.

Un'altra cosa: a cosa serve quello che chiami "Svuoto le variabili" ?
__________________
Il regolamento del forum: la prima cosa da leggere.
Brontolo non è in linea   Bookmark and Share Rispondi quotando
Vecchio 16-03-2010, 17:51   #3 (permalink)
Utente della community

 L'avatar di StegcO

 
385 Messaggi

StegcO novizio della comunita' ( + 10 )
Quote:
Originariamente inviata da Brontolo Visualizza il messaggio
...e quindi, come potrebbero essere eseguite le istruzioni successive, cioè quelle che hai intitolato "Inserisco il Change log" ?
Queste istruzioni tentano di riempire una TextBox - mi pare - che è contenuta nel form che tenti di scaricare.
Quindi Unload Me deve necessariamente essere l'ultima istruzione di una Sub, altrimenti esistendo istruzioni dopo questo comando si riparte col ricaricare tutto il form?

E, per esempio, come in questo in cui io devo popolare quella Texbox SOLO se si verifica una condizione, e quando non succede voglio troncare il tutto come farebbe il tanto deprecato End?

Quote:
Originariamente inviata da Brontolo Visualizza il messaggio
Un'altra cosa: a cosa serve quello che chiami "Svuoto le variabili" ?
Riporto le variabili al valore iniziale, se è testo ="" se è numerica =0 ecc, lo faccio più che altro per ricordarmi in ogni Sub quali variabili uso e quali sono sono invece globali, oltre al fatto che quando mi insegnarono VB6 mi dissero che così facendo libero spazio in memoria (un pò come quando si distrugge Rs o Conn).
__________________
Luca Corrarati .it
MDB/ASP/VB6 Developer & IntraNet Administrator
StegcO non è in linea   Bookmark and Share Rispondi quotando
Vecchio 16-03-2010, 18:20   #4 (permalink)
Moderatore Globale

 L'avatar di TheTruster

 
6,521 Messaggi

TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )TheTruster ha una grande notorieta' ( + 1500 )
Sinceramente non vedo perchè impelagarsi gestendo tutto dal Form, che comunque è soggetto almeno al suo caricamento. Se devi eseguire del codice a prescindere dall'utilizzo del Form, come il controllo della versione, non è necessario affatto sfruttare il Form, basta la Sub Main():

codice:
Sub Main()
'##### Trovo la data della versione in uso #####
'...
'##### Trovo la data dell'ultima versione #####
'...
'##### Controllo se bisogna aggiornare #####
If Nuova > Attuale Then
    frmDiAggiornamento.Show vbModal
End If

Call Shell("Client.exe", vbNormalFocus)

End Sub
Nel Form dovrai gestire solo la scelta di aggiornare o meno il programma e comunque, alla sua chiusura, verrà lanciato il Client.

Fine dei giochi...

TheTruster
__________________



TheTruster non è in linea   Bookmark and Share Rispondi quotando
Vecchio 16-03-2010, 18:25   #5 (permalink)
Very Important Person

 L'avatar di Brontolo

 
1,118 Messaggi

Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )Brontolo e' decisamente importante ( + 350 )
Quote:
Originariamente inviata da StegcO Visualizza il messaggio
Quindi Unload Me deve necessariamente essere l'ultima istruzione di una Sub, altrimenti esistendo istruzioni dopo questo comando si riparte col ricaricare tutto il form?
Diciamo che è all'incirca così.
Quote:
Originariamente inviata da StegcO Visualizza il messaggio
E, per esempio, come in questo in cui io devo popolare quella Texbox SOLO se si verifica una condizione, e quando non succede voglio troncare il tutto come farebbe il tanto deprecato End?
Un modo può essere Unload Me seguito da Exit Sub. Un altro può essere GoTo ad una label posta subito prima dell' Exit Sub. Meglio sarebbe mettere l' Unload Me in un ramo di If e le altre istruzioni nell'altro ramo, in modo che si escludano a vicenda.

Quote:
Originariamente inviata da StegcO Visualizza il messaggio
Riporto le variabili al valore iniziale, se è testo ="" se è numerica =0 ecc, lo faccio più che altro per ricordarmi in ogni Sub quali variabili uso e quali sono sono invece globali, oltre al fatto che quando mi insegnarono VB6 mi dissero che così facendo libero spazio in memoria (un pò come quando si distrugge Rs o Conn).
No. Le variabili locali vengono distrutte automaticamente al termine della routine. Per distinguerle da quelle globali sarebbe bene usare una notazione convenzionale; per esempiio prefissare quelle globali con la lettera "g". In ogni caso assegnare un valore di stringa vuota o di zero ad una variabile non può essere considerata una liberazione di memoria, visto che la variabile continuerebbe ad esistere. Diverso è il discorso per le variabili oggetto (connessioni, recordset, comandi ecc.) per le quali, infatti, esiste l'apposita impostazione a Nothing.

Comunque, l'osservazione di TT, che è arrivata mentre scrivevo, ti libera da un sacco di inconvenienti.
__________________
Il regolamento del forum: la prima cosa da leggere.
Brontolo non è in linea   Bookmark and Share Rispondi quotando
Vecchio 17-03-2010, 12:24   #6 (permalink)
Utente della community

 L'avatar di StegcO

 
385 Messaggi

StegcO novizio della comunita' ( + 10 )
Grazie per i consigli, per risolvere è bastato mettere

codice:
'##### Inserisco il Change Log #####

Open "\\DiscoRete\Applicazioni$\Applicazione\Change Log.txt" For Input As #1
    
    Do Until EOF(1)
           Input #1, Linea
           txt_change_log.Text = txt_change_log.Text & Linea & vbCrLf
    Loop
    
Close #1
dentro la IF, in questo modo carica la txt_change_log solo se necessario, e in questo modo l'Unload Me fa il suo sporco lavoro.

Grazie a tutti
__________________
Luca Corrarati .it
MDB/ASP/VB6 Developer & IntraNet Administrator
StegcO non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +2. Attualmente sono le 09:48.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.