[R] Comment modifier le texte d'un bouton après appuis

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Vchristelle
Niveau 1
Niveau 1
Messages : 3
Enregistré le : jeu. 08 déc. 2016 00:05
Status : Hors ligne

[R] Comment modifier le texte d'un bouton après appuis

#1

Message par Vchristelle » jeu. 08 déc. 2016 01:36

Bonjour, je suis tout nouveau sur le forum, mais aussi dans l'expérience autoit !
je débute un petit script et je coince déjà :(

voici mon code :
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

$Check1 = IniRead('config.ini', 'activation', 'check1', 0)
$Check2 = IniRead('config.ini', 'activation', 'check2', 0)
$Check3 = IniRead('config.ini', 'activation', 'check3', 0)
$Check4 = IniRead('config.ini', 'activation', 'check4', 0)
$Check5 = IniRead('config.ini', 'activation', 'check5', 0)

$Form1 = GUICreate("Test 1", 121, 173, 192, 124)

If $Check1 = "1" Then
        $Button1 = GUICtrlCreateButton("activé", 8, 8, 99, 25)
Else
        $Button1 = GUICtrlCreateButton("desactivé", 8, 8, 99, 25)
EndIf

If $Check2 = "1" Then
        $Button2 = GUICtrlCreateButton("activé", 8, 40, 99, 25)
Else
        $Button2 = GUICtrlCreateButton("desactivé", 8, 40, 99, 25)
EndIf

If $Check3 = "1" Then
        $Button3 = GUICtrlCreateButton("activé", 8, 72, 99, 25)
Else
        $Button3 = GUICtrlCreateButton("desactivé", 8, 72, 99, 25)
EndIf

If $Check4 = "1" Then
        $Button4 = GUICtrlCreateButton("activé", 8, 104, 99, 25)
Else
        $Button4 = GUICtrlCreateButton("desactivé", 8, 104, 99, 25)
EndIf

If $Check5 = "1" Then
        $Button5 = GUICtrlCreateButton("activé", 8, 136, 99, 25)
Else
        $Button5 = GUICtrlCreateButton("desactivé", 8, 136, 99, 25)
EndIf

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Button1
                        if $Check1 = "1" Then
                                IniWrite('config.ini', 'activation', 'check1', '0')
                                GuiCtrlSetData($Button1, "desactivé", "")
                        Else
                                IniWrite('config.ini', 'activation', 'check1', '1')
                                GuiCtrlSetData($Button1, "activé", "")
                        EndIf
        EndSwitch
WEnd
voila comment se déroule le script une fois lancé :

- il regarde le statut de chaque check permettant d'attitrer le bon bouton (activé ou désactivé) associé au résultat.
- lorsque je clique sur le bouton il change de statut (passe d'activé -> désactivé, et inversement) en direct.

jusque là tout va bien, hors quand j'appuis une seconde fois (et plus) le script ne semble plus répondre ! que faire ?
merci à vous pour l'aide éventuelle apportée.

christelle V
Modifié en dernier par Vchristelle le jeu. 08 déc. 2016 02:01, modifié 1 fois.

Vchristelle
Niveau 1
Niveau 1
Messages : 3
Enregistré le : jeu. 08 déc. 2016 00:05
Status : Hors ligne

Re: [..] Comment modifier le texte d'un bouton après appuis

#2

Message par Vchristelle » jeu. 08 déc. 2016 01:49

j'ai trouvé une solution :
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Global $Button1, $Check1

_mafonction()
Func _mafonction()

Global $Check1 = IniRead('config.ini', 'activation', 'check1', 0)
Global $Check2 = IniRead('config.ini', 'activation', 'check2', 0)
Global $Check3 = IniRead('config.ini', 'activation', 'check3', 0)
Global $Check4 = IniRead('config.ini', 'activation', 'check4', 0)
Global $Check5 = IniRead('config.ini', 'activation', 'check5', 0)

$Form1 = GUICreate("Test 1", 121, 173, 192, 124)

If $Check1 = "1" Then
        Global $Button1 = GUICtrlCreateButton("activé", 8, 8, 99, 25)
Else
        Global $Button1 = GUICtrlCreateButton("desactivé", 8, 8, 99, 25)
EndIf

If $Check2 = "1" Then
        $Button2 = GUICtrlCreateButton("activé", 8, 40, 99, 25)
Else
        $Button2 = GUICtrlCreateButton("desactivé", 8, 40, 99, 25)
EndIf

If $Check3 = "1" Then
        $Button3 = GUICtrlCreateButton("activé", 8, 72, 99, 25)
Else
        $Button3 = GUICtrlCreateButton("desactivé", 8, 72, 99, 25)
EndIf

If $Check4 = "1" Then
        $Button4 = GUICtrlCreateButton("activé", 8, 104, 99, 25)
Else
        $Button4 = GUICtrlCreateButton("desactivé", 8, 104, 99, 25)
EndIf

If $Check5 = "1" Then
        $Button5 = GUICtrlCreateButton("activé", 8, 136, 99, 25)
Else
        $Button5 = GUICtrlCreateButton("desactivé", 8, 136, 99, 25)
EndIf

GUISetState(@SW_SHOW)

EndFunc

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Button1
                        if $Check1 = "1" Then
                                IniWrite('config.ini', 'activation', 'check1', '0')
                                GuiCtrlSetData($Button1, "desactivé", "")
                        Else
                                IniWrite('config.ini', 'activation', 'check1', '1')
                                GuiCtrlSetData($Button1, "activé", "")
                        EndIf

                        GUIDelete()
                        _mafonction()
        EndSwitch
WEnd
cependant après chaque appuis l'ont peut observer comme un flash de la GUI (dû à la fermeture et réouverture), n'y a t'il pas une solution pour l'éviter ? merci.

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1467
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] Comment modifier le texte d'un bouton après appuis

#3

Message par orax » jeu. 08 déc. 2016 01:58

Bienvenue sur le forum. :)

Dans le code du premier message, il faudrait ajouter $Check1 = "0" et $Check1 = "1" à l'intérieur de la boucle While, comme ci-dessous.
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Button1
                        If $Check1 = "1" Then
                                IniWrite('config.ini', 'activation', 'check1', '0')
                                GUICtrlSetData($Button1, "desactivé", "")
                                $Check1 = "0"
                        Else
                                IniWrite('config.ini', 'activation', 'check1', '1')
                                GUICtrlSetData($Button1, "activé", "")
                                $Check1 = "1"
                        EndIf
        EndSwitch
WEnd
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Vchristelle
Niveau 1
Niveau 1
Messages : 3
Enregistré le : jeu. 08 déc. 2016 00:05
Status : Hors ligne

Re: [..] Comment modifier le texte d'un bouton après appuis

#4

Message par Vchristelle » jeu. 08 déc. 2016 02:01

merci ! c'est exactement ce que je recherchais, vous êtes très efficace !
en vous remerciant et aux plaisirs.

christelle V

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1467
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [R] Comment modifier le texte d'un bouton après appuis

#5

Message par orax » jeu. 08 déc. 2016 15:16

Il n'y a que 5 boutons, mais s'il y en avait 100... Le code est très redondant. Pour le simplifier, on peut utiliser des tableaux. Si la variable $Nb est changée, l'interface s'adapte.
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>

Global $Nb = 5 ; <=
Global $TopButtons = 8
Global $HeightButtons = 25

; tableaux
Global $Checks[$Nb]
Global $Buttons[$Nb]

$Form1 = GUICreate("Test 1", 121, $Nb * $TopButtons + $Nb * $HeightButtons + $TopButtons, 192, 124)

For $i = 0 To UBound($Checks) - 1
        $Checks[$i] = IniRead('config.ini', 'activation', 'check' & $i + 1, 0)

        If $Checks[$i] = "1" Then
                $Buttons[$i] = GUICtrlCreateButton("activé", 8, $TopButtons, 99, $HeightButtons)
        Else
                $Buttons[$i] = GUICtrlCreateButton("déactivé", 8, $TopButtons, 99, $HeightButtons)
        EndIf

        $TopButtons += 33 ; pareil que $YButton = $YButton + 33
Next

;~ _ArrayDisplay($Checks) ; pour afficher le tableau

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Buttons[0] To $Buttons[$Nb - 1]
                        $Index = $nMsg - $Buttons[0]
                        If $Checks[$Index] = "1" Then
                                IniWrite('config.ini', 'activation', 'check' & $Index + 1, '0')
                                GUICtrlSetData($Buttons[$Index], "desactivé", "")
                                $Checks[$Index] = "0"
                        Else
                                IniWrite('config.ini', 'activation', 'check' & $Index + 1, '1')
                                GUICtrlSetData($Buttons[$Index], "activé", "")
                                $Checks[$Index] = "1"
                        EndIf
        EndSwitch
WEnd
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Répondre