Что нового

Закрытие GUI из окна

BORIS09087

Новичок
Сообщения
20
Репутация
0
Здравствуйте. Возникла проблемка с закрытием дочернего окна. Вот скриптик. при нажатии кнопки Reset, нужно что-бы закрывалось
только GUI запущенное с кнопки "1" из этого-же окна. WinClose - закрывает всё сразу. Что не так?

Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>

Local $tab

$Main_GUI = GUICreate("", 80, 90, 333, 222, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_LAYERED)
GUISetBkColor(0xFF0011)

$tab1 = GUICtrlCreateButton("1", 0, 0, 70, 25)
GUICtrlSetBkColor(-1, 0x3AE2CE)

$tab2 = GUICtrlCreateButton("Reset", 0, 25, 70, 25)
GUICtrlSetBkColor(-1, 0xFFDD00)

GUISetState(@SW_SHOW, $Main_GUI)

_WinAPI_SetLayeredWindowAttributes($Main_GUI, 0xFF0011, 0, $LWA_COLORKEY)


While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop


        Case $tab1                                                                 
             Beep(2000,100)

$casr = GUICreate("1", 800, 1, 332, 492, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFFDD00)
GUISetState()

        Case $tab2                                                                  
             Beep(2000,100)

WinClose($casr)
          
    EndSwitch
WEnd
 
Автор
B

BORIS09087

Новичок
Сообщения
20
Репутация
0
Точно! Большое спасибо!
Да..Есть ещё вопросик.
Как закрыть сразу несколько окон?
Код:
GUIDelete($casr)
GUIDelete($casr1)
GUIDelete($casr2)

если ставить подряд, закрывает только первое, потом выдаёт ошибку
 
Последнее редактирование:

SealAlbinos

Продвинутый
Сообщения
154
Репутация
57
Точно! Большое спасибо!
Да..Есть ещё вопросик.
Как закрыть сразу несколько окон?
Код:
GUIDelete($casr)
GUIDelete($casr1)
GUIDelete($casr2)

если ставить подряд, закрывает только первое, потом выдаёт ошибку
ошибка по причине того, что форма значит не была вызвана и скрипт просто не знает о существовании переменной, объявите переменную и ошибки не будет
Код:
Global $casr, $casr1,$casr2

Сообщение автоматически объединено:

Но лучше на самом деле форму не удалять, а изначально держать скрытой
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>

$Main_GUI = GUICreate("", 80, 90, 333, 222, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_LAYERED)
GUISetBkColor(0xFF0011)

$tab1 = GUICtrlCreateButton("1", 0, 0, 70, 25)
GUICtrlSetBkColor(-1, 0x3AE2CE)

$tab3 = GUICtrlCreateButton("2", 0, 50, 70, 25)
GUICtrlSetBkColor(-1, 0x3AE2CE)

$tab2 = GUICtrlCreateButton("Reset", 0, 25, 70, 25)
GUICtrlSetBkColor(-1, 0xFFDD00)

$casr1 = GUICreate("1", 800, 500, 332, 492, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFFfff)
GUISetState(@SW_HIDE,$casr1)

$casr = GUICreate("1", 800, 200, 332, 492, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFFDD00)
GUISetState(@SW_HIDE,$casr)

GUISetState(@SW_SHOW, $Main_GUI)
_WinAPI_SetLayeredWindowAttributes($Main_GUI, 0xFF0011, 0, $LWA_COLORKEY)

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $tab3
            GUISetState(@SW_SHOW,$casr1)
        Case $tab1
            GUISetState(@SW_SHOW,$casr)
        Case $tab2
            GUISetState(@SW_HIDE,$casr1)
            GUISetState(@SW_HIDE,$casr)
    EndSwitch
WEnd
 
Автор
B

BORIS09087

Новичок
Сообщения
20
Репутация
0
Большое Спасибо, Вы мне очень помогли! Действительно, вариант со скрытой формой гораздо элегантней!..
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Действительно, вариант со скрытой формой гораздо элегантней!..
Нет. Ресурсы связанные с окном не освобождаются. Если окно больше не нужно, нет смысла держать его открытым.
Если решите открыть новое окно записав дескриптор в ту же переменную, открытое ранее окно никуда не денется, но вы потеряете над ним контроль (потеряете дескриптор).
 
Верх