[..] Changer le bouton par défaut avec des onglets

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[..] Changer le bouton par défaut avec des onglets

#1

Message par jpascal »

Bonjour,

J'utilise l'UDF pour gérer les onglets suite à la question posée ici : posting.php?mode=reply&f=4&t=15729&sid= ... 29#preview

Problème, si j'utilise des boutons dans différents onglets, je n'arrive pas à définir un bouton par défaut sans effet de bord.

Pour définir un bouton par défaut j'utilise la fonction GuiCtrlSetStyle() avec le paramètre $BS_DEFPUSHBUTTON.
Or il n'existe pas de paramètre "Non défaut". J'ai donc utilisé le paramètre 0 pour utiliser le style par défaut.
Cela fonctionne correctement si les boutons sont dans le même onglet. Mais dans le cas où les boutons sont dans différents onglets, lorsque je change d'onglet et que je clique sur un input, le bouton correspondant devient bien celui par défaut mais l'ancien bouton par défaut apparaît.

Extrait du code de ma fonction WM_COMMAND :
      Case $idInput1, $idInput2, $idInput3
         Switch $iCode
            Case 256  ; click in
               GUICtrlSetStyle($iIDFrom + 1, $BS_DEFPUSHBUTTON)
            Case 512  ; click out
               GUICtrlSetStyle($iIDFrom + 1, 0)
         EndSwitch

Y a-til une autre façon de faire ou suis-je obligé de tester l'onglet actif lorsque je fais un clic out et si l'input n'appartient pas à l'onglet actif alors je cache l'input ?
Je précice que lors de la création de la GUI, je crée un tableau contenant les ID des contrôles et l'ID de l'onglet auxquels ils appartiennent.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [..] Changer le bouton par défaut avec des onglets

#2

Message par jl56 »

Bonjour,

Je ne suis pas sur d'avoir bien compris votre demande, pour ma part je test l'onglet actif
par exemple
If $msg = $mp_tab Then ; action sur un onglet ($mp_tab) est ma boite à onglet
      ;MsgBox($avant_plan, "tab", GUICtrlRead($mp_tab), 180) ; test pour connaitre les numéros des onglets
      If GUICtrlRead($mp_tab) = 1 Then ; if j'ai sélectionné l'onglet n°1
         GUICtrlSetState($But_mp_ajouter, $GUI_FOCUS); je met le focus sur ce bouton
      EndIf
EndIf
cordialement,

JL56
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Changer le bouton par défaut avec des onglets

#3

Message par jpascal »

Bonjour et merci pour votre réponse.

Dans un onglet il peut y a voir plusieurs Input avec un bouton associé.
- Si je clique sur $idInput1, je souhaite que le $idButton1 soit utilisé par défaut (si je tape Enter).
- Si je clique sur $idInput12, je souhaite que le $idButton2 soit utilisé par défaut (si je tape Enter).
- ...
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [..] Changer le bouton par défaut avec des onglets

#4

Message par jl56 »

Bonjour,

Avec autoit la touche entreée ne fonctionne pas sur un input, pour pouvoir le faire il faut utiliser une fonction GUISetAccelerators
Le mieux c'est de vous fournir un exemple que j'utilise.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
GUICreate(" Saisie mot de passe ", 550, 250, -1, -1)
GUISetState()
$posh = 30
$posv = 350
GUICtrlCreateLabel(" Quel est le mot de passe d'accès au configurateur.", 20, $posh)
$inp_mdp_general = GUICtrlCreateInput("", $posv, $posh - 2, 150, 18, $ES_PASSWORD)
$posh = 60
GUICtrlCreateLabel(" Nombre d'essai ", 20, $posh)
$inp_mdp_essai = GUICtrlCreateInput("", $posv, $posh - 2, 150, 18)
$Exitem2 = GUICtrlCreateButton(" Quitter ", 430, 180, 70, 30)
$validation_mdp = GUICtrlCreateButton("  Validation du mot de passe  ", 180, 180, 200, 30)
$boucle_mdp = 0

Global $dummy = GUICtrlCreateDummy()
Dim $AccelKeys[1][2] = [["{ENTER}", $dummy]]
GUISetAccelerators($AccelKeys)

GUICtrlSetState($inp_mdp_general, $GUI_FOCUS)


Global $avant_plan = 262144

; boucle saisie mot de passe ****************************************************************************************************************************************************



;~ GUICtrlSetState($inp_mdp_liste_perso, $GUI_FOCUS)
Do


   $msg = GUIGetMsg()
;~ if $msg = $dummy Then MsgBox($avant_plan, "", "dummy", 20)
   If $msg = $validation_mdp Or $msg = $dummy Then


      If GUICtrlRead($inp_mdp_general) <> "" Then


         If StringUpper(GUICtrlRead($inp_mdp_general)) = "PASSWORD" Then
      MsgBox($avant_plan, "", "Bravo vous avez le code de déprotection", 20)
            GUIDelete()
            ExitLoop

         Else
            MsgBox($avant_plan, "", "vous n'avez pas le code de déprotection", 20)
            $boucle_mdp = $boucle_mdp + 1
            GUICtrlSetData($inp_mdp_essai, $boucle_mdp & " / 3")
            Sleep(500)
            If $boucle_mdp > 2 Then
               Exit


            EndIf
         EndIf


      EndIf

   EndIf


   If $msg = $Exitem2 Then
      GUIDelete()
      Exit
   EndIf
Until 0
Pour plusieurs inputs il faut tester ou se trouve le focus et modifier le script pour gérer ce que vous désirer
je n'ai pas en tête la méthode pour tester le focus et désolé je n'aurais pas le temps cette semaine pour faire des recherches

dans l'aide vous aurez des explications sur GUISetAccelerators

Cordialement,

JL56
Répondre