Unload Me

Résolu
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010 - 22 sept. 2010 à 18:41
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010 - 23 sept. 2010 à 08:26
Bonjour,

J'ai une application qui utilise des fenêtres filles à partir d'une fenêtre mère.
Je voudrai pouvoir fermer les fenêtres filles au bout d'un certain temps d'inutilisation et revenir sur la fenêtre mère.
J'ai donc utiliser un timer et j'initialise le temps à chaque événement sur les fenêtres filles. Ainsi si les fenêtres filles ne sont plus utilisées, elles se ferment :

Private Sub Timer1_Timer()
If Timer > DébutTemps + 10 Then
Timer1.Enabled = False
Unload Me
End If
End Sub

MAIS !!!!!!
Mais en fait la fenêtre fille continue de fonctionner en arrière plan. Je le sais car elles utilisent du son et que j'entends à intervalles réguliers le son. Je ne comprends pas car je pensais que Unload désactivait complètement les fenêtres...

Quelqu'un peut m'aider ?
Merci

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 sept. 2010 à 04:54
lecture rapide, Erreur classique...

Unload Me
Timer1.Enabled = False

decharge la feuille
mais manipule le controle Timer1 (ou Label2 qqs lignes plus bas)
tiens, ma feuille est dechargee, on ne peut pas acceder au controle ? pas grave, on va recharger la feuille, en ce cas... sans la rendre visible, juste un Load, hein ^^

en clair, INTERDIT de manipuler un controle de la form si tu viens de la decharger, sous peine de la recharger

se trouve direct avec un point d'arret dans le Form_load, qui sera de nouveau appele...


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
22 sept. 2010 à 19:30
Bonjour,

Unload décharge la fenêtre, oui, mais si il y a encore des boucles en cours, elle n'est pas déchargée de suite (elle attend qu'il y ait aucune utilisation de la form pour ça.

Comment tu génère le son ?

Mon site
0
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010
22 sept. 2010 à 19:34
Ce qui est bizarre, c'est que le son ne devrait se générer que lorsque la fenêtre est activée ! Or je la désactive...
Il s'agit d'un son généré par un objet text to text : say.speak("blabla...").
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
22 sept. 2010 à 20:38
Comment est appelé le code de génération du son, dans quelle procédure (avec le code éventuellement) ?

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010
22 sept. 2010 à 20:54
Dim NbTour, Tour, Note As Integer
Dim Taille As Integer
Dim Vect(300) As String
Dim Choix, Compteur As Integer
Dim Rep, Répertoire As String
Dim DébutTemps As Single

Private Sub form_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)

If x 0 And y 0 Then Unload Me
End Sub
Private Sub Timer1_Timer()

If Timer > DébutTemps + 10 Then
Unload Me
Timer1.Enabled = False
Timer1.Interval = 0

End If
Label2.Caption = CStr(DébutTemps + 10) + " " + CStr(Timer)
End Sub
Private Sub Form_Load()
Dim VectMélange(100) As String

Timer1.Enabled = True
DébutTemps = Timer
NbTour = 20
Tour = 0
Note = 0
Répertoire = App.Path
''''''''''''''''''''''''''''''''''''
' Lancer le calculateur pour la ProgressBar
'''''''''''''''''''''''''''''''''''''
Call CalProgBar

Label2.Caption = Titre + " " + NomFichier + " " + NomEleve + " : " + CStr(Note) + " / " + CStr(Tour)
Me.Caption = Titre + "Apprendre les sons - " + NomFichier
'chercher le répertoire du fichier mots outils
'Open App.Path + "\paramètre.txt" For Input As #1
' Do While Not EOF(1)
' Input #1, Répertoire
' Loop
'Close #1

' choisir les NbTour premiers sons dont la valeur de réussite est <3
Taille = 0
Open Répertoire + "" + NomEleve + "combi.txt" For Input As #1
Do While Not EOF(1)
Taille = Taille + 1
Input #1, Son, Valeur
If CVar(Valeur) < 3 Then
Vect(Taille) = Son
Else
Taille = Taille - 1
End If
If Taille = NbTour Then Exit Do
Loop
Close #1

' préparer le vect de jeu
' on mélange le vecteur.
n = 1
Do While n <> 10
Randomize
Choix = Int((Taille * Rnd) + 1)
a = 1
For i = Choix To Taille
VectMélange(a) = Vect(i)
a = a + 1
Next i
For i = 1 To Choix - 1
VectMélange(a) = Vect(i)
a = a + 1
Next i
n = n + 1
Loop
For i = 1 To Taille
Vect(i) = VectMélange(i)

Next i

List1.Clear
Compteur = 1
Me.Caption = Titre + "Apprendre les sons - " + NomEleve + " " + CStr(Note) + " / " + CStr(Taille)
Call Jeu
End Sub
Public Sub Pause(Temps As Integer)
''''''''''''''''''''''''''''''''''''
' METTRE LE PROGRAMME EN PAUSE '''''
'''''''''''''''''''''''''''''''''''
Start = Timer ' Définit l'heure de début.
Do While Timer < Start + Temps ' pause de 5 secondes
DoEvents ' Donne le contrôle à d'autres
' processus.
Loop
''''' FIN DE LA PAUSE ''''''''''''''
''''''''''''''''''''''''''''''''''''
End Sub
Private Sub Jeu()
Dim Trouve As Boolean
Dim VectRep(50) As String
Label2.Caption = Titre + " " + NomFichier + " " + NomEleve + " : " + CStr(Note) + " / " + CStr(Tour)

VectRep(1) = ""
' choisir les distracteurs

'remplir un vect de distracteurs
m = 1
For k = 1 To Compteur - 1 '2 pour enlever le vect(compteur) qui est la réponse
VectRep(m) = Vect(k)

m = m + 1

Next k

For k = Compteur + 1 To Taille '2 pour enlever le vect(compteur) qui est la réponse
VectRep(m) = Vect(k)

m = m + 1

Next k

'choisir parmi les distracteurs 4 choix en les enlevant au fur et à mesure du vecteur

m = Taille - 1
For i = 1 To 5
Randomize
Choix = Int((m * Rnd) + 1)
Label1(i - 1).Enabled = True
Label1(i - 1).Caption = VectRep(Choix)
' revaluer le vecteur des distracteurs en enlevant le choix
n = 1
For l = 1 To m
If l <> Choix Then
VectRep(n) = VectRep(l)
n = n + 1

Else

End If
Next l
m = m - 1

Next i

' choisir l'emplacement de la réponse
Randomize
Choix = Int((5 * Rnd))
Label1(Choix).Caption = Vect(Compteur)
Say.Speak (Vect(Compteur) + ".")

Compteur = Compteur + 1
End Sub

Private Sub Label1_Click(Index As Integer)
DébutTemps = Timer
' bloquer toutes autres réponses
For i = 0 To 4
Label1(i).Enabled = False
Next i
' test pour la fin du jeu
If Compteur - 1 = Taille Then
Say.Speak ("Tu as terminé ton travail. Tu continueras la prochaine fois.")
MsgBox (CStr(Note + 1) + " / " + CStr(Taille))
Tour = 0
Note = 0
Unload Me
Exit Sub
End If
' test pour une réponse positive et valuation de la valeur du son
If Label1(Index).Caption = Vect(Compteur - 1) Then
Say.Speak (Réponse("oui"))
Note = Note + 1
Call ValuerLeSon(Vect(Compteur - 1))
Pause (3)
Else
Say.Speak ("Non." + Vect(Compteur - 1) + ", c'est ça. Regarde !")
List1.AddItem Vect(Compteur - 1)
For i = 0 To 4
Label1(i).Caption = Vect(Compteur - 1)
Next i
Taille = Taille + 1
Vect(Taille) = Vect(Compteur - 1)
Pause (4)
End If
Tour = Tour + 1
Me.Caption = Titre + "Apprendre les sons - " + NomEleve + " " + CStr(Note) + " / " + CStr(Taille)
Call CalProgBar
Call Jeu

End Sub
Private Sub ValuerLeSon(Son As String)
Dim Valeur, Comb As String

Open Répertoire + "" + NomEleve + "trans.txt" For Output As #2
Open Répertoire + "" + NomEleve + "combi.txt" For Input As #1
Do While Not EOF(1)
Input #1, Comb, Valeur
If Comb = Son Then
Valeur = Valeur + 1
End If
Write #2, Comb, Valeur
Loop
Close #1
Close #2

' Retransférer
Open Répertoire + "" + NomEleve + "trans.txt" For Input As #2
Open Répertoire + "" + NomEleve + "combi.txt" For Output As #1
Do While Not EOF(2)
Input #2, Comb, Valeur
Write #1, Comb, Valeur
Loop
Close #1
Close #2
End Sub
Private Sub CalProgBar()
Dim Max, Min, Nbitem, Poucentage As Integer
' Lancer le calculateur pour la ProgressBar
'''''''''''''''''''''''''''''''''''''

' Calculer le nb max d'item et le nb d'items réussis
Max = 0 'pour calculer le nombre total d'items
Nbitem = 0
Open Répertoire + "" + NomEleve + "combi.txt" For Input As #1
Do While Not EOF(1)
Max = Max + 1
Input #1, Son, Valeur
If CVar(Valeur) < 2 Then
Else
Nbitem = Nbitem + 1
End If
Loop
Close #1

' calculer le pourcentage de réussite
Pourcentage = Int((Nbitem * 10) / Max)

If Nbitem > Max - 2 Then 'cas de fin de fichier
Poucentage = 11
MsgBox ("TU AS TERMINE TOUS LES SONS DU CP")
Say.Speak ("Bravo. Tu as terminé tous les sons du CP.")
End If

' colorier la progbar en fonction du pourcentage
For i = 0 To Pourcentage - 1
Prog(i).BackColor = vbRed
Next i

End Sub
Private Sub Quit_Click()
Unload Me
End Sub

Private Sub Say_ClickIn(ByVal x As Long, ByVal y As Long)
Say.Speak (Vect(Compteur - 1) + ".")
End Sub
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
22 sept. 2010 à 21:36
Bonjour,

Erreur classique :
Dim NbTour, Tour, Note As Integer
NbTour et Tour sont des Variant, pas des Integer

ensuite, sur les systère récent, on préfère utiliser des Long(32bits) aux Integer(16bits).

Tu aurais pu utiliser la coloration syntaxique fournie pas le forum, ça serait plus simple à lire.

Pas besoin de Call pour appeler les subs.

Dsl, je ne vois pas de manière directe.

Après ton Unload Me, tu presses les touches Ctrl+ScrollLock, ça stoppera ton programme, et tu pourra voir où tu es.
Ensuite, tu utilises F8 pour faire un pas à pas et voir où tu va dans le code.
Tu peux aussi regarder la pile des appels.

Mon site
0
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010
22 sept. 2010 à 21:41
Merci

pour les integer je vais les changer, mais ça fonctionne.

pour mon unload je vais regarder ....

merci
0
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010
23 sept. 2010 à 07:48
j'essaye cela
merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 sept. 2010 à 08:11
faire donc :

Unload Me
Exit Sub

par exemple

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
SylvainContrie Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 23 septembre 2010
23 sept. 2010 à 08:26
Merci beaucoup pour votre temps et vos compétences

ça fonctionne !!! euréka.
bonne journée
0
Rejoignez-nous