Page 1 sur 1

[R] Dummy ? Ou GuiSetAccelerator ?

Posté : mer. 30 juil. 2014 21:41
par Ks10
Bonsoir tous le monde !

Je fait appel à vous car je suis confronter à un petit soucis :

Je cherche à faire en sorte qu'en appuyant sur la touche "ENTRER" que mon programme lit le contrôle et en fonction de ce qu'il y a à l'intérieur il agit.

Donc voici ce que j'ai trouver :
► Afficher le texte

Si j'utilise cette structure, OK aucun soucis cela fonctionne mais j'aimerais approfondir un peu les choses & faire en sorte que dans la partie :

Code : Tout sélectionner

    Case $Input1
           ; ICI le code qui correspond a la commande entrée 
           ; EXEMPLE 
           ; If $input1 = "test" Then msgbox(64, "infos", "test")
Si je rentre une nouvelle donnée cela agit encore en fonction de ce qu'il y à l'intérieur.

J'ai essayer donc de faire appel à un autre GuiSetAccelerator($Renter) dans cette partie mais cela ne fonctionne pas.
J'ai penser également a la commande GuiCtrlSendToDummy mais j'avoue que je ne comprend pas son fonctionnement.

Pouvez-vous m'éclairer ?

Merci d'avance.

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : mer. 30 juil. 2014 23:44
par jchd
Un simple Return devrait suffire, non ?

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : jeu. 31 juil. 2014 00:35
par orax
GUISetAccelerators() attend une touche dans le même format que HotKeySet(). Donc c'est {ENTER} avec { }.
Et c'est GUICtrlRead() pour lire le contenu.
► Afficher le texte

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 07:54
par Ks10
Ta solution fonctionne mais cela ne correspond pas a ce que je recherche.
J'ai peut être mal formuler x)

En faîte :

- Oui je veux que la touche entrée fonctionne et qu'il lit l'input.
Cependant voila le cas de figure que j'aimerais faire fonctionné :

Version fonctionnel :
► Afficher le texte
Si a la suite de "If GUICtrlRead($input1) = "test" Then msgbox(64, "infos", "test")" je rajoute un autre :

If GUICtrlRead($input1) = "secondtest" Then msgbox(64, "infos", "test")

Cela va fonctionné mais si je fait comme sa :
► Afficher le texte
Dans cette situation la touche entrée n'est plus fonctionnel, que faut-il rajouter dans ce cas de figure ?
En gros je cherche à l'aide d'une première commande appelé une fonction qui lui attend d'autre paramètre et il ira lire l'input encore une fois pour recevoir ces paramètres. C'est possible ?

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 10:46
par mikell
"Une fonction qui attend" ça veut dire une boucle
► Afficher le texte

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 11:20
par jchd
Franchement, je n'ai rien contre le code "nouille" (si, en fait !), mais je préfère une autre approche. Dès qu'on dépend d'états, autant le voir clairement dans le code.
► Afficher le texte
Evidemment les valeurs d'état 0, 1, ... devraient $etre une énumération de constantes avec des noms explicites.

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 11:21
par jchd
Edité, car il m'avait mis une balise

Code : Tout sélectionner

 tout seul

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 11:44
par mikell
jc ton code marche pas: "abc"+enter puis "test1"+enter => pas de msgbox (par exemple)

Faut ou bien mettre l'accélérateur, ou bien mettre la valeur d'état dans le If...Then

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 11:58
par jchd
Aucun problème, c'est une simple question de choix de la logique du traitement. Je n'ai pas cherché à coller à quoi que ce soit puisqu'il n'y a aucune véritable spécification. Tu mets un While si tu veux, ou le changement d'état à l'intérieur du If, etc.

Ce que je voulais dire c'est qu'il est préférable que la structure du code reflète la structure d'une machine à états explicite. Sinon en pratique, dès que le contexte devient un poil plus complexe, on se trouve parfois complètement bloqué dans une succession de boucles dont on ne peut sortir aisément.

Par exemple si tu as trois états principaux A, B et C et si chacun a plusieurs sous-états comme a1, a2 et a3, b1 et b2 et c1 et c2, pendant le traitement (par Switch sur 2 niveaux) du cas a3 tu peux toujours modifier les valeurs d'états de l'ensemble, alors que si tu traites tout ça sans variables d'état, tu n'a qu'un recours : Goto.

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 12:39
par mikell
Entièrement d'accord sur la pertinence de la structure du code, ta méthode est clairement mieux adaptée et moins lourdasse
jchd a écrit :Tu mets un While si tu veux, ou le changement d'état à l'intérieur du If, etc.
Présentement, si le changement d'état n'est pas mis dans le If, la variable est commutée même si la chaîne à tester ne match pas, ce qui impose avant le test d'entrer la bonne chaîne du 1er coup sous peine de devoir relancer tout le script - ça peut effectivement être un choix de traitement mais ce n'est pas spécialement ergonomique

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 12:47
par jchd
Tout dépend du contexte. Si c'est (exemple idiot) in login/mot de passe c'est en général ainsi qu'on procède, mais en remettant les inputs à vide. On peut aussi vouloir stocker les valeurs entrées ou faire ceci ou cela. C'est juste un squelette à adapter au contexte réel.

Re: [..] Dummy ? Ou GuiSetAccelerator ?

Posté : ven. 01 août 2014 13:21
par Ks10
Merci à tous pour vos réponses :)

La solution de Mikell me correspond parfaitement !
Sujet résolu.