Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 21-06-2009, 15.38.47   #1
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
[VB 6] Impedire la chiusura da evento UNLOAD

Buongiorno a tutti. Quest'oggi il mio dubbio è il seguente: Ho una form cn dei checkbox nella procedura UNLOAD: il codice e' il seguente

Quota:
Private Sub Form_Unload(Cancel As Integer)

If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then
Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Else
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Unload Me
End If
End Sub
ora sia se i valori sono 0 o sono 1 la form si unloada comunque. Invece io vorrei che se si verificasse la prima condizione, il programma lasci la form sullo schermo e la chiuda solo se 1 dei 2 valori sono 1 e nn 0. Cos'e' che nn va?
Jamester non è collegato   Rispondi citando
Vecchio 22-06-2009, 10.46.30   #2
Stizzo
Junior Member
 
Registrato: 14-06-2009
Messaggi: 102
Stizzo promette bene
Prova così, dovrebbe andare...

Quota:
If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then
Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Exit Sub
Else
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Unload Me
End If
End Sub
Fammi sapere
Stizzo non è collegato   Rispondi citando
Vecchio 22-06-2009, 14.04.20   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Ti stai rispondendo da solo Jamester.
Quel Cancel as Integer nel Form_Unload non è li per caso. Può acquisire un valore, oppure ad esso può essere assegnato; Tra l'altro, il parametro è passato byreference, non byvalue: Ha un senso nel buon vecchio assembly. (ed in VB non fa eccezione)
Aggiungo solo una cosa: L'Unload Me è inutile li dove lo hai messo, perchè l'evento Unload del form viene richiamato sicuramente da qualche altra parte nel tuo programma.
LoryOne non è collegato   Rispondi citando
Vecchio 22-06-2009, 20.54.18   #4
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
Ti stai rispondendo da solo Jamester.
Quel Cancel as Integer nel Form_Unload non è li per caso. Può acquisire un valore, oppure ad esso può essere assegnato; Tra l'altro, il parametro è passato byreference, non byvalue: Ha un senso nel buon vecchio assembly. (ed in VB non fa eccezione)
Aggiungo solo una cosa: L'Unload Me è inutile li dove lo hai messo, perchè l'evento Unload del form viene richiamato sicuramente da qualche altra parte nel tuo programma.
Scusa ma asp...ma di cosa stai parlando? dove sta sto cancel as integer? nn capisco

Cmq il codice suggeritomi nn va uguale. se vado su uscita cn la X del form senza selezionare uno dei due checkbox, esce lo stesso
Jamester non è collegato   Rispondi citando
Vecchio 22-06-2009, 23.25.04   #5
Semi.genius
Guest
 
Messaggi: n/a
Forse quello che intende LoryOne è cambiare il valore del parametro di ingresso passato come riferimento di Cancel ad un altro valore per prevnire la chiusura della from. Potrebbe andare, ma sinceramente non ci ho mai provato

IMHO, non lo devi mettere su Unload quel pezzo di codice, perché la funzione Unload indica solo le operazioni da fare PRIMA della chiusura, non la può annullare.

Devi metterlo invece su Form_QueryUnload

perciò toglierei da unload quel codice e metterei

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Select Case UnloadMode
Case vbFormControlMenu 'cioè intende ha premuto X
...
End Select
End Sub

e al posto dei ... ci metterei:
If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then
Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Exit Sub
Else
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
End If
End Sub

(cioè come quello di Stizzo ma senza unloadMe che ci pensa lui alla fine)
  Rispondi citando
Vecchio 22-06-2009, 23.52.26   #6
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Select Case UnloadMode
Case vbFormControlMenu 'cioè intende ha premuto X
If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then
Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Exit Sub
Else
End If
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
End Select
End Sub
Scritto cosi continua a uscirsene quando cliccco sulla X. Ho azzerato UNLOAD come dettomi
Jamester non è collegato   Rispondi citando
Vecchio 23-06-2009, 07.56.28   #7
Semi.genius
Guest
 
Messaggi: n/a
Quota:
Inviato da Jamester
Scritto cosi continua a uscirsene quando cliccco sulla X. Ho azzerato UNLOAD come dettomi
se togli il commento a
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")

compare la Message box? (solo per sapere se entra effettivamente nel metodo associato all'evento)
  Rispondi citando
Vecchio 23-06-2009, 08.48.12   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Semi.genius ha capito: Cancel va impostato ad un valore diverso da 0.

Un po di teoria (quel tanto che basta):
Ogni evento è gestito da una procedura di controllo sullo stato di quello che lo precede ed, all'interno di ogni procedura, si può essere in grado di intervenire sul normale susseguirsi degli eventi. Ogni parametro (strutture e variabili) dato in pasto alle funzioni Win32 è passato byreference, in modo che all'interno della funzione il valore del parametro possa essere ricavato, oppure ad esso possa essere assegnato un valore differente, in modo da ottenere esiti differenti.
Passiamo ora ad uno pseudocodice dimostrativo dove ogni Subprocedure sia public:

(Public) Sub[procedure] IncrementoByReference(ByRef I As Integer)
I = I + 1
End Sub[procedure]

(Public) Sub[procedure] IncrementoByValue(ByVal I As Integer)
I = I + 1
Print I
End Sub[procedure]

(Public) Sub[procedure] Main()
Dim I As Integer

I=1
IncrementoByReference I
Print I -> Ad I è assegnato il valore 2 all'interno di Main
IncrementoByValue I -> Ad I è assegnato il valore 3 all'interno della subprocedure, poichè di I è stato effettuata una copia ed il suo valore è cambiato solo all'interno di IncrementoByValue
Print I -> Ad I è ancora assegnato il valore 2
End Sub[procedure]

Affinchè una form possa essere chiusa, VB fornisce 3 eventi in sequenza sui quali è possibile agire per porre un controllo sul flowing delle istruzioni che portano alla chiusura della form:
Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Form_Unload(Cancel As Integer)
Form_Terminate()

Sia Cancel, sia UnloadMode sono due parametri passati byreference ad una subprocedure.
Nell' intervento precedente "[VB 6] Scaricare il programma dalla ram", avevo posto l'attenzione sulla corretta sequenza con la quale tali eventi vengono richiamati in VB.
LoryOne non è collegato   Rispondi citando
Vecchio 23-06-2009, 09.44.26   #9
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da Semi.genius
se togli il commento a
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")

compare la Message box? (solo per sapere se entra effettivamente nel metodo associato all'evento)
La risposta alla tua domanda e' NO. Non appare il bye ma solo la prima messagebox
Jamester non è collegato   Rispondi citando
Vecchio 23-06-2009, 09.45.48   #10
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
Semi.genius ha capito: Cancel va impostato ad un valore diverso da 0.

Un po di teoria (quel tanto che basta):
Ogni evento è gestito da una procedura di controllo sullo stato di quello che lo precede ed, all'interno di ogni procedura, si può essere in grado di intervenire sul normale susseguirsi degli eventi. Ogni parametro (strutture e variabili) dato in pasto alle funzioni Win32 è passato byreference, in modo che all'interno della funzione il valore del parametro possa essere ricavato, oppure ad esso possa essere assegnato un valore differente, in modo da ottenere esiti differenti.
Passiamo ora ad uno pseudocodice dimostrativo dove ogni Subprocedure sia public:

(Public) Sub[procedure] IncrementoByReference(ByRef I As Integer)
I = I + 1
End Sub[procedure]

(Public) Sub[procedure] IncrementoByValue(ByVal I As Integer)
I = I + 1
Print I
End Sub[procedure]

(Public) Sub[procedure] Main()
Dim I As Integer

I=1
IncrementoByReference I
Print I -> Ad I è assegnato il valore 2 all'interno di Main
IncrementoByValue I -> Ad I è assegnato il valore 3 all'interno della subprocedure, poichè di I è stato effettuata una copia ed il suo valore è cambiato solo all'interno di IncrementoByValue
Print I -> Ad I è ancora assegnato il valore 2
End Sub[procedure]

Affinchè una form possa essere chiusa, VB fornisce 3 eventi in sequenza sui quali è possibile agire per porre un controllo sul flowing delle istruzioni che portano alla chiusura della form:
Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Form_Unload(Cancel As Integer)
Form_Terminate()

Sia Cancel, sia UnloadMode sono due parametri passati byreference ad una subprocedure.
Nell' intervento precedente "[VB 6] Scaricare il programma dalla ram", avevo posto l'attenzione sulla corretta sequenza con la quale tali eventi vengono richiamati in VB.
Si vede che sicuramente sei più pratico di me pero' detto sinceramente per me quello che hai scritto è arabo quindi non potresti semplicemente e gentilmente scrivere il codice esatto? grazie...
Jamester non è collegato   Rispondi citando
Vecchio 23-06-2009, 10.24.34   #11
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Codice originario:
Codice:
Private Sub Form_Unload(Cancel As Integer)
If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then
Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Else
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Unload Me
End If
End Sub
Leggi il codice che hai scritto, allo stesso modo con cui il computer legge ed esegue le istruzioni passo dopo passo
Codice scomposto:
Codice:
Private Sub Form_Unload(Cancel As Integer)
If CondizioneVerificata Then -> Apertura Blocco verifica
          Codice eseguito in caso di esito positivo
Else
          Codice eseguito in caso di esito negativo
End If -> Chiusura blocco di verifica
End Sub
Sostituzione blocchi di scomposizione:
CondizioneVerificata=Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0
A=0 And B=0: La condizione verificata è vera solo se entrambe le due checkbox non sono selezionate (proprietà .Value=0)
In caso contrario, si salta al blocco che segue l' Else che termina il blocco eseguito in condizione verificata ed apre il blocco da eseguire in caso contrario.

Ragiona un attimo: Tu vuoi che la form non si chiuda nel caso in cui almeno una delle due checkbox non sia pari a 0.
Il codice che il computer eseguirà in quel caso, sarà quello che segue l'else, in quanto la condizione che tu hai specificato non sarà veritiera in quel caso...
LoryOne non è collegato   Rispondi citando
Vecchio 23-06-2009, 10.37.10   #12
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
No la form non si deve chiudere se i valori check1 e check2 sono ENTRAMBI 0. Se uno qualsiasi dei due e' 1 allora si puo' chiudere e salvare magari l'impostazione corrente
Jamester non è collegato   Rispondi citando
Vecchio 23-06-2009, 10.42.15   #13
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Secondo il mio ragionamento:

Quota:
Private Sub Form_Unload(Cancel As Integer)
If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then
Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Else
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0")
Unload Me
End If
Se check1 e check2 sono entrambi 0 quindi chiama la messagebox (e dovrebbe non chiudere la form) altrimenti chiudi la form (con o senza messagebox che alla fine e' inutile l'ho messa sl per prova). Ora logicamente non mi spiego xche anche nel primo caso la chiude lo stesso.

Secondo come ho letto, nn devo metterla in ULOAD ma in QueryUnload in quanto su UNLOAD cmq e' ovvio che la chiude comunque. Pero' anche se l'ho messa in QueryUnload il risultato non cambia. Per la mia logica dovrebbe funzionare per questo nn capisco :anger:
Jamester non è collegato   Rispondi citando
Vecchio 23-06-2009, 10.48.29   #14
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Verifica se si verifica la condizione.
Quanto valgono i due .Value ?
Qual'è il risultato della messa in And ? (Tabella della verità)
LoryOne non è collegato   Rispondi citando
Vecchio 23-06-2009, 11.29.26   #15
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
Verifica se si verifica la condizione.
Quanto valgono i due .Value ?
Qual'è il risultato della messa in And ? (Tabella della verità)
Visto che quando clicco su uno dei 2 check e' presente un pulsante che salva i settaggi cosi al successivo riavvio del programma li ricarica in automatico, se il file di configurazione nn c'e' ho previsto la messagebox che informa che le config nn ci sono e apre la form dei settaggi. Quindi nn essendoci il file configurazione le checkbox sono per logica 0 tutte e 2
Jamester non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
crash e avvio icone desktop lento ? ropa Windows 7/Vista/XP/ 2003 2 21-12-2007 22.05.17
errori eventi: Asw8ttwdffp + Syrforv0tnu bnvale01 Windows 7/Vista/XP/ 2003 13 18-09-2007 15.53.55
Aiutoo! La partizione Documenti fa i capricci! BlackSkull Windows 7/Vista/XP/ 2003 38 12-06-2007 14.01.19
[XP] errori al avvio del sistema LiNk91 Windows 7/Vista/XP/ 2003 3 30-03-2007 22.17.01
Aiuto: attacco hacker sul mio pc? Shambler Sicurezza&Privacy 16 08-06-2005 01.13.52

Orario GMT +2. Ora sono le: 01.21.55.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.