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
#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