Gambas France BETA


Pas de compte ? Incription

click au clavier ?

Ce sujet est résolu.

123
AuteurMessages
valaquarus#1 Posté le 25/2/2023 à 15:14:55
-- Unus Ex Altera --Bonjour à tous,
une question que je n'arrive pas à résoudre et je suis certain que c'est de l'ordre du simple.
Comment faire pour enfoncer un bouton d'un formulaire par l'appui sur le clavier, pour simuler le _click() par la souris?
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#2 Posté le 25/2/2023 à 17:48:48
Bonsoir,
Il suffit de mettre dans la propriété Text un & devant la lettre que l'on veut, un "&ok" réagira lorsque on fera un ALT + o.
valaquarus#3 Posté le 25/2/2023 à 18:01:29
-- Unus Ex Altera --Merci Patrick,
mais en fait ce n'est pas exactement ce que je voulais faire.
Je voudrais récupérer l'action sur un bouton pour simuler le _Click() par le clavier
comme si j'avais cliqué avec la souris, un bouton portant le chiffre 7 mais en tapant 7 au clavier.
C'est juste pour un rendu visuel, je voudrais que le bouton s'enfonce comme lors du click avec la souris.
Valaquarus
J'avais essayé avec ça mais je ne récupère rien du tout :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUBLIC SUB Action_Activate(sKey AS STRING) AS BOOLEAN

DIM cAction AS Variant[] = [btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnVirgule, btnAddition, btnMultiplication, btnDivision, btnPuis]
DIM i AS INTEGER

FOR i = 0 TO 14
SELECT sKey
CASE cAction[i]
' Action[cAction, Me].Value = False
Action.Raise(cAction[i])
END SELECT

NEXT

END
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
Patrick#4 Posté le 25/2/2023 à 18:18:28
A voir si :
1
2
cAction[i].setfocus
Desktop.SendKeys("[Return]")
valaquarus#5 Posté le 25/2/2023 à 19:08:09
-- Unus Ex Altera --y veut pas de
1
cAction[i].setfocus

quant au desktop il faut ajouter gb.Desktop et en plus cela ne fait rien.
J'en suis là :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PUBLIC SUB Action_Activate(sKey AS STRING) AS BOOLEAN

DIM cObjet AS Object[] = [btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnVirgule, btnAddition, btnMultiplication, btnDivision, btnPuis]
DIM cAction AS String[] = ["btn0", "btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btn8", "btn9", "btnVirgule", "btnAddition", "btnMultiplication", "btnDivision", "btnPuis"]
DIM i AS INTEGER

FOR i = 0 TO 14
SELECT sKey
CASE cAction[i]
cObjet[i].setfocus
' Action[cAction[i], Me].Enabled = True
' Action[cAction[i], Me].Value = True
Action[cAction[i], ME].Raise(cObjet[i])
' Action.Raise(cObjet[i])
END SELECT

NEXT

END


Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#6 Posté le 25/2/2023 à 20:05:24
Valaquarus,
Une petite précision :
Le clic ainsi simulé est il simulé pour un seul widget?

Car si tu veux par exemple cliquer sur le bouton Btn7 lors de l'appuie sur 7, j'écris simpement dans l'évènement Keypress:

1
2
3
IF Key.code = Chr(37) THEN '37 correspond au code ASCII du chiffre 7
Btn7_Click()
ENDIF


Mais bon je pense que tu parlais d'un clic général non?
valaquarus#7 Posté le 25/2/2023 à 20:26:22
-- Unus Ex Altera --Ton exemple est beau et simple mais j'ai créé un group pour mes chiffres de 0 à 9 et je n'ai plus qu'un seul click global mais dans l'absolu cela pourrait convenir.
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#8 Posté le 25/2/2023 à 22:15:20
-- Unus Ex Altera --En fait ton exemple fonctionne mais ne simule pas visuellement l'appui sur le bouton hors c'est ce que je veux obtenir.
Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#9 Posté le 25/2/2023 à 22:26:27
-- Unus Ex Altera --J'essaye ça qui fonctionne mais ne fait toujours pas l'enfoncement visuel du bouton :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)]


DIM cAction AS String[] = ["btn0", "btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7", "btn8", "btn9"]
DIM cObjet AS OBJECT = [btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9]
DIM i AS INTEGER

vText = Key.Text

IF cChiffres.Exist(vText) THEN
LAST.text = vText
IF cAction.Exist("btn" & vText) THEN
i = cAction.Find("btn" & vText)
Action[cAction[i], ME].Raise(cObjet[i])
ENDIF
Chiffres_Click() '<----------------------------' group pour les chiffres
ENDIF

END


Il n'y a pas d'erreur mais ce n'est pas ce que je voudrais obtenir visuellement, le chiffre rentré au clavier s'affiche bien mais le bouton ne s'enfonce pas comme sur un clique souris.

Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
valaquarus#10 Posté le 26/2/2023 à 12:59:25
-- Unus Ex Altera --Ceci fonctionne aussi sauf que cela casse le click à la souris :
1
2
3
4
5
6
7
8
9
10
11
12
PUBLIC SUB Action_Activate(sKey AS STRING) AS BOOLEAN

SELECT sKey
CASE "Achiffres"
Chiffres_Click()
CASE "Asignes"
Signes_Click()
CASE "Amemoire"
Memoire_Click()
END SELECT

END


Que l'on appelle (pour les chiffres) par :

1
2
3
4
5
IF cChiffres.Exist(vText) THEN
LAST.text = vText
Action["Achiffres", ME].Value = TRUE
' Chiffres_Click()
ENDIF

Si on a attribué une action nommée Achiffres à tous les chiffres.
Comme le dit la documentation officielle

Valaquarus

Ou bien, alors :
1
2
3
4
5
6
IF cSignes.Exist(vText) THEN
LAST.text = vText
Mouse.Move(LAST.x, LAST.y)
LAST.SetFocus
Signes_Click()
ENDIF


Mais c'est comment qu'on clique ??

Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#11 Posté le 26/2/2023 à 16:19:11
Valaquarus,
Ne le dis à personne mais j'ai une fausse astuce pour toi qui marche pas mal : :joker:

Joues avec la bordure comme ceci, tu verras c'est bleuffant :

Si tu veux pseudo cliquer le bouton 7 à partir du code voici la méthode :

1
2
3
4
5
6
7
8
9
10
11
PRIVATE SUB IllusionDuClicBtn7()
Btn7.Border = FALSE
WAIT 0.1
Btn7.Border = TRUE
Btn7_Click()
END


PUBLIC SUB Btn7_Click()
'.....le code du bouton 7
END


:lol: :lol:
valaquarus#12 Posté le 26/2/2023 à 16:49:02
-- Unus Ex Altera --J'ai fait ça pour utiliser le group :
1
2
3
4
5
6
7
8
PRIVATE SUB illusionClick(bouton AS OBJECT)

bouton.Border = FALSE
WAIT 0.1
bouton.Border = TRUE
Chiffres_Click()

END


c'est pas beau car le focus n'arrête pas de se balader où il veut.
Mais j'aime bien l'idée.

Mais en fait j'avais pas fait attention à la console :
gb.qt5: warning: calling the event loop during a keyboard event handler is ignored

Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#13 Posté le 26/2/2023 à 18:40:39
Valaquarus,
Je pense plutôt à une commande externe à gb genre :


1
SHELL "xdotool click 1"


Yes of course...
:geek: :geek:
valaquarus#14 Posté le 26/2/2023 à 19:47:30
-- Unus Ex Altera --Apparemment je ne sais m'en servir :
1
SHELL ("xdotool click 1") WAIT

et rien ne se passe pourtant ça correspond bien aux pages man.

En fait ça marche si je déplace la souris sur le bon control button.
Maintenant je ne sais pas déplacer la souris sur le bon control button par le code.
Avec Mouse.Move(x,y) c'est bon mais comment je retrouve x et y pour le control Button 7 ou 3 ou ...

Valaquarus
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5
spheris#15 Posté le 27/2/2023 à 08:53:14
Je dirais avant ton xdotool
1
Mouse.Move(bt7.ScreenX+5,bt7.ScreenY+5)

pour aller dans le bouton,
(tu peux même le vérifier en mettant un print dans l'évènement ENTER du bouton).

;)
123