Changement d'une valeur dans un input

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
CrashOv3r
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 02 août 2015 18:42
Status : Hors ligne

Changement d'une valeur dans un input

#1

Message 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.
marcgforce
Niveau 3
Niveau 3
Messages : 47
Enregistré le : lun. 07 mars 2016 07:20
Status : Hors ligne

Re: Changement d'une valeur dans un input

#2

Message 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

   EndSwitch
WEnd
CrashOv3r
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 02 août 2015 18:42
Status : Hors ligne

Re: Changement d'une valeur dans un input

#3

Message 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 !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Changement d'une valeur dans un input

#4

Message 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


 EndSwitch
WEnd
Func Requete()
   GUICtrlSetData($Label1,GUICtrlRead($Input1) * 10/2)
EndFunc

Func 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_RUNDEFMSG
EndFunc
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Changement d'une valeur dans un input

#5

Message 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 $n
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
           Case $GUI_EVENT_CLOSE
               Exit
      EndSwitch
WEnd


Func _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_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
CrashOv3r
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 02 août 2015 18:42
Status : Hors ligne

Re: Changement d'une valeur dans un input

#6

Message 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.
Répondre