Simuler un clic souris au clavier :
Ou comment donner l'illusion d'enfoncer un bouton en rentrant une valeur au clavier.
Pourquoi , pour le fun et pour le côté esthétique de la chose à l'écran.
Un exemple sur la forge :
CalculatriceLe Code :
Les trois morceaux de code principaux pour obtenir notre pseudo clic.
Une procédure pour modifier l'état de la bordure du bouton pour lequel on veut simuler le clic.
Première difficulté, nous avons plusieurs boutons dont on veut simuler l'enfoncement.
Deuxième difficulté, nous n'avons pas que des boutons sur notre formulaire.
Il va falloir donc faire une sélection appropriée.
Pour cela :Ne pas utiliser Me.Children car nous aurons tous les objets déposés sur le formulaire, il faut se restreindre aux contrôles, avec Me.Controls.
Se limiter au bouton que l'on désire, nous avons deux solutions faciles : le texte rentré sur le bouton, bouton.Text ou son nom, bouton.Name.
Et comme on n'en veut qu'un à la fois, dès qu'on le trouve on Break.
Nous avons, auparavant préparé notre formulaire en composant le nom de chaque bouton par : "btn" & un numéro d'ordre pour nous faciliter la future recherche.
S'agisant d'une calculatrice il est simple de nommer btn7, le bouton portant le chiffre 7.
1
2
3
4
5
6
7
8
9
10
11
12
13
| PRIVATE SUB bascule(ch AS STRING)
DIM btn AS OBJECT '<-----------------------------------------------------------------------------' objet car ça en est un
FOR EACH btn IN ME.Controls '<-------------------------------------------------------------' pour tous ceux que tu trouves ' If Object.Is(btn, "Button") And If btn.Text = ch Then '<-----------------------------' idem phrase suivante IF btn IS Button AND IF btn.Text = ch THEN '<--------------------------------------' si mon objet est un bouton et si son texte est btn.Border = NOT btn.Border '<--------------------------------------------------------' alors on effectue la bascule des bordures BREAK '<---------------------------------------------------------------------------------------' et puisqu'on a trouvé ce qu'on cherche on arrête là ENDIF NEXT
END
|
Le relâchement d'une touche après la saisie :
On utilise la saisie en deux temps pour modifier de suite les bordures de notre bouton,
une première fois lors de l'appui sur la touche désirée et une autre fois lors du relâchement de cette touche
C'est le sens des deux procédures suivantes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| PUBLIC SUB Form_KeyRelease()
DIM ch AS STRING
ch = Key.Text '<---------------------------------' le relâchement renvoie key.Text donc attention aux tests qui doivent faire la même chose que KeyPress
IF Left(System.Language, 2) <> "en" THEN IF ch = "." THEN ch = "," ELSE IF ch = "," THEN ch = "." ENDIF
IF Key.Code = key.Return OR Key.Code = key.Enter THEN ch = "=" IF Key.Code = Key.Backspace OR Key.Code = Key.Delete THEN ch = " " '<-------' il s'agit d'un espace car le bouton est équipé d'une image.
bascule(ch) '<---------------------' appel de bascule, pour la deuxième fois
END
|
L'appui sur une touche, pour saisie :
Ici nous avons deux collections , une pour les chiffres de notre calculatrice, et une pour les signes d'opérations.
En fonction du symbole saisie au clavier, nous envoyons l'information
à la procédure bascule et à la procédure keyRelease,
qui vont modifier l'état des bordures du bouton pour simuler l'enfoncement du dit bouton.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| PUBLIC SUB Form_KeyPress() '<----------------------------------------' saisie au clavier
DIM vText AS VARIANT DIM cChiffres AS String[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "."] DIM cSignes AS String[] = ["+", "-", "*", "x", "/", "^", Chr(92)]
vText = Key.Text '<----------------------------------------------' touche pressée
IF Left(System.Language, 2) <> "en" THEN '<----------------------' localisation Europa IF vText = "." THEN vText = "," ELSE IF vText = "," THEN vText = "." ENDIF
IF Key.Code = key.Return OR Key.Code = key.Enter THEN vText = "=" bascule(vText) '<--------------------' appel de bascule btnEgal_Click() ENDIF
IF Key.Code = Key.Esc THEN btnCancel_Click()
IF Key.Code = Key["c"] AND IF Key.Shift THEN bascule(vText) '<--------------------' appel de bascule btnCancel_Click() ENDIF
IF Key.Code = Key.Backspace OR Key.Code = Key.Delete THEN vText = " " bascule(vText) '<--------------------' appel de bascule btnEffacer_Click() ENDIF
IF cChiffres.Exist(vText) THEN '<-------------------------------' chiffres LAST.text = vText bascule(vText) '<--------------------' appel de bascule Chiffres_Click() ENDIF
IF cSignes.Exist(vText) THEN '<-------------------------------' signes LAST.text = vText bascule(vText) '<--------------------' appel de bascule Signes_Click() ENDIF
IF NOT cSignes.Exist(Key.Text) OR NOT cChiffres.Exist(Key.Text) THEN STOP EVENT '<--- signes et chiffres autorisés
ME.Text = ("Calculatrice ") '<-----------------------------------' pas afficher vText dans le titre du formulaire IF Key.Code = Key["q"] AND IF Key.Shift THEN ME.Close()
CATCH Message.Error(Str(Error.Class) & ", code : " & Error.Code & ", " & Str(Error.Backtrace) & " à " Error.Wher " | Error.Text)
END
|
Touche relâchée puis enfoncée :
<--------->
====================
Navigation :
<-- Liens du Wiki : <--<-- Accueil du WIKI : <-- ====================
Documentation :
====================