Simulation d'un click de souris sur un bouton ReyCommand

[Résolu]
Signaler
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
-
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
-
Salut à tous

Comment simuler un click de souris sur un bouton ? (Je veux qu'un évennement Validate d'un TextBox le déclenche)..
Le bouton est en fait un bouton ReyCommand..

J'ai fais le même travail avec un Bouton ordinaire :

' Dans le module
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const BM_SETSTATE = &HF3

' Puis..
Private Sub Text1_Validate(Cancel As Boolean)
    SendMessage cmdEnvoi.hwnd, BM_SETSTATE, 1, 0
    Sleep 10
    SendMessage cmdEnvoi.hwnd, BM_SETSTATE, 0, 0
End Sub

 
Mais avec le ReyCommand (Rey_XpBasics.ocx), il parait que c'est plus compliqué car il y avait beaucoup de messages à envoyer et non pas juste BM_SETSTATE(j'ai utilisé Spy++)..

J'ai pas réussi à envoyer ces messages alors je pose cette question :
Est-ce qu'on envoyer à ce bouton "un click puis un relâchement sur la touche ESPACE" tout simplement?

13 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
umm... ouai. c'est juste le meilleur moyen de prendre de mauvaises habitudes voire de renoncer parce qu'on arrive pas à faire qqc qui en fait être simple

bref vicosta a aussi proposé une solution qui est bonne

une autre est de répérer la position du bouton en fonction de l'écran (ClientToScreen), de déplacer ta souris dessus + 10*10 (SetCursorPos), et de générer un click (mouse_event)
évidemment penser à récupérer la position de la souris AVANT (GetCursorPos) pour la repositionner ensuite
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
ps : l'init de P est inutile, ClientToScreen s'en charge
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Et pourquoi pas simplement :
Call cmdEnvoi_Click

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
ça va plaire plus à ma petite amie

Je plaisante.. D'abord merci pour votre réponse rapide.
Je suis débutant et l'opérateur qui va travailler sur l'application que je construis l'est aussi :
Moi je veux apprendre d'avantage, un homme sage m'a dit une fois : "pour mieux apprendre, ne suis pas le chemin simple !", et l'opérateur va aimer voir le bouton surjir..
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
J'ai rien compris.
Pas grave ...
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
"et l'opérateur va aimer voir le bouton surjir.."



Ca changera de voir Zorro surgir du fond de la nuit !

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

"pour mieux apprendre, ne suis pas le chemin simple !",


pourkoi compliquer quand on peut faire simple ?





cmdEnvoi.SetFocus
SendKeys " "

S'il s'agit d'un handle d'un boutton situé dans un autre programe, il existe aussi l'API PutFocus
PS: je n'ai pas encore essaié sur un boutton  ReyCommand
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

çà remet toute la conception de prog en compte alors....

comment faire un if sans if? une addition sans +? lancer une fenêtre sans load ni show?

tu codes pour un résultat, pour apprendre, mais surement pas pour en mettre plein la vue à un gars "aussi bon que toi" en copiant une réponse de forum, si?

enfin ce que j'en dis....

bon courage, il va t'en falloir

ps : et faut coder uniquement avec notepad, trop facile avec l'IDE sinon ^^
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
Salut et merci pour les réponses,

Ce que je cherche n'est un code tout fait, j'insiste sur ce point.

Vous m'avez mal compris : je ne cherche pas à compliquer les choses, peut être j'ai donné cette impression. Mais la vérité j'ai pensé que, en choisissant la méthode compliquée, je vais apprendre plus.

Je peux tout simplement faire comme l'a dit Jack, mais comme je suis débutant, j'opte pour mon idée, car comme ça je vais utiliser les API, connaitre plus sur les messages Windows... Je préfère implémenter votre idée Jack par choix et non pas par soucie de simplicité..

Enfin, j'espère été bien expliqué et merci encore pour vos réponses
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
Merci infiniment !!!
Je suis impatient de l'essayer !

et vous savez quoi, "...voire de renoncer parce qu'on arrive pas à faire qqc qui en fait être simple". Vous avez raison
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
Enfin, j'ai essayé comme suit :

Private Sub txtID_KeyPress(KeyAscii As Integer)
    ' Si la touche pressée est ENTREE
    If KeyAscii = 13 Then
        ' On sauvegarde la position actuelle de la souris
        Dim currentPos As POINTAPI
        GetCursorPos currentPos
        ' On déplace la souris
        Dim P As POINTAPI
        P.x = 0
        P.y = 0
        ClientToScreen cmdEnregistrer.hwnd, P
        SetCursorPos P.x + 10, P.y + 10
        ' On simule un click de souris
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        Sleep 500
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
        ' Retour à la position précédente
        SetCursorPos currentPos.x, currentPos.y 
    End If
   
End Sub

Tout fonctionne très bien sauf la simulation graphique d'un clique de souris..
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&)
Call Sleep(200)
DoEvents




<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
18
Merci encore !