Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Evénements MouseDown, MouseMove et MouseUp

3 réponses
Avatar
Christophe CAMPAIN
Bonjour à tous,

Je cherche à exploiter les propriétés (Button As Integer, Shift As Integer,
X As Single, Y As Single) des événements MouseDown, MouseMove et MouseUp.


Mon problème est le suivant :

- Soit plusieurs (1 à n) contrôles image disposés sur un formulaire (leur
nombre varie trés fréquement).
- Chaque contrôle image réagi à l'évènement MouseDown pour afficher les
coordonnées X et Y du pointeur de la souris (oui... je sais c'est pas trés
passionant comme action, mais c'est juste un exemple pour modéliser mon
problème...).


Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
MsgBox "X = " & X & " ; Y = " & Y
End Sub

Private Sub Image2_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
MsgBox "X = " & X & " ; Y = " & Y
End Sub

Private Sub Image3_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
MsgBox "X = " & X & " ; Y = " & Y
End Sub
....
Etc... pour tous les contrôles jusqu'au contrôle n
.....
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
MsgBox "X = " & X & " ; Y = " & Y
End Sub


- Comment faire pour créer UNE procédure générique "BoutonSourisAppuyé" ,
valable pour tout contrôle image, du type :

Private Sub MonImageN_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
MsgBox "X = " & X & " ; Y = " & Y
End Sub


Mon orientation actuelle consiste à attribuer une procédure à la propriété
"OnMouseDown" lors de la création de chaque contrôle image (.OnMouseDown =
"=BoutonSourisAppuyé(""" & CtlImg.Name & """)") où CtlImg est le contrôle
image qui viens d'être créé par VBA).

Public Sub BoutonSourisAppuyé(NomContrôleImage as string)
Dim CtlImg as Controls

Set CtlImg = Controls( NomContrôleImage )

........
.........
End Sub

Ca marche trés bien pour des procédures n'utilisant pas les propriétés
(Button As Integer, Shift As Integer, X As Single, Y As Single)
Mais là c'est justement ce que je cherche à utiliser et je ne vois pas
comment récupérer ces propriétés...


Quelqu'un a une piste ?

Par avance merci,

@+
Kristof

3 réponses

Avatar
Xavier HUE
Bonjour Christophe,

Dans ta procédure qui affecte l'évènement:

Dim Mdl As Module

Set Mdl = Forms("FrmAjoutProcCible").Module

Mdl.AddFromString vbCrLf & _
"Private Sub " & CtlImg.Name
& "_MouseDown(" & CtlImg.Name & ", Button As Integer,
Shift As Integer, X As Single, Y As Single)" & vbCrLf & _
" Call TaProc(Button, Shift, X, Y)" &
vbCrLf & _
"End Sub"
Set Mdl = Nothing

et ajoute les paramètres dans ta procédure commune:

Public Sub BoutonSourisAppuyé(NomContrôleImage as string,
Button As Integer, Shift As Integer, X As Single, Y As
Single)

Cordialement.
Avatar
Christophe CAMPAIN
Bonjour Xavier,

Je n'ai pas le temps de tester ça ce soir, mais je m'y met dés demain matin.
D'aprés ce que je comprends de ta procédure, tu programme directement un
module depuis VBA. C'est une technique que je n'ai encore jamais testée, je
te tiens au courant.

Merci pour ton aide,

@+
Kristof

"Xavier HUE" a écrit dans le message de
news:82d501c431e1$5019d790$
Bonjour Christophe,

Dans ta procédure qui affecte l'évènement:

Dim Mdl As Module

Set Mdl = Forms("FrmAjoutProcCible").Module

Mdl.AddFromString vbCrLf & _
"Private Sub " & CtlImg.Name
& "_MouseDown(" & CtlImg.Name & ", Button As Integer,
Shift As Integer, X As Single, Y As Single)" & vbCrLf & _
" Call TaProc(Button, Shift, X, Y)" &
vbCrLf & _
"End Sub"
Set Mdl = Nothing

et ajoute les paramètres dans ta procédure commune:

Public Sub BoutonSourisAppuyé(NomContrôleImage as string,
Button As Integer, Shift As Integer, X As Single, Y As
Single)

Cordialement.
Avatar
Xavier HUE
Pour faire ce que tu souhaites, je ne vois pas d'autre
solution.

J'ai testé l'insertion du code évènementiel, ça marche.

Cordialement.