Bonjour à toutes et à tous et mes meilleur voeux pour cette nouvelle année.
Je suis en train de découvrir AutoIt et j'avoue que ce petit langage me plait bien.
Par contre, je débute (ainsi qu'en programmation de manière générale) et forcément, je rencontre quelques difficultés.
J'ai (pour l'instant) une zone de saisie (GUICtrlCreateInput) et un label (GUICtrlCreateLabel) dans un formulaire.
Je voudrais modifier le label en fonction de ce que je tape dans la zone de saisie, mais de manière continue et instantanée, pas lorsque je valide par Entrée.
La fonction On_change n'est appelée que lorsque je tape sur Entrée, ce qui ne correspond pas à ce que je veux faire.
J'ai regardé sur le forum, mais je n'ai pas trouvé d'info.
Merci de votre aide
Cdt,
Ramirez22
Appel fonction a chaque appuis touche dans zone de saisie
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- parazitenew
- Niveau 7
- Messages : 310
- Enregistré le : sam. 10 déc. 2011 15:08
- Localisation : Algerie
- Status : Hors ligne
Re: Appel fonction a chaque appuis touche dans zone de saisie
Bonsoir,
Quelque chose dans le genre?
Quelque chose dans le genre?
#include <guiconstants.au3>
AdlibRegister("update",100)
GUICreate('',200,200)
$input = GUICtrlCreateInput('',10,20,100,30)
GUICtrlSetFont(-1,14)
$label = GUICtrlCreateLabel("",15,70,150,50)
GUICtrlSetFont(-1,14)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Func update()
$data = GUICtrlRead($input)
GUICtrlSetData($label,$data)
EndFunc
AdlibRegister("update",100)
GUICreate('',200,200)
$input = GUICtrlCreateInput('',10,20,100,30)
GUICtrlSetFont(-1,14)
$label = GUICtrlCreateLabel("",15,70,150,50)
GUICtrlSetFont(-1,14)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Func update()
$data = GUICtrlRead($input)
GUICtrlSetData($label,$data)
EndFunc
Re: Appel fonction a chaque appuis touche dans zone de saisie
Bonjour et merci de votre réponse.
C'est exactement la fonction que je recherche.
Par contre, j'aurais 2 petites questions :
- Est-ce que cette méthode est compatible avec une programmation en mode séquentiel ?
- Est-ce que cela ne va pas "saccader" l'exécution du code ?
Pour la deuxième question, ce n'est pas primordial (mon application est un moteur de recherche dans une BD SQLite), mais cela me semble assez brutal (appel d'une fonction toutes les x ms pour vérifier un champs txt, ça me semble assez bourin ).
En tout cas, c'est une piste que je vais explorer, merci encore.
Cordialement,
Ramirez22
C'est exactement la fonction que je recherche.
Par contre, j'aurais 2 petites questions :
- Est-ce que cette méthode est compatible avec une programmation en mode séquentiel ?
- Est-ce que cela ne va pas "saccader" l'exécution du code ?
Pour la deuxième question, ce n'est pas primordial (mon application est un moteur de recherche dans une BD SQLite), mais cela me semble assez brutal (appel d'une fonction toutes les x ms pour vérifier un champs txt, ça me semble assez bourin ).
En tout cas, c'est une piste que je vais explorer, merci encore.
Cordialement,
Ramirez22
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Appel fonction a chaque appuis touche dans zone de saisie
C'est pas complètement fauxça me semble assez bourin
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
GUICreate('', 200, 200)
$input = GUICtrlCreateInput('',10,20,100,30)
$label = GUICtrlCreateLabel("",15,70,150,50)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
If BitAND($wParam, 0x0000FFFF) = $input AND BitShift($wParam, 16) = $EN_UPDATE Then _
GUICtrlSetData($label, GUICtrlRead($input))
Return 'GUI_RUNDEFMSG'
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- parazitenew
- Niveau 7
- Messages : 310
- Enregistré le : sam. 10 déc. 2011 15:08
- Localisation : Algerie
- Status : Hors ligne
Re: Appel fonction a chaque appuis touche dans zone de saisie
Toutes mes solutions sont radicales
@ramirez, j'ai vérifier chez moi, ça ne consomme pas plus de CPU ou de RAM.
@mikell, j'ai pensé au WM_COMMAND, mais ça ne reviendrait pas au même? La fonction continue de vérifier un changement dans l'input en interne. C'est comme un adlibregister au fond non?
@ramirez, j'ai vérifier chez moi, ça ne consomme pas plus de CPU ou de RAM.
@mikell, j'ai pensé au WM_COMMAND, mais ça ne reviendrait pas au même? La fonction continue de vérifier un changement dans l'input en interne. C'est comme un adlibregister au fond non?
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Appel fonction a chaque appuis touche dans zone de saisie
Bin non. WM_COMMAND n'est appelée que si tu touches au controle, alors qu'avec Adlibregister la fonction s'exécute en permanence, même quand c'est inutile, et peut donc interférer avec le déroulement du script
Je cite le fichier d'aide :
The adlib function should be kept simple as it is executed often and during this time the main script is paused. Also, the time parameter should be used carefully to avoid CPU load.
En général quand on a affaire à des controles il est de loin préférable d'utiliser un GuiRegisterMsg plutôt qu'un Adlibregister (ou qu'une fonction lancée directement en continu dans la boucle While principale)
Je cite le fichier d'aide :
The adlib function should be kept simple as it is executed often and during this time the main script is paused. Also, the time parameter should be used carefully to avoid CPU load.
En général quand on a affaire à des controles il est de loin préférable d'utiliser un GuiRegisterMsg plutôt qu'un Adlibregister (ou qu'une fonction lancée directement en continu dans la boucle While principale)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: Appel fonction a chaque appuis touche dans zone de saisie
Bonjour à vous.
Merci Mikell pour ton aide et ton exemple. En effet, le code me semble moins solliciter le CPU que la version de Parazitenew (encore plus après avoir lu tes explications ).
Cela n'enlève rien aux remerciement que j'adresse également à Parazitenew pour son aide.
Avec ça, je devrais pouvoir avancer sur mon soft.
A+
Merci Mikell pour ton aide et ton exemple. En effet, le code me semble moins solliciter le CPU que la version de Parazitenew (encore plus après avoir lu tes explications ).
Cela n'enlève rien aux remerciement que j'adresse également à Parazitenew pour son aide.
Avec ça, je devrais pouvoir avancer sur mon soft.
A+