Page 1 sur 1

[R] Boucle avec inputs clignotants

Posté : mar. 23 août 2016 14:22
par benzo
Bonjour,
J'ai deux boutons radios dans ma GUI.
Je coche un des deux et cela a pour effet de griser les "inputs".
Problème, ils clignotent très vite et c'est un peux dégueux visuellement. :roll:
Merci d'avance pour vos propositions.
Opt("GuiOnEventMode", 1)
$Form1 = GUICreate(" Check 11.08.2016", 436, 273, 192, 114)
$Button1 = GUICtrlCreateButton("Appliquer", 256, 40, 131, 169, $WS_GROUP)
GUICtrlSetOnEvent($Button1, "_appliquer")
$Label1 = GUICtrlCreateLabel("@iP", 64, 40, 24, 17)
$ButtonAdresseIP = GUICtrlCreateInput(@IPAddress1, 96, 40, 121, 21)

;GUICtrlSetState($AdresseIP, $GUI_ENABLE)
$ButtonMask = GUICtrlCreateInput("", 96, 72, 121, 21)
$ButtonPasserelle = GUICtrlCreateInput("", 96, 104, 121, 21)
$ButtonDns = GUICtrlCreateInput("", 96, 136, 121, 21)
$AdresseIP = GUICtrlRead($ButtonAdresseIP)
$Mask = GUICtrlRead($ButtonMask)
$Passerelle = GUICtrlRead($ButtonPasserelle)
$Dns = GUICtrlRead($ButtonDns)

$Label2 = GUICtrlCreateLabel("Masque", 48, 72, 42, 17)
$Label3 = GUICtrlCreateLabel("Passerelle", 40, 104, 52, 17)
$Label4 = GUICtrlCreateLabel("Dns", 64, 136, 23, 17)
$CheckboxDhcp = GUICtrlCreateRadio("Dhcp", 96, 168, 97, 17)
;GUICtrlSetState($CheckboxDhcp, $GUI_UNCHECKED)

$CheckboxTest = GUICtrlCreateRadio("Test", 96, 192, 97, 17)
GUICtrlSetState($CheckboxTest, $GUI_CHECKED)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

While 1
   $idMsg = GUIGetMsg()
   Switch $idMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $idMsg = $CheckboxDhcp
         sleep(200)
         If GUICtrlRead($CheckboxDhcp) = $GUI_CHECKED Then
            GUICtrlSetState($ButtonAdresseIP, $GUI_DISABLE)
            GUICtrlSetState($ButtonMask, $GUI_DISABLE)
            GUICtrlSetState($ButtonPasserelle, $GUI_DISABLE)
            GUICtrlSetState($ButtonDns, $GUI_DISABLE)
            else
            GUICtrlSetState($ButtonAdresseIP, $GUI_ENABLE)
            GUICtrlSetState($ButtonMask, $GUI_ENABLE)
            GUICtrlSetState($ButtonPasserelle, $GUI_ENABLE)
            GUICtrlSetState($ButtonDns, $GUI_ENABLE)
         EndIf
      Case $idMsg = $CheckboxTest
         sleep(200)
         If GUICtrlRead($CheckboxTest) = $GUI_CHECKED Then
            GUICtrlSetState($ButtonAdresseIP, $GUI_ENABLE)
            GUICtrlSetState($ButtonMask, $GUI_ENABLE)
            GUICtrlSetState($ButtonPasserelle, $GUI_ENABLE)
            GUICtrlSetState($ButtonDns, $GUI_ENABLE)
         Else
            GUICtrlSetState($ButtonAdresseIP, $GUI_DISABLE)
            GUICtrlSetState($ButtonMask, $GUI_DISABLE)
            GUICtrlSetState($ButtonPasserelle, $GUI_DISABLE)
            GUICtrlSetState($ButtonDns, $GUI_DISABLE)
         EndIf
   EndSwitch
WEnd

Re: [...] Boucle avec inputs clignotants

Posté : mar. 23 août 2016 17:13
par jguinch
A première vue, il y a un problème : tu utilises le mode Onevent (GuiOnEventMode = 1) et GUIGetMsg, ce qui, me semble t-il, n'est pas compatible

Re: [...] Boucle avec inputs clignotants

Posté : mar. 23 août 2016 17:34
par orax
Et il y a une mauvaise utilisation de Switch...Case.

Re: [...] Boucle avec inputs clignotants

Posté : mar. 23 août 2016 17:54
par walkson
Et ça ne clignote pas.
Vous pouvez utiliser TimerInit ( ) ou AdlibRegister () pour le faire à l'allure souhaitée

Re: [...] Boucle avec inputs clignotants

Posté : mer. 24 août 2016 11:19
par benzo
@jguinch, effectivement ce n'est pas très logique d'utiliser GuiOnEventMode = 1 et GUIGetMsg
J'ai vu dans la doc que si GuiOnEventMode = 1alors tout ce qui est retourné par GuiGetMsg sera à 0

Du coup j'ai opté pour créer 2 fonctions déclenchées grâce au GuiOnEventMode (voir code à la fin du post)

@orax ok je ne testais pas bien les différentes valeurs de l'expression $idMsg mais du coup je n'ai plus ce contrôle de conditions à tester dans la boucle puisque j'opte pour le GuiOnEventMode

@walkson ,sisi ca clignote je te jure :P
mettre une temporisation n'est pas adaptée dans mon cas puisque je souhaite une action immédiate et un rafraichissement immédiat de l'interface
en fonction du choix de l'utilisateur

En tout cas merci à tous pour votre aide.
Opt("GuiOnEventMode", 1)
$Form1 = GUICreate(" Check", 436, 273, 192, 114)
$Button1 = GUICtrlCreateButton("Appliquer", 256, 40, 131, 169, $WS_GROUP)
GUICtrlSetOnEvent($Button1, "_appliquer")
$Label1 = GUICtrlCreateLabel("@iP", 64, 40, 24, 17)
$ButtonAdresseIP = GUICtrlCreateInput(@IPAddress1, 96, 40, 121, 21)

;GUICtrlSetState($AdresseIP, $GUI_ENABLE)
$ButtonMask = GUICtrlCreateInput("", 96, 72, 121, 21)
$ButtonPasserelle = GUICtrlCreateInput("", 96, 104, 121, 21)
$ButtonDns = GUICtrlCreateInput("", 96, 136, 121, 21)
$AdresseIP = GUICtrlRead($ButtonAdresseIP)
$Mask = GUICtrlRead($ButtonMask)
$Passerelle = GUICtrlRead($ButtonPasserelle)
$Dns = GUICtrlRead($ButtonDns)

$Label2 = GUICtrlCreateLabel("Masque", 48, 72, 42, 17)
$Label3 = GUICtrlCreateLabel("Passerelle", 40, 104, 52, 17)
$Label4 = GUICtrlCreateLabel("Dns", 64, 136, 23, 17)
$CheckboxDhcp = GUICtrlCreateRadio("Dhcp", 96, 168, 97, 17)
GUICtrlSetOnEvent($CheckboxDhcp, "checkboxDhcpClic")
$CheckboxTest = GUICtrlCreateRadio("Test", 96, 192, 97, 17)
GUICtrlSetState($CheckboxTest, $GUI_CHECKED)
GUICtrlSetOnEvent($CheckboxTest, "checkboxTestClic")
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

While 1
   sleep(100)
WEnd

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; F O N C T I O N S ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func checkboxDhcpClic()
   If GUICtrlRead($CheckboxDhcp) = $GUI_CHECKED Then
      GUICtrlSetState($ButtonAdresseIP, $GUI_DISABLE)
      GUICtrlSetState($ButtonMask, $GUI_DISABLE)
      GUICtrlSetState($ButtonPasserelle, $GUI_DISABLE)
      GUICtrlSetState($ButtonDns, $GUI_DISABLE)

   Else

      GUICtrlSetState($ButtonAdresseIP, $GUI_ENABLE)
      GUICtrlSetState($ButtonMask, $GUI_ENABLE)
      GUICtrlSetState($ButtonPasserelle, $GUI_ENABLE)
      GUICtrlSetState($ButtonDns, $GUI_ENABLE)
   EndIf
endfunc

Func checkboxTestClic()
   If GUICtrlRead($CheckboxTest) = $GUI_CHECKED Then
      GUICtrlSetState($ButtonAdresseIP, $GUI_ENABLE)
      GUICtrlSetState($ButtonMask, $GUI_ENABLE)
      GUICtrlSetState($ButtonPasserelle, $GUI_ENABLE)
      GUICtrlSetState($ButtonDns, $GUI_ENABLE)

   Else
      GUICtrlSetState($ButtonAdresseIP, $GUI_DISABLE)
      GUICtrlSetState($ButtonMask, $GUI_DISABLE)
      GUICtrlSetState($ButtonPasserelle, $GUI_DISABLE)
      GUICtrlSetState($ButtonDns, $GUI_DISABLE)

   EndIf
EndFunc   ;