Clic sur un contrôle Shape

Résolu
loic38760 Messages postés 48 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 22 juin 2009 - 8 janv. 2005 à 17:39
loic38760 Messages postés 48 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 22 juin 2009 - 9 janv. 2005 à 12:07
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

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 janv. 2005 à 11:55
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
cs_castor62 Messages postés 52 Date d'inscription dimanche 1 décembre 2002 Statut Membre Dernière intervention 19 septembre 2007
8 janv. 2005 à 18:09
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]
0
loic38760 Messages postés 48 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 22 juin 2009
8 janv. 2005 à 18:22
merci mais mes shapes ne sont pas dans cette liste, commet ca se fait ? je comprend vraiment pas
0
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 4 août 2005
8 janv. 2005 à 19:01
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
8 janv. 2005 à 19:20
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
0
loic38760 Messages postés 48 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 22 juin 2009
8 janv. 2005 à 19:27
Merci Daniel, sinon personne ne connait un contrôle auquel on peut appliquer des fonctions evenementiels de clic gauche et de clic droit ?!
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
8 janv. 2005 à 19:37
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
8 janv. 2005 à 19:38
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]
0
loic38760 Messages postés 48 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 22 juin 2009
9 janv. 2005 à 11:07
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
0
loic38760 Messages postés 48 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 22 juin 2009
9 janv. 2005 à 12:07
ok merci beaucoup j'ai bien compris comment ca marche maintenant !
0
Rejoignez-nous