Clic sur un contrôle Shape

[Résolu]
Signaler
Messages postés
48
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
22 juin 2009
-
Messages postés
48
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
22 juin 2009
-
J'ai VB6 et je n'arrive pas à faire une fonction evenementielle de type "nomducontroleshape"_click.
Si je double clique sur un shape il ne me permet pas de faire une fonction evenementielle avec comme un boutton par exemple, quelqu'un pourrait me dire comment faire un fonction evenementielle de clic sur un shape svp ?

10 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
Quand tu double clique sur un CommandButton il y a l'évênement Click qui apparaît, pas l'évênement lui-même bien sûr mais la procédure de l'évênement, tu peux choisir un autre évênement en cliquant en haut à droite, par exemple KeyPress, KeyDown, KeyUp, MouseDown, MouseMove, etc... ou choisir un autre contrôle en cliquant en haut à gauche.
si l'évênement n'apparaît pas c'est qu'il n'existe pas par exemple la Shape n'apparaît même pas dans la fenêtre de droite.
en cours de l'évênement des paramètres peuvent être passés à la procédure, Button, Shift, Index, etc.. dans l'évênement Click on ne trouve aucun paramètre, cet évênement n'est activé que pour le bouton gauche de la souris, donc inutile et même impossible de le tester, il en est pas de même avec l'évênement MouseDown, MouseUp,
MouseMove ce qui nous permet de savoir quel bouton a été pressé

Private Sub Command1_Click()
' place ton code ici
MsgBox "Vous avez pressé le bouton gauche"
End Sub

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then MsgBox "Le bouton droit à été pressé"
If Button = vbMiddleButton Then MsgBox "Le bouton du centre à été pressé"
If Button = vbLeftButton Then MsgBox "Le bouton gauche à été pressé"
If Shift = 1 Then MsgBox " la touche Majuscule a été pressé"
MsgBox "la position de la souris est X=" & X & " Y=" & Y
End Sub

Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 82 internautes nous ont dit merci ce mois-ci

Messages postés
52
Date d'inscription
dimanche 1 décembre 2002
Statut
Membre
Dernière intervention
19 septembre 2007

Lu

Quand tu double clik sur le composant ( que ce soit shape, label ou autre), il y a un évenement qui est choisi qui se situe dans le menu déroulant au dessus a droite de la page de code.

Si tu veux le clik, il te suffit de le changer en le choisissant.

Cordialement

[mailto:R@pt0r R@pt0r]
Messages postés
48
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
22 juin 2009

merci mais mes shapes ne sont pas dans cette liste, commet ca se fait ? je comprend vraiment pas
Messages postés
172
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
4 août 2005

Salut,
C'est marrant, mais avant ta question, je n'avais jamais remarqué la chose :
Manifestement, les contrôles Shape ne gèrent pas d'évènements !
Hihi, je savais pas non plus...
Faudra probablement que tu trouves autre chose...
@+ et bonne prog.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
aucun évênement sur les Shapes, la seule solution est de détecter soi même la position de la souris.

Private Type POINTAPI
X As Long
Y As Long
End Type


Dim x1 As Long
Dim x2 As Long
Dim y1 As Long
Dim y2 As Long


Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


Private Sub Form_Load()
x1 = Shape1.Left
x2 = x1 + ScaleX(Shape1.Width, ScaleMode, vbPixels) - 1
y1 = Shape1.Top
y2 = y1 + ScaleY(Shape1.Height, ScaleMode, vbPixels) - 1
End Sub


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim point As POINTAPI
Dim Xpos As Long
Dim Ypos As Long
If Button = vbLeftButton Then
GetCursorPos point
Xpos = point.X - ScaleX(Me.Left, vbTwips, vbPixels) - 4
Ypos = point.Y - ScaleY(Me.Top, vbTwips, vbPixels) - 34
If Xpos > x1 And Xpos < x2 And Ypos > y1 And Ypos < y2 Then
Shape1.BorderColor = vbRed
Else
Shape1.BorderColor = vbBlack
End If
End If
End Sub

Daniel
Messages postés
48
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
22 juin 2009

Merci Daniel, sinon personne ne connait un contrôle auquel on peut appliquer des fonctions evenementiels de clic gauche et de clic droit ?!
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
n'importe quel contrôle (Frame, TextBox, Image, PictureBox,..) qui ont un évênement MouseDown et où tu peux tester le click de la souris.
If Button = vbLeftButton Then ...
If Button = vbRightButton Then ...
If Button = vbMiddleButton Then ...

Daniel
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
Le shape est un contrôle "static" tout comme le contrôle Line,
c'est-à-dire qu'aucun événement ne lui est lié : il sert juste à la
déco en quelque sorte !



Le plus simple reste de faire ton propre usercontrol qui gère les événements dont tu as besoin.

DarK Sidious

[Administrateur et responsable VB/API du site ProgOtoP]
Messages postés
48
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
22 juin 2009

Je vois ce que tu veux dire Daniel mais j'arrive pas à le mettre en place.

Imaginons j'ai un boutton "Command1", je le fait ou le test que tu indique au dessus ? dans une fonction command1_click ou autre chose ?

merci
Messages postés
48
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
22 juin 2009

ok merci beaucoup j'ai bien compris comment ca marche maintenant !