Page 1 sur 1
Changement d'une valeur dans un input
Posté : sam. 01 avr. 2017 20:25
par CrashOv3r
Bonjour,
J'aimerai savoir si c'est possible de détecter le changement d'une valeur dans un input.
Je m'explique, j'ai une GUI avec un label et un input. Et lorsque j'y insère une nouvelle valeur, j'aimerai appliquer une fonction pour faire un calcul.
Du style, si je tape "2" dans l'input, je veux qu'automatiquement le label m'affiche le résultat retourné par une fonction appelée.
Je veux que la fonction soit appelé automatiquement sans devoir cliquer sur un bouton ou autre, je veux qu'elle soit appelée à chaque fois que je tape une valeur dans l'input.
Est ce possible ?
merci
Cordialement.
Re: Changement d'une valeur dans un input
Posté : sam. 01 avr. 2017 23:54
par marcgforce
Bonsoir,
je te dirai que OUI, simplement il faut faire lire la valeur dans le while 1 :
#include <EditConstants.au3>#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=$Form1 = GUICreate("Exemple", 344, 174, 315, 180)$Label1 = GUICtrlCreateLabel("Entrez une valeur", 40, 24, 87, 17)$Label2 = GUICtrlCreateLabel("valeur x 10", 40, 60, 87, 17)$input2 = GUICtrlCreateInput("", 144, 60 , 87, 17)$Input1 = GUICtrlCreateInput("", 144, 24, 129, 21)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $var=GUICtrlRead($Input1) guictrlsetdata($input2, $var * 10) sleep(100) ; moins de conso processeur ! $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitchWEnd
Re: Changement d'une valeur dans un input
Posté : dim. 02 avr. 2017 01:49
par CrashOv3r
Ah super merci !
Après j'aimerai l'amélioré un peu en pouvant détecter le click dans l'input de telle sorte que dans le switch je puisse mettre un Case $input
Comment je peux faire ?
merci beaucoup !
Re: Changement d'une valeur dans un input
Posté : dim. 02 avr. 2017 14:25
par walkson
#include <EditConstants.au3>#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>Global $Form1 = GUICreate("Form1", 214, 190, 192, 124)Global $Label1 = GUICtrlCreateLabel("", 24, 16, 164, 17)Global $Input1 = GUICtrlCreateInput("", 16, 48, 177, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))Global $Input2 = GUICtrlCreateInput("", 16, 88, 177, 21)GUISetState(@SW_SHOW)GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Input1 GUICtrlSetData($Input2, GUICtrlRead($Label1)^2) GUICtrlSetState($Input1,256);renvoi le focus EndSwitchWEndFunc Requete
() GUICtrlSetData($Label1,GUICtrlRead($Input1) * 10/2)EndFuncFunc WM_COMMAND
($hWnd, $Msg, $wParam, $lParam) Local $nID = BitAND($wParam, 0x0000FFFF) ; _WinAPI_LoWord Local $nNotifyCode = BitShift($wParam, 16) ; _WinAPI_HiWord Switch $lParam Case GUICtrlGetHandle($Input1) Requete
() EndSwitch Return $GUI_RUNDEFMSGEndFunc
Re: Changement d'une valeur dans un input
Posté : dim. 02 avr. 2017 14:48
par mikell
@walkson
On peut faire une détection temps réel du clic sur l'input avec $EN_SETFOCUS (bien que je n'en voie pas vraiment l'intérêt)
#include <EditConstants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <WinAPI.au3>$Form1 = GUICreate("Exemple", 344, 174, 315, 180)$Label1 = GUICtrlCreateLabel("Entrez une valeur", 40, 24, 87, 17)$Label2 = GUICtrlCreateLabel("valeur x 10", 40, 60, 87, 17)$Label3 = GUICtrlCreateLabel("", 40, 90, 87, 17)$input2 = GUICtrlCreateInput("", 144, 60 , 87, 17)$Input1 = GUICtrlCreateInput("", 144, 24, 129, 21)GUISetState() Global $nGUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitchWEndFunc _WM_COMMAND
($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg Local $hWndFrom, $iIDFrom, $iCode, $hInput1 $hInput1 = GUICtrlGetHandle($input1) $hWndFrom = $lParam $iIDFrom = _WinAPI_LoWord($wParam) $iCode = _WinAPI_HiWord($wParam) Switch $hWndFrom Case $hInput1 Switch $iCode Case $EN_SETFOCUS $n += 1 GUICtrlSetData($Label3, "clic " & $n) Case $EN_CHANGE GUICtrlSetData($input2, GUICtrlRead($Input1)*10) EndSwitch EndSwitch Return $GUI_RUNDEFMSGEndFunc ;==>_WM_COMMAND
Re: Changement d'une valeur dans un input
Posté : dim. 02 avr. 2017 17:51
par CrashOv3r
Bonjour,
C'est parfait, ça fonctionne à merveille !
(bien que je n'en voie pas vraiment l'intérêt)
Pour l'explication je n'ai pris qu'un seul input pour ne pas embrouiller tout le monde.
J'ai plusieurs input et suivant celui dans lequel j'insère une valeur, j'appelle une fonction différente ou la même fonction mais avec un paramètre différent. Du coup dans mon cas ça m'est très utile de savoir quel input a le focus
Merci beaucoup pour votre aide !
Cordialement.