Sortir d’une boucle Do … Loop
Salut
Je croyais connaître un certain nombre de chose dans la programmation, ou en tout cas je ne pensais pas buter sur un problème comme celui là.
Je ne parviens pas a quitter/finir se programme, il reste toujours en tâche de fond malgré la mise du drapeau ActionCurs à False.
En fait la sortie de la boucle semble bien fonctionner, le Unload aussi, mais dans l’éditeur VB6, il faut que je l’arrête pour entrer effectivement dans le code.
Et le pire, c’est que si je change l’affichage de sortie, du label à la barre de titre du Form, plus de problème.
Quelqu'un saurait il ou je fais une erreur ou cela est il un bug de VB6 ?
Voici une portion de code qui reproduit le phénomène , sur un Form, 2 CommandButton et un Label.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Option Explicit
Private Type POINTAPI
x As Long
y As Long
End Type
'pour lire les coordonnées du deplacement du curseur
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long
Dim ActionCurs As Boolean
Private Sub Form_Load()
Command1.Move 120, 120, 1215, 255: Command1.Caption = "Action"
Command2.Move 1680, 120, 1215, 255: Command2.Caption = "Quitter"
Label1.Move 120, 480, 2715, 255: Label1.Caption = ""
End Sub
Private Sub Command1_Click()
'lire/ne pas lire les coordonnées du deplacement du curseur
ActionCurs = Not ActionCurs
If ActionCurs Then SurveilleCurseur
End Sub
Private Sub SurveilleCurseur()
Dim retval As Long 'retour d'appel à la fonction GetCursorPos
Dim PosCurseur As POINTAPI 'memo des valeurs de recuperation du dernier appel à GetCursorPos
Do
If ActionCurs Then
retval = GetCursorPos(PosCurseur) 'lit la position du curseur, recuperation des coordonnées dans PosCurseur
DoEvents
'Me.Caption = "Horizontal = " & CStr(PosCurseur.x) & " Vertical = " & CStr(PosCurseur.y)
Label1.Caption = "Horizontal = " & CStr(PosCurseur.x) & " Vertical = " & CStr(PosCurseur.y)
Else
Exit Do
End If
DoEvents
Loop
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
'si ActionCurs = true, mettre fin à la boucle de surveillance curseur
If ActionCurs Then ActionCurs = False
End Sub |
Merci de vos expériences.
Motif de l'édit:
UC utilisé quand sortie affichage sur Label = 55 %
sur barre de titre = 99 %
Pour les deux, quand on quitte en cours de surveillance curseur, le programme disparait des applications mais reste en tant que processus dans le gestionnaire de tâches de windows
Aucun problème si on quitte après avoir arrêté la surveillance depuis le programme.
Je vais faire des essais avec un SetTimer/KillTimer