[..] Cacher les contrôles avec l'UDF GuiExtender

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

[..] Cacher les contrôles avec l'UDF GuiExtender

#1

Message par jpascal »

Bonjour,

Je définis un contrôle avec l'état "caché"'.
Si j'utilise la fonction _GUIExtender_Section_Action(), ce contrôle devient "visible".
Je dois donc le placer après cette commande.

Si j'affiche ou que je cache une section avec un bouton (et donc la fonction _GUIExtender_Section_Action), je suis obligé de cacher à nouveau le contrôle ensuite.
Ma fonction Toggle() > bad
Ma fonction ToggleAndHide() > ok

Le plus embêtant est que ce problème apparaît également lorsque l'on réduit/restaure la fenêtre.

Y a-t-il une astuce pour que l'état des contrôles soient conservés lors de la (dés)activation d'une section ?

Voici le lien vers l'UDF : https://www.autoitscript.com/forum/topi ... 10-mar-21/

et mon code pour tester :
#Region Includes
#include <GUIConstantsEx.au3>
#include <GUIExtender.au3>
#EndRegion Includes

#Region Variables
Global $hGUI = 0
Global $idButton_Toggle = 0, $idButton_ToggleAndHide = 0, $idButton_Test = 0
#EndRegion Variables

Main()


Func Main()
   Opt("TrayIconHide", 1)
   Opt("GUIOnEventMode", 1)

   CreateGUI()

   GUISetState(@SW_SHOW, $hGUI)

   While 1
      Sleep(10)
   WEnd
EndFunc   ;==>Main

Func CreateGUI()
   $hGUI = GUICreate("GUI Extender", 400, 200)
   GUISetOnEvent($GUI_EVENT_CLOSE, "CloseWindow")

   _GUIExtender_Init($hGUI, 1)

   _GUIExtender_Section_Create($hGUI, Default, 240)

   $idButton_Test = GUICtrlCreateButton('Test', 30, 100, 40, 25)

   _GUIExtender_Section_Activate($hGUI, 2)
   $idButton_Toggle = GUICtrlCreateButton(">", 200, 20, 20, 20)
   GUICtrlSetOnEvent(-1, "Toggle")
   $idButton_ToggleAndHide = GUICtrlCreateButton(">", 200, 50, 20, 20)
   GUICtrlSetOnEvent(-1, "ToggleAndHide")

   _GUIExtender_Section_Create($hGUI, Default, Default)

   _GUIExtender_Section_Create($hGUI, -99)

   GUICtrlSetState($idButton_Test, $GUI_HIDE) ; NE FONCTIONNE PAS

   _GUIExtender_Section_Action($hGUI, 2, False) ; cache la partie Infos

   GUICtrlSetState($idButton_Test, $GUI_HIDE) ; FONCTIONNE
EndFunc   ;==>CreateGUI


Func Toggle()
   If GUICtrlRead($idButton_Toggle) = '>' Then
      GUICtrlSetData($idButton_Toggle, '<')
      GUICtrlSetData($idButton_ToggleAndHide, '<')
      GUICtrlSetState($idButton_Test, $GUI_HIDE) ; NE FONCTIONNE PAS
   Else
      GUICtrlSetData($idButton_Toggle, '>')
      GUICtrlSetData($idButton_ToggleAndHide, '>')
   EndIf
   _GUIExtender_Section_Action($hGUI, 2, 9)
EndFunc   ;==>Toggle

Func ToggleAndHide()
   If GUICtrlRead($idButton_ToggleAndHide) = '>' Then
      GUICtrlSetData($idButton_Toggle, '<')
      GUICtrlSetData($idButton_ToggleAndHide, '<')
   Else
      GUICtrlSetData($idButton_Toggle, '>')
      GUICtrlSetData($idButton_ToggleAndHide, '>')
   EndIf
   _GUIExtender_Section_Action($hGUI, 2, 9)

   If GUICtrlRead($idButton_ToggleAndHide) = '>' Then GUICtrlSetState($idButton_Test, $GUI_HIDE) ; FONCTIONNE CAR PLACÉ APRÈS
EndFunc   ;==>ToggleAndHide

Func CloseWindow()
   Exit
EndFunc   ;==>CloseWindow
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Cacher les contrôles avec l'UDF GuiExtender

#2

Message par jpascal »

Même si j'ajoute une fonction pour sauvegarder l'état des boutons et une autre pour restaurer, cela ne fonctionne pas.
En effet, les actions de l'UDF lors de la restauration de la fenêtre sont exécutées après celle de GUISetOnEvent()

AddStateCtrlID(-1) permet d'ajouter le contrôle ainsi que son état lors de sa création.

#Region Includes
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GUIExtender.au3>
#EndRegion Includes

#Region Variables
Global $g_aCtrlID[0][2]

Global $hGUI = 0
Global $idButton_Toggle = 0, $idButton_ToggleAndHide = 0, $idButton_Test = 0
#EndRegion Variables

Main()


Func Main()
   Opt("TrayIconHide", 1)
   Opt("GUIOnEventMode", 1)

   CreateGUI()

   GUISetState(@SW_SHOW, $hGUI)

   While 1
      Sleep(10)
   WEnd
EndFunc   ;==>Main

Func CreateGUI()
   $hGUI = GUICreate("GUI Extender", 400, 200)
   GUISetOnEvent($GUI_EVENT_CLOSE, "CloseWindow")
   GUISetOnEvent($GUI_EVENT_MINIMIZE, "SaveStateAllCtrl")
   GUISetOnEvent($GUI_EVENT_RESTORE, "RestoreStateAllCtrl")

   _GUIExtender_Init($hGUI, 1)

   _GUIExtender_Section_Create($hGUI, Default, 240)

   $idButton_Test = GUICtrlCreateButton('Test', 30, 100, 40, 25)
   AddStateCtrlID(-1)

   _GUIExtender_Section_Activate($hGUI, 2)
   $idButton_Toggle = GUICtrlCreateButton(">", 200, 20, 20, 20)
   GUICtrlSetOnEvent(-1, "Toggle")
   $idButton_ToggleAndHide = GUICtrlCreateButton(">", 200, 50, 20, 20)
   GUICtrlSetOnEvent(-1, "ToggleAndHide")

   _GUIExtender_Section_Create($hGUI, Default, Default)

   _GUIExtender_Section_Create($hGUI, -99)

   GUICtrlSetState($idButton_Test, $GUI_HIDE) ; NE FONCTIONNE PAS

   _GUIExtender_Section_Action($hGUI, 2, False) ; cache la partie Infos

   GUICtrlSetState($idButton_Test, $GUI_HIDE) ; FONCTIONNE
EndFunc   ;==>CreateGUI


Func AddStateCtrlID(ByRef $iCtrlId)
   Local $hWnd = GUICtrlGetHandle($iCtrlId) ; Get the handle of the controlid
   If $hWnd And $iCtrlId = -1 Then ; Get the controlid if $iCtrlID is -1
      $iCtrlId = _WinAPI_GetDlgCtrlID($hWnd) ; Support for $iCtrlID = Default or $iCtrlID = -1
   EndIf
   _ArrayAdd($g_aCtrlID, $iCtrlId & '|' & GUICtrlGetState($iCtrlId))
EndFunc   ;==>AddStateCtrlID

Func RestoreStateAllCtrl()
   For $i = 0 To UBound($g_aCtrlID) - 1
      GUICtrlSetState($g_aCtrlID[$i][0], $g_aCtrlID[$i][1])
   Next
EndFunc   ;==>RestoreStateAllCtrl

Func SaveStateAllCtrl()
   For $i = 0 To UBound($g_aCtrlID) - 1
      $g_aCtrlID[$i][1] = GUICtrlGetState($g_aCtrlID[$i][0])
   Next
EndFunc   ;==>SaveStateAllCtrl

Func Toggle()
   If GUICtrlRead($idButton_Toggle) = '>' Then
      GUICtrlSetData($idButton_Toggle, '<')
      GUICtrlSetData($idButton_ToggleAndHide, '<')
      GUICtrlSetState($idButton_Test, $GUI_HIDE) ; NE FONCTIONNE PAS
   Else
      GUICtrlSetData($idButton_Toggle, '>')
      GUICtrlSetData($idButton_ToggleAndHide, '>')
   EndIf
   _GUIExtender_Section_Action($hGUI, 2, 9)
EndFunc   ;==>Toggle

Func ToggleAndHide()
   If GUICtrlRead($idButton_ToggleAndHide) = '>' Then
      GUICtrlSetData($idButton_Toggle, '<')
      GUICtrlSetData($idButton_ToggleAndHide, '<')
   Else
      GUICtrlSetData($idButton_Toggle, '>')
      GUICtrlSetData($idButton_ToggleAndHide, '>')
   EndIf
   _GUIExtender_Section_Action($hGUI, 2, 9)

   If GUICtrlRead($idButton_ToggleAndHide) = '>' Then GUICtrlSetState($idButton_Test, $GUI_HIDE) ; FONCTIONNE CAR PLACÉ APRÈS
EndFunc   ;==>ToggleAndHide

Func CloseWindow()
   Exit
EndFunc   ;==>CloseWindow
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre