Page 1 sur 1

[R] ControlDisable et la navigation au clavier

Posté : jeu. 13 août 2009 16:44
par fredone
bonjour,

j'utilise 2 liste de radio boutons (séparer par "GuiCtrlCreateGroup") et les choix dans la première liste influe sur ceux de la deuxième. J'ai donc trouvé la solution de griser les contrôles de la deuxième liste en utilisant la fonction "ControlDisable" cela fonctionne plutôt bien. MAIS il y a un mais !

si comme dans l'exemple ci-dessous je grise le premier élément de la deuxième liste, et que je navigue au clavier (tabulation) mon focus ne passe plus dans la seconde liste

comment faire !!!!

Pour tester l'exemple ci-dessous il faut Sélectionner le premier radio de la première liste et tenter de d'atteindre la deuxième liste par la tabulation !
► Afficher le texte

Re: [..] ControlDisable et la navigation au clavier

Posté : jeu. 13 août 2009 21:13
par orax
Vous pourriez ajouter le style $WS_TABSTOP pour passer à l'élément suivant.

Code : Tout sélectionner

#include <WindowsConstants.au3>
[...]
    GuiCtrlCreateGroup("Positif", 30, 30, 440, 115)
    $radio1 = GUICtrlCreateRadio($questradio1, 60, 60, 400, 20,$WS_TABSTOP)
    $radio2 = GUICtrlCreateRadio($questradio2, 60, 80, 400, 20,$WS_TABSTOP)
    $radio3 = GUICtrlCreateRadio($questradio3, 60, 100, 400, 20,$WS_TABSTOP)
    $radio4 = GUICtrlCreateRadio($questradio4, 60, 120, 400, 20,$WS_TABSTOP)
    GUICtrlCreateGroup ("",-99,-99,1,1)  ;close group
   
    GuiCtrlCreateGroup("Négatif", 30, 150, 440, 115)
    $radio5 = GUICtrlCreateRadio($questradio1, 60, 180, 400, 20,$WS_TABSTOP)
    $radio6 = GUICtrlCreateRadio($questradio2, 60, 200, 400, 20,$WS_TABSTOP)
    $radio7 = GUICtrlCreateRadio($questradio3, 60, 220, 400, 20,$WS_TABSTOP)
    $radio8 = GUICtrlCreateRadio($questradio4, 60, 240, 400, 20,$WS_TABSTOP)
    GUICtrlCreateGroup ("",-99,-99,1,1)  ;close group

Re: [..] ControlDisable et la navigation au clavier

Posté : jeu. 13 août 2009 22:48
par Tlem
Je pense que le codage correct de votre GUI devrait résoudre le problème.
Cet exemple vous montre comment faire pour ne pas avoir d'interaction entre deux listes de RadioBox :
► Afficher le texte

Re: [..] ControlDisable et la navigation au clavier

Posté : sam. 15 août 2009 15:21
par fredone
bonjour,

et merci pour vos réponses: mais, il y a un mais.

@Orax, ta solution permet en effet de contourner le problème, mais il crée un comportement anormal de la tabulation. En effet lorsque les éléments d'une liste sont groupés, la tabulation fait entrer et sortir de cette liste. Alors qu'en appliquant ta solution, la tabulation parcours les éléments de la liste.

@Tlem, je n'ai pas bien compris ton message, j'utilise bien "GuiCtrlCreateGroup" pour grouper mes radio-boutons mais je désire créer une interaction entre mes deux listes de radio-boutons... Car les deux liste sont les mêmes et on ne peut répondre la même questions aux deux listes. donc si on choisit la question 1 dans la première liste, alors la question 1 dans la seconde apparait grisée. (mais lors de l'accès par la tabulation la seconde liste est alors ignorée !!)

je continue a plancher sur le problème, mais suis toujours preneurs de vos solutions !!!

Re: [..] ControlDisable et la navigation au clavier

Posté : sam. 15 août 2009 22:23
par Tlem
Bien. Visiblement j'avais compris l'inverse, c'est à dire aucune interaction.

Cela dit, je ne vois aucun intérêt à votre question, puisque vous dites :
Car les deux liste sont les mêmes et on ne peut répondre la même questions aux deux listes.
Donc quel serait l'intérêt de pouvoir cliquer sur la deuxième liste puisque les questions sont les même que la première ... :shock:

Mais effectivement, si vous désactivez le premier élément d'un groupe, vous ne pouvez plus y accéder avec la tabulation.
Ceci est tout à fait normal, puisque le premier élément d'un groupe est celui qui doit être atteint par la tabulation, mais comme il est désactivé .... :roll:

Re: [..] ControlDisable et la navigation au clavier

Posté : sam. 15 août 2009 22:50
par fredone
mes explications manquaient de clarté !!

c'est les mêmes réponses (les 2 listes) mais avec des questions différentes... choisir dans la premiere liste ce qui vous définis le mieux et dans la deuxieme ce qui vous définis le moins... et les 4 réponses sont les mêmes... et nous ne pouvons évidement pas choisir la même réponse...

comme tu le dis c'est normal et je le conçoit, mais je cherche a détourner le problème et à donner le focus au deuxième élément de la deuxième liste après la tabulation !!!!

je pourrais aussi laisser le control actif et prévenir l'utilisateur qu'il ne peut la sélectionner une deuxième fois... si il tente de la cocher...

Re: [..] ControlDisable et la navigation au clavier

Posté : sam. 15 août 2009 23:06
par Tlem
fredone a écrit :je pourrais aussi laisser le control actif et prévenir l'utilisateur qu'il ne peut la sélectionner une deuxième fois... si il tente de la cocher...
Cela me semble la solution la plus 'simple'.

Edit : Sinon vous pouvez tout simplement faire ceci :
► Afficher le texte
Aucun message, mais au moins, il sait à quoi s'en tenir. ;)
Et Puis s'est quand même plus simple que de rajouter un message qu'il faudra valider.

Re: [..] ControlDisable et la navigation au clavier

Posté : sam. 15 août 2009 23:36
par fredone
ta solution est complètement valable, mais je travaille sur une appli destiné à des personnes non voyantes, ils doivent donc être prévenus de leurs actions... je vais opter pour la solution du message...

merci à vous, solutionnez par une alternative !

Re: [R] ControlDisable et la navigation au clavier

Posté : dim. 16 août 2009 10:24
par Tlem
La solution du message me semble plutôt lourde. Mais comme vous me donnez plus d'infos sur le type d'utilisateur, vous pouvez aussi utiliser le son.
Donc en même temps que le

Code : Tout sélectionner

If _IsChecked($Radio3) Then GUICtrlSetState($Radio1, $GUI_UNCHECKED)
vous pourriez rajouter un beep.
► Afficher le texte

Re: [R] ControlDisable et la navigation au clavier

Posté : dim. 16 août 2009 13:50
par fredone
les personnes susceptibles d'utiliser cette application utilisent déjà un lecteur d'écran (qui pilote une synthèse vocale).

malheureusement, un bip n'est pas assez explicite pour signifier à l'utilisateur que l'action a décocher l'autre radio bouton. je préfère parfois être lourd qu'imprécis !

la solution de changer le label du radio bouton est peut être une solution (le label contiendrait alors le message d'avertissement).

Mais votre solution peut fonctionner car si on décoche le premier radio bouton et vu que je vais obliger à une réponse, l'utilisateur aura un message si il persiste !

merci à vous.

Re: [R] ControlDisable et la navigation au clavier

Posté : dim. 16 août 2009 22:30
par Tlem
Bon allé, je suis en forme. ;)
Puisqu'il ne peut y avoir qu'un seul choix, le plus simple est peut être de désactiver le premier choix si différent du second, comme cela, pas de son ni de message, mais un choix logique. ;)

Genre:
► Afficher le texte

Re: [R] ControlDisable et la navigation au clavier

Posté : lun. 17 août 2009 00:21
par fredone
merci de ton (votre) aide, mais pour une appli destiné au non voyant il faut qu'un action soit explicite, apres avoir cocher un radio bouton on doit entendre coché... et donc si cela coche ou décoche un radio bouton l'utilisateur doit etre prévenu...

donc je vais mixer toutes vos solutions...