Page 1 sur 1
[R] D'un input à l'autre
Posté : jeu. 26 août 2010 16:49
par scorp84
Bonjour,
J'aurai besoin de passer automatiquement d'un input au suivant après la saisie d'un seul caractère.
Voici ce que j'ai fait :
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 239, 56, 392, 245)
Global $Input1 = GUICtrlCreateInput("", 26, 7, 39, 28)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Input2 = GUICtrlCreateInput("", 72, 7, 39, 28)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Input3 = GUICtrlCreateInput("", 120, 7, 39, 28)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Input4 = GUICtrlCreateInput("", 168, 7, 39, 28)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
GUICtrlSetState($Input1, $GUI_FOCUS)
#EndRegion ### END Koda GUI section ###
AdlibRegister("MyAdlib")
Func MyAdlib()
$id=ControlGetFocus ("Form1","")
$champ_actu=StringRight($id,1)
$champ_next=$champ_actu+1
If $champ_actu<4 Then
If StringLen(GUICtrlRead(Execute("$Input" & $champ_actu)))=1 then GUICtrlSetState(Execute("$Input" & $champ_next), $GUI_FOCUS)
EndIf
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
1. Y aurait-il un moyen plus "propre" de faire la même chose ?
2. Suis-je obligé de passer par "MyAdlib()" ?
Merci d'avance.
Amicalement.
BM
Re: [..] D'un input à l'autre
Posté : ven. 27 août 2010 16:11
par arrkhan
Je ne sais pas si vous trouvez ça plus propre que ce que vous avez fait mais voici comment j'aurais fait
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global $Input[5]
$Form1 = GUICreate("Form1", 239, 56, 392, 245)
GUISetFont(12, 800, 0, "MS Sans Serif")
$Input[1] = GUICtrlCreateInput("", 26, 7, 39, 28)
$Input[2] = GUICtrlCreateInput("", 72, 7, 39, 28)
$Input[3] = GUICtrlCreateInput("", 120, 7, 39, 28)
$Input[4] = GUICtrlCreateInput("", 168, 7, 39, 28)
;For $t = 2 To 4
; GUICtrlSetState($Input[$t], $gui_disable)
;Next
AdlibRegister("_suivant")
GUISetState()
GUICtrlSetState($Input[1], $GUI_FOCUS)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Sleep(10)
WEnd
Func _suivant()
For $i = 1 To 4
If StringLen(GUICtrlRead($Input[$i])) = 1 then
;GUICtrlSetState($Input[$i], $gui_disable)
GUICtrlSetState($Input[$i] + 1, $gui_enable + $GUI_FOCUS)
EndIf
If GUICtrlRead($Input[4]) <> "" Then AdlibUnRegister("_suivant")
Next
EndFunc ;==>_suivant
Les lignes commentées grisent les contrôles non utilisable.
J'utilise également Adlib mais il y a surement moyen de faire autrement si c'est un souci pour vous.
Re: [..] D'un input à l'autre
Posté : ven. 27 août 2010 16:54
par scorp84
Merci arrkhan pour ta proposition
La doc dit :
Several Adlib functions can be registered. Re-registering an already existing Adlib function will update it with a new time.
Si j'ai bien compris, on peut mettre plusieurs fonctions déclarée avec AdlibRegister.
Mais peut on leur donner à chacune une fréquence différente ?
Et si oui, le fait d'en avoir plusieurs utilise-t-il beaucoup le processeur ?
Merci d'avance.
Amicalement.
BM
Re: [..] D'un input à l'autre
Posté : ven. 27 août 2010 17:05
par SrBelial
AdLibRegister() :
ON PEUT :
* On peut déclarer plusieurs fonctions avec adlibregister
* ces fonctions seront appelées à la fréquence spécifiée en paramètre
* cette fréquence peut être différente pour chaque fonction
ON NE PEUT PAS :
* On ne peut pas utiliser adlibregister pour lancer une même fonction avec deux fréquences différentes
(exemple : je veux lancer ma fonction toutes les 5 minutes parce qu'elle fait un gros traitement mais aussi toutes les 2 minutes pour une raison quelconque) le dernier appel d'adlibregister avec cette fonction déterminera sa fréquence ...
IL FAUT :
* Autant que possible pour des questions de performances il est préférable lors de l'utilisation de AdLibRegister, d'utiliser la fonction AdLibUnregister dès que l'appel de la fonction concernée n'est plus utile.
* éviter d'appeler trop souvent des fonctions gourmandes en ressources.
QUESTION PERFS :
* La consommation des ressources sera à peu de choses près la même que si tu tes appels de fonction étaient programmés dans une boucle infinie, la gestion des différents "threads" est peu gourmande en elle même, seule la façon de gérer les différentes fréquences et la complexité des fonctions appelées jouera vraiment sur les performances ...
^____^
Re: [..] D'un input à l'autre
Posté : ven. 27 août 2010 22:19
par scorp84
Super
Merci beaucoup pour toutes tes précisions. C'est exactement ce que je voulais savoir.
Amicalement.
BM