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 : Sélectionner tout - Visualiser dans une fenêtre à part
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