VB6 - Récupérer les valeurs de la souris [Résolu/Fermé]

Signaler
-
 Fenril'Skanenruf -
Bonjour,

Je sollicite votre aide, je cherche à faire un petit programme simple qui permet au click de récupérer dans une form les valeurs X et Y (en twins, ScaldeMode est réglé) du click, de les stocker dans deux variables : vardepX et vardepY
Une fois cela fait, au second click, fait pareil dans les variables : vararrX et vararrY. Puis au deuxième click tracer une ligne allant de (vardepX, vardepY) à (vararrX, vararrY). Voici mon code actuel :

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Private Type POINTAPI
    X As Long
    Y As Long
End Type


Private Sub Form_Click()

If clicking = 0 Then
 vardepx = Me.GetMousePosition.pos.X
 vardepy = Me.GetMousePosition.pos.Y
 clicking = 1
 Exit Sub
 End If
vararrx = Me.GetMousePosition.pos.X
vararry = Me.GetMousePosition.pos.Y
Form1.Line (vardepx, vardepy)-(vararrx, wararry), 8

End Sub

Private Function GetMousePosition() As POINTAPI

Dim pos As POINTAPI
GetCursorPos pos
ScreenToClient Me.hwnd, pos
pos.X = Screen.TwipsPerPixelX * pos.X
pos.Y = Screen.TwipsPerPixelY * pos.Y
GetMousePosition = pos

End Function

Private Sub Form_Load()
clicking = 0
End Sub


J'arrive pas à récupérer les valeurs. La fonction GetMousePosition() que j'ai trouvé sur le net en même temps que le Point API n'indique q'une sortie. Je veux dire avec elle je ne comprend pas trop comment en sortir séparement les X et les Y. Pouvez-vous s'il vous plaît me débugger la partie qui gère les 4 variables (vardepx, vardepy, vararrx et vararry).

Je n'arrive pas à leur attribuer les valeur X et Y du click.
Merci beaucoup d'avance.

7 réponses


UP SVP.
Bonjour,

Pour récupérer la position de la souris dans une Form, moi j'utilise les évènements Form_MouseDown, Form_MouseUp et Form_MouseMove.

Pour tracer une ligne, il y la méthode Line.


A+.

Bonjour Amigo,

Dans l'idée j'ai rien contre mais avec ces évenements comme récupérer les valeurs x et y de la souris ?
Où je l'ai trouve, en fait je veux faire un programme qui au premier clic récupère les valeurs de la souris et les stocke dans 2 variables et ensuite lors du second clic stock dans deux autres variables et avec ces quatre variables (départ de X et Y et fin de X et Y) tracer une ligne.

Comment faire s'i lte plaît ? Peux-tu me montrer le code stp ?

Merci beaucoup !
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 128
Bonjour,
1ère chose a faire, déclarer tes variables au desssus du module
Dim vardepx as integer
Dim vardepy as integer
Dim clicking as integer
Et ta fonction va... Fonctionner.
Sauf que tu doit remettre clicking à 0 au 2ém passage.
Mais amigo a raison, il faut employer les événements souris de la feuille, là tu à directement le X et le Y par rapport à ta forme.
A+
Bonjour,

Exemple de dessin de lignes sur une Form

Ouvre un nouveau projet et place un controle Line (Line1) sur la Form (Form1)

Colle ce code dans le code de la Form et execute

Appuyer sur le bouton1 de la souris et garder appuyé, déplacer la souris et relacher le bouton.

Option Explicit
Dim x1, x2, y1, y2
Dim Btn As Boolean

Private Sub Form_Load()
Me.Line1.Visible = False
Me.AutoRedraw = True
Me.DrawWidth = 3
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1 = X: y1 = Y: Btn = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
x2 = X: y2 = Y
If Btn Then
   With Me.Line1
        .x1 = x1
        .y1 = y1
        .x2 = x2
        .y2 = y2
        .Visible = True
    End With
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
x2 = X: y2 = Y: Btn = False
Me.Line1.Visible = False
Me.Line (x1, y1)-(x2, y2)
End Sub
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 128
Petit exercice.. dessine sur la forme ou tout autre objet qui possède un hdc.
Option Explicit
Const PS_SOLID = 0
Private Type POINTAPI
  X As Long
  Y As Long
End Type
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, _
  ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long

Const Epp = 10

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    DeleteObject SelectObject(Me.hdc, CreatePen(PS_SOLID,  Epp, RGB(0, 255, 0)))
    MoveToEx Me.hdc, X, Y, &H0
End Sub

'Mettre ce code dans Form_MouseUp pour une ligne droite
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button <> 1 Then Exit Sub
    DeleteObject SelectObject(Me.hdc, CreatePen(PS_SOLID, Epp, RGB(0, 255, 0)))
    LineTo Me.hdc, X, Y
    Me.Refresh
End Sub


Nouveau Projet et coller le code dans le module de la forme.
Tant que le bouton de la souris est enfoncé, la ligne suit le curseur.

Merci beaucoup de votre aide, mon problème est résolu.
Grâce à vous j'ai réussi à faire le système de lignes automatiques déjà tracées.
Et j'ai découvert l'utilité des évenements MouseDown, MouseUp et MouseMouve.

Merci.