Gambas France BETA


Pas de compte ? Incription

Exemple 22 :

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 : Calculatrice

Le 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 :



====================