[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 »

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 »

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 : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#3

Message par orax »

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 »

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 : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#5

Message par orax »

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