DyadyaGenya
Знающий
- Сообщения
- 300
- Репутация
- 10
Доброго времени суток. Пробую повесить на одну кнопку два действия: показ/скрытие дочернего окна. Пока что получается сделать только в том случае, если использую счетчик кликов по кнопке. Но хотелось бы обойтись без него. Пробую сделать так:
Тут несколько вариантов привязано на вторую кнопку, часть закоментирована, чтоб не путались. Но они работают не коректно. Где ошибка не могу понять.
Код:
#include <GUIConstantsEx.au3>
;Обязательно задавать элементам -1, чтобы не было ложного срабатывания событий в случае если (ещё) не создан элемент присваеваемый данной переменной
Global $nChildGUI_Close_Bttn = -1
Global $k = 0 ; счетчик кликов
$hMain_GUI = GUICreate("Главное окно", 250, 250)
$nChild_Button = GUICtrlCreateButton("Показать/Скрыть", 20, 220, 100, 20)
;Создаём элементы в главном окне
$nChildGUI_Close_Bttn = GUICtrlCreateButton("2 вариант", 20, 170, 100, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
;Создаём дочерний GUI, не отображая его на экране
$hChild_GUI = _ChildGUI_Create($hMain_GUI)
While 1
;Обработка событий в расширенном режиме
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
;Проверяем если "событие закрытия" поступило с главного-родительского GUI
If $aMsg[1] = $hMain_GUI Then Exit
;Если "событие закрытия" поступило с дочернего GUI, то просто прячем его
If $aMsg[1] = $hChild_GUI Then
GUISetState(@SW_HIDE, $hChild_GUI)
GUISetState(@SW_SHOW, $hMain_GUI)
EndIf
Case $nChild_Button
If Mod($k,2) = 0 Then
$k += 1
ConsoleWrite("по идее показать, потому к = " & $k & @CR)
;Показываем дочерний GUI при нажатий на кнопку "Показать/Скрыть"
GUISetState(@SW_SHOW, $hChild_GUI)
If Not WinActive($hChild_GUI) Then WinActivate($hChild_GUI)
Else
GUISetState(@SW_HIDE, $hChild_GUI)
$k += 1
ConsoleWrite("по идее скрыть, потому к = " & $k & @CR)
EndIf
Case $nChildGUI_Close_Bttn
;GUISetState(@SW_HIDE, $hChild_GUI)
;_Hid1()
_Hid2()
EndSwitch
WEnd
Func _Hid1()
If Not WinActive($hChild_GUI) Then
GUISetState(@SW_HIDE, $hMain_GUI)
GUISetState(@SW_SHOW, $hChild_GUI)
Else
GUISetState(@SW_SHOW, $hMain_GUI)
GUISetState(@SW_HIDE, $hChild_GUI)
EndIf
EndFunc
Func _Hid2()
If Not WinActive($hChild_GUI) Then
; GUISetState(@SW_HIDE, $hMain_GUI)
GUISetState(@SW_SHOW, $hChild_GUI)
Else
GUISetState(@SW_SHOW, $hMain_GUI)
GUISetState(@SW_HIDE, $hChild_GUI)
EndIf
EndFunc
Func _ChildGUI_Create($hParent)
Local $hChild_GUI
$hChild_GUI = GUICreate("Child GUI", 200, 200, -1, -1, -1, -1, $hParent)
Return $hChild_GUI
EndFunc
Тут несколько вариантов привязано на вторую кнопку, часть закоментирована, чтоб не путались. Но они работают не коректно. Где ошибка не могу понять.