Page 2 sur 2
Re: [Résolu]Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : sam. 18 déc. 2010 19:29
par zeshrek
J'ai pas tout lu, mais je comprend pas pourquoi certains se sont lancés dans un délire de scritp qui en appelle un autre, alors que c'est d'une simplicité enfantine
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 397, 166, 192, 124)
$Input1 = GUICtrlCreateInput("", 112, 48, 121, 21)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If StringLen(GUICtrlRead($Input1)) >= 5 then ExitLoop ; C'est ici que ca se passe.
WEnd
msgbox (0,"Objectif atteint",GUICtrlRead($Input1))
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : dim. 19 déc. 2010 23:55
par Tlem
Même si le code est fonctionnel, il sera à proscrire, car en cas d'évolution du script, si les conditions se succèdent, la boucle deviendra rapidement peut fonctionnelle.
Il est vrais que l'on peut se contenter de cette toute petite ligne, mais c'est comme tout, avec Autolt (et beaucoup d'autres langages de programmation) lorsqu'on fait quelque chose, il vaut mieux le faire bien dés le départ, sinon par la suite, il risque fort d'y avoir des surprises ...
La CallBack peut paraitre compliquée de prime abord, mais elle est tellement plus évolutive.

Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 08:17
par zeshrek
On est bien d'accord Tlem, mais en fonction de ce qui était demandé, c'est une des facon les plus simples d'arriver au résultat. Apres, si le script doit se complexifier il y a sans doutes d'autres methodes.
Par contre j'ai cherché callback dans l'aide autoit, et y a pas. Ca vient d'un UDF ?
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 08:30
par Jerome
Coucou,
Des infos sur le callback
ici.
Jérôme
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 09:32
par zeshrek
Merci pour l'info Jérome.
J'ai lu le topic concerné, et j'ai rien compris a part qu'il y est question d'appeler des DLL.
Bon, ba ca va me faire un truc a éssayer de comprendre vu que je suis bloqué a la maison (presque 20 cm de neige, et ca tombe encore, et aucun moyen de me rendre a la gare prendre le train pour aller au boulot).
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 09:36
par Jerome
zeshrek a écrit :je suis bloqué a la maison (presque 20 cm de neige, et ca tombe encore, et aucun moyen de me rendre a la gare prendre le train pour aller au boulot).
Pareil sauf que c'est 30 km dans les départementales que je dois faire ^^
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 18:02
par bloodwolff
Rooh les petits français , aussitôt que ya un peu de neige sa ne sais plus quoi faire

Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 19:52
par j3r0m3
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : lun. 20 déc. 2010 19:55
par zeshrek
Bin, en fait si j'avais toujours mon permis, j'aurai pu aller bosser en voiture, mais a cause de la moto, j'ai du le rendre y a 1 mois, du coup maintenant c'est bus/metro/train

Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : ven. 05 oct. 2012 19:28
par bob
Bonsoir,
Excusez-moi de "déterrer" ce vieux sujet, j'utilise le script de Tlem, mais comment faire si on a plusieurs input(s) et que l'on veut passer automatiquement à l'input suivant dès qu'il y a le nombre suffisant de caractères dans un input ?
(Ceci afin de ne pas être obligé d'utiliser la touche TAB pour changer d'input).
Faut-il grouper les input ?
D'avance, merci.
Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : ven. 05 oct. 2012 20:57
par Tlem
On peut très surement optimiser (je laisse ça à ceux que ça amusera), mais sinon le code ci-dessous démontre une utilisation encore plus parlante de ce que l'on peut faire avec
GUIRegisterMsg :
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("", 160, 170, -1, -1)
$Label1 = GUICtrlCreateLabel("Entrez quatres caractères :", 8, 10, 148, 17)
$Input1 = GUICtrlCreateInput("", 16, 25, 121, 21)
$Label2 = GUICtrlCreateLabel("Entrez un mot à cinq lettres :", 8, 60, 148, 17)
$Input2 = GUICtrlCreateInput("", 16, 75, 121, 21)
$Label3 = GUICtrlCreateLabel("Entrez un nombre à 2 chiffres :", 8, 110, 148, 17)
$Input3 = GUICtrlCreateInput("", 16, 125, 121, 21)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; Ceci sert pour surveiller les zones d'input
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Input1
ConsoleWrite(GUICtrlRead($Input1))
EndSwitch
WEnd
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $MyInput
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; HiWord
$iCode = BitShift($iwParam, 16) ; LoWord
Switch $hWndFrom
Case GUICtrlGetHandle($Input1) ; Cas pour $Input1
Switch $iCode
Case $EN_CHANGE
; C'est ici que vous devez gérer vos contrôles sur l'input
$MyInput = GUICtrlRead($Input1) ; On récupère le texte entré
If StringLen($MyInput) >= 4 Then ; On test la longueur
GUICtrlSetState($Input2, $GUI_FOCUS) ; On met le focus le l'input suivant
EndIf
; Fin du contrôle/execution
EndSwitch
Case GUICtrlGetHandle($Input2) ; Cas pour $Input2 (que des lettres)
Switch $iCode
Case $EN_CHANGE
$MyInput = GUICtrlRead($Input2)
If Not StringInStr("abcdefghijklmnopqrstuvwxyz", StringRight($MyInput, 1)) Then ; On vérifie que la saisie est autorisée
GUICtrlSetData($Input3, StringTrimRight($MyInput, 1)) ; sinon on efface la saisie
Else ; Sinon
If StringLen($MyInput) >= 5 Then ; Test de la longueur de chaine.
GUICtrlSetState($Input3, $GUI_FOCUS) ; On met le focus le l'input suivant
EndIf
EndIf
EndSwitch
Case GUICtrlGetHandle($Input3) ; Cas pour $Input3 (nombres)
Switch $iCode
Case $EN_CHANGE
$MyInput = GUICtrlRead($Input3)
If Not StringInStr("0123456789", StringRight($MyInput, 1)) Then
GUICtrlSetData($Input3, StringTrimRight($MyInput, 1))
Else
If StringLen($MyInput) >= 2 Then
MsgBox(64 + 8192,"Saisie Terminée","Vous avez bien entré les valeurs." & @CRLF & _
"Input1 = " & GUICtrlRead($Input1) & @CRLF & _
"Input2 = " & GUICtrlRead($Input2) & @CRLF & _
"Input3 = " & GUICtrlRead($Input3) & @CRLF & @TAB)
GUIDelete($Form1)
Exit
EndIf
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Amusez vous bien.

Re: [R] Quand l'utilisateur écrit 5 caractère AutoIt lui dit
Posté : ven. 05 oct. 2012 22:25
par bob
Super ! et merci. C'est exactement le "genre de choses" dont j'ai besoin...