Page 1 sur 1

Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : sam. 22 août 2020 14:53
par Cengokill
Bonjour, j'aimerais pouvoir exécuter une action lorsque je clique sur la touche Entrer dans une InputBox, au lieu de demander à l'utilisateur de cliquer sur un bouton pour valider. J'ai vu qu'apparemment il faut utiliser la fonction GUISetAccelerators, mais je n'arrive pas à comprendre son fonctionnement.
$Form = GUICreate("",500,100,($DesktopWidth-500)/2,($DesktopHeight-300)/2)
$input = GUICtrlCreateInput("",10,35,480,20)
GUISetOnEvent(-1, "InputClick")
Local $aAccelKey[1][2]=[["{ENTER}",???]]
GUISetAccelerators($aAccelKey)
GUISetState(@SW_SHOW)

Merci d'avance !

Re: Touche "Entrer" dans un input : GUISetAccelerators ?  

Posté : sam. 22 août 2020 17:40
par walkson
Bonjour,
ça serait bien de mettre un petit code complet (je ne demande pas non plus 2000 lignes :P ) parce que, ici, on devine que vous êtes en mode événementiel !
cela devrait le faire
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 480, 165, 623, 373)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
Global $Input1 = GUICtrlCreateInput("AZERTY", 80, 24, 177, 21)
Global $Button1 = GUICtrlCreateButton("OK", 320, 24, 81, 33)
GUICtrlSetOnEvent(-1, "Button1Click")
Global $Label1 = GUICtrlCreateLabel("", 80, 80, 174, 25)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Local $aAccelKeys[1][2] = [["{ENTER}", $Button1]]
GUISetAccelerators($aAccelKeys)

While 1
 Sleep(100)
WEnd

Func Button1Click()
   $Data = GUICtrlRead($Input1)
   GUICtrlSetData($Label1,$Data)
EndFunc
Func Form1Close()
   Exit
EndFunc
 

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : sam. 22 août 2020 18:03
par Cengokill
Merci beaucoup !

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : sam. 22 août 2020 18:07
par walkson
En plus simple mais la fonction Input1Click() se déclenche quand l'input perd le focus
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 480, 165)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
Global $Input1 = GUICtrlCreateInput("AZERTY", 80, 24, 177, 21)
GUICtrlSetOnEvent(-1, "Input1Click")
Global $Label1 = GUICtrlCreateLabel("", 80, 80, 174, 25)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Local $aAccelKeys[1][2] = [["{ENTER}", $Input1]]
GUISetAccelerators($aAccelKeys)

While 1
 Sleep(100)
WEnd

Func Input1Click()
   $Data = GUICtrlRead($Input1)
   GUICtrlSetData($Label1,$Data)
EndFunc
Func Form1Close()
   Exit
EndFunc
 

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : sam. 22 août 2020 20:02
par mikell
walkson a écrit : sam. 22 août 2020 18:07 mais la fonction Input1Click() se déclenche quand l'input perd le focus
alors c'est pas bon :P
Si tu veux te passer de bouton, remplace-le par un dummy dans ton 1er code
Global $Button1 = GUICtrlCreateDummy()

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : dim. 23 août 2020 11:24
par TommyDDR
Il est plus propre d'écrire GUICtrlSetOnEvent(-1, Input1Click) plutôt que GUICtrlSetOnEvent(-1, "Input1Click") (mikell confirmera :p)

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : dim. 23 août 2020 12:40
par mikell
Malin Image
Plus propre je sais pas, mais oui ça marche (c.f. discussion récente sur le sujet avec jchd ... quelque part)
L'éternel problème étant que cette syntaxe n'étant pas mentionnée dans le fichier d'aide, elle n'est pas utilisée Image

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : dim. 23 août 2020 14:03
par walkson
D'autant que l'aide indique
GUICtrlSetOnEvent ( controlID, "function" )
mikell a écrit : sam. 22 août 2020 20:02 alors c'est pas bon :P
Si tu veux te passer de bouton, remplace-le par un dummy dans ton 1er code
Global $Button1 = GUICtrlCreateDummy()
Ben ! je répond à la question
j'aimerais pouvoir exécuter une action lorsque je clique sur la touche Entrer dans une InputBox
Certes, ce n'est pas terrible mais c'est une possibilité...
Et puis un dummy ne me semble pas simplifier le code à moins que quelque chose m'échappe (c'est vrai que j'utilise rarement les dummy)

Re: Touche "Entrer" dans un input : GUISetAccelerators ?

Posté : dim. 23 août 2020 17:03
par mikell
walkson a écrit : dim. 23 août 2020 14:03c'est vrai que j'utilise rarement les dummy
C'est pourtant très pratique les dummy :mrgreen:
Ici c'était juste histoire de montrer qu'on pouvait complètement se passer de bouton. Les 2 solutions sont utilisables en fonction de ce qu'on veut