Page 1 sur 1
[R] Touche Enter avec la validation de control input
Posté : dim. 04 déc. 2011 15:41
par jl56
Bonjour à tous
Je ne vois pas comment rendre sensible la touche entrer sur un control input
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124)
Global $Input1 = GUICtrlCreateInput("Input1", 84, 108, 205, 21)
Global $Button1 = GUICtrlCreateButton("Button1", 140, 188, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0,"test via le button",GUICtrlRead($Input1),10)
Case $Input1
MsgBox(0,"test via input",GUICtrlRead($Input1),10)
EndSwitch
WEnd
Voila lors d'une saisie dans un contrôl input, je voudrais déclenché une action seulement lors de l'appui sur la touche enter.
et aucune action si c'est une autre touche comme une tabulation ou lorsque l'on quitte le champ avec la souris ou si l'on quitte la gui.
exactement comme l'action sur le button
Je sais pas si cela est possible
Merci de votre aide
A+ JL56
Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 18:09
par mikell
Kek chose comme ça alors ?
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124)
Global $Input1 = GUICtrlCreateInput("Input1", 84, 108, 205, 21)
Global $Button1 = GUICtrlCreateButton("Button1", 140, 188, 75, 25)
Global $dummy = GUICtrlCreateDummy()
Dim $AccelKeys[1][2]=[["{ENTER}", $dummy]]
GUISetAccelerators($AccelKeys)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $dummy
$a = GUIGetCursorInfo($Form1)
If $a[4] = $input1 Then MsgBox(0,"test via ENTER","Tu as pressé la touche Enter ! ",10)
Case $Button1
MsgBox(0,"test via le button",GUICtrlRead($Input1),10)
EndSwitch
WEnd
PS merci à Iste qui fighte à mort pour GUISetAccelerators

Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 18:27
par jl56
Bonjour mikell
Peut être mais la cela ne marche pas chez moi
lorsque j'appuis sur entrer e tous en étant dans le champ du control input ,rien ne ce passe
Merci de votre aide
JL56
Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 18:42
par Ahbadiane
Bonsoir,
Une solution trouvée sur le site anglais
ici
Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 19:08
par mikell
Ahbadiane a écrit :Une solution trouvée sur le site anglais
ici
Super, GUISetAccelerators avec un dummy... comment n'y ai-je pas pensé ?
Je préfère la vérification du hover plutôt que du focus qui demande qu'on clique sur l'input
Bizarre chez moi ça marche... d'autres testeurs ?
Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 19:13
par jl56
@mikell et @Ahbadiane
Merci à vous deux j'ai fait un mixte et ça fonctionne
@mikell votre script ne fonctionne que si la souris est positionnée sur le champ
avec le script trouvé sur le forum anglais par Ahbadiane on test le control actif
et la ça marche merci encore
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("Form1", 623, 442, 192, 124)
Global $Input1 = GUICtrlCreateInput("Input1", 84, 108, 205, 21)
Global $Button1 = GUICtrlCreateButton("Button1", 140, 188, 75, 25)
Global $dummy = GUICtrlCreateDummy()
Dim $AccelKeys[1][2]=[["{ENTER}", $dummy]]
GUISetAccelerators($AccelKeys)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $dummy
If _GuiCtrlGetFocus($Form1) = $input1 Then MsgBox(0,"test via ENTER","Tu as pressé la touche Enter ! ",10)
Case $Button1
MsgBox(0,"test via le button",GUICtrlRead($Input1),10)
EndSwitch
WEnd
Func _GuiCtrlGetFocus($hGui = "")
Local $InputID = ControlGetHandle($hGui, "", ControlGetFocus($hGui))
Return _ControlGetGuiID($InputID)
EndFunc ;==>_GuiCtrlGetFocus
Func _ControlGetGuiID($hCtrl)
Local $Result = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hCtrl)
If @error = 0 Then Return $Result[0]
Return SetError(1, 0, '')
EndFunc ;==>_ControlGetGuiID
Par contre je ne comprend pas comment ça fonctionne, est ce que vous pouvez, SVP, m'expliquer les lignes suivantes. Merci
Code : Tout sélectionner
Global $dummy = GUICtrlCreateDummy()
Dim $AccelKeys[1][2]=[["{ENTER}", $dummy]]
GUISetAccelerators($AccelKeys)
A+ JL56
Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 19:31
par mikell
jl56 a écrit :.... et aucune action si c'est une autre touche comme une tabulation ou lorsque l'on quitte le champ avec la souris
jl56 a écrit :@mikell votre script ne fonctionne que si la souris est positionnée sur le champ
Ben faut savoir ce que vous voulez... je fais ce qu'on demande moi ^^
Encore une question posée de façon pas assez Claire...
Regardez dans l'aide : on crée un controle bidon (dummy) et avec GUISetAccelerators on lui attribue une hotkey (enter)
En pressant la hotkey on active le dummy et on execute le 'Case $dummy'
Re: [..] touche enter avec la validation de control input
Posté : dim. 04 déc. 2011 20:47
par jl56
@mikell
Merci pour ces explications j'avais bien regardé l'aide mais je n'arrivais pas a interpréter en français claire
j'avais notamment bien vue l’accélérateur mais manifestement mon cerveau avais du mal a embrayer.
Pour la souris, je voulais dire lorsque que l'on quitte le champ vers par exemple un autre control (input)
mais comme dans mon exemple il n'y en avait qu'un, je comprend votre confusion. mille excuses
grâce à votre aide je passe en résolu
Merci à vous deux
A+ JL56