Что нового

Элементы GUI При закрытии Form 2 закрывается Form 1

aptyp

Новичок
Сообщения
36
Репутация
0
Есть форма 1, с кнопкой, открывающей форму 2.
Есть форма 2, с кнопкой закрытия окна.

Как сделать, чтобы при закрытии формы 2 на кнопку [X] не закрывалась форма 1?

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

$Form1 = GUICreate("Form 1", 320, 240)
$Button1 = GUICtrlCreateButton("Открыть окно 2", 110, 100, 100, 25)

$Form2 = GUICreate("Form 2", 320, 240, -1, -1, BitOR($WS_POPUPWINDOW, $WS_CAPTION))
; BitOR включает опции: 1. $WS_POPUPWINDOW комбинируемый заголовок окна 2. $WS_CAPTION добавить в заголовок кнопку [X]

GUISetBkColor($COLOR_SILVER)
; Цвет фона $Form2

GUISetState(@SW_SHOW, $Form1)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            openForm2()
            GUISetState(@SW_DISABLE, $Form1)
    EndSwitch
WEnd

Func openForm2()
    GUISetState(@SW_SHOW, $Form2)
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вариант
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ColorConstants.au3>

Global $Form1 = GUICreate("Form 1", 320, 240)
Local $Button1 = GUICtrlCreateButton("Открыть окно 2", 110, 100, 100, 25)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            openForm2()
    EndSwitch
WEnd

Func openForm2()
    GUISetState(@SW_DISABLE, $Form1)
    Local $Form2 = GUICreate("Form 2", 320, 240, -1, -1, BitOR($WS_POPUPWINDOW, $WS_CAPTION))
    GUISetBkColor($COLOR_SILVER)
    GUISetState()
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                GUISetState(@SW_ENABLE, $Form1)
                GUIDelete($Form2)
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>openForm2
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
В нем грабли, которые проявятся если в основном цикле будет обработка других событий кроме кнопки $Button1.
да, взаимодействие возможно только с одним окном. но это решаемо, если использовать только один цикл и подключить WM_COMMAND
ну или так
Код:
Global $Form1 = GUICreate("Form 1", 320, 240)
Local $Button1 = GUICtrlCreateButton("Открыть окно 2", 110, 100, 100, 25)
Global $Button2 = GUICtrlCreateButton("Int_1", 10, 10, 100, 25)
Global $Form2 = GUICreate("Form 2", 320, 240, -1, -1, BitOR($WS_POPUPWINDOW, $WS_CAPTION))
Global $Btn = GUICtrlCreateButton("Int_2", 10, 10, 100, 25)
GUISetBkColor($COLOR_SILVER)
GUISetState(@SW_SHOW, $Form1)
Local $msg
While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1]
        Case $Form1
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $Button1
                    openForm2()
                Case $Button2
                    _Int_1()
            EndSwitch
        Case $Form2
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    GUISetState(@SW_HIDE, $Form2)
                Case $Btn
                    _Int_2()
            EndSwitch
    EndSwitch
WEnd

Func openForm2()
    GUISetState(@SW_SHOW, $Form2)
EndFunc   ;==>openForm2

Func _Int_1()
    GUICtrlSetData($Button2, Random(1, 5000, 1))
EndFunc   ;==>_Int_1

Func _Int_2()
    GUICtrlSetData($Btn, Random(1, 5000, 1))
EndFunc   ;==>_Int_2
 
Верх