Что нового

[Элементы GUI] Открытие дочернего окна

maks.plotnikoff

Новичок
Сообщения
6
Репутация
0
Не получается открыть дочернее окно "Капучино".
Прошу помощи :'(
Код:
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
coffee()

Func coffee()

Local $Button_1, $Button_2, $Button_3, $Button_4, $Button_5, $Button_6, $Button_7, $Button_8, $Button_9, $Button_10, $Button_11, $Button_12, $Button_13, $msg, $font, $Check, $hTimer; Создание переменных

$font = "Palatino Linotype"
$hTimer = TimerInit()

$GUIsugar1 = GUICreate("Кофемашина", 700, 500, -1, -1); Создание окна

GUICtrlCreateLabel("Здравствуйте, пожалуйста выберите интересующий Вас напиток.", 10, 10, 700, 50); Создание текста в окне
GUICtrlSetFont(-1, 16, 400, 0, $font); Изменение шрифта

$Button_1 = GUICtrlCreateButton("Экспрессо", 30, 50, 110, 50); Создание кнопки с надписью внутри
GUICtrlSetFont(-1, 16, 400, 0, $font)
$Button_8 = GUICtrlCreateButton("Капучино", 30, 110, 110, 50); Создание кнопки с надписью внутри
GUICtrlSetFont(-1, 16, 400, 0, $font)

GUISetState(); Показывает окно

While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button_1 
		$GUIsugar2 = GUICreate("Выберите количество сахара", 500, 365, -1, -1);
				

        $Button_2 = GUICtrlCreateButton("", 45, 25, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "no-sugar.bmp")

        $Button_3 = GUICtrlCreateButton("", 45, 135, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "2sugar.bmp")

        $Button_4 = GUICtrlCreateButton("", 255, 25, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "1sugar.bmp")

        $Button_5 = GUICtrlCreateButton("", 255, 135, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "3sugar.bmp")
		
		$Check = GUICtrlCreateCheckbox("Использовать функцию ""Свой стакан""", 150, 245, 250, 20)
		
		$Button_6 = GUICtrlCreateButton("Отмена", 150, 265, 200, 100)
		GUICtrlSetFont(-1, 16, 400, 0, $font)		
GUISetState(); Показывает окно




While 1
$msg = GUIGetMsg()

Select
    Case $msg = $Button_2
				$GUIsugar3 = GUICreate("Приготовление кофе",370, 100, -1, -1)
					GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar2)
				GUIDelete($GUIsugar3)
				  ExitLoop
GUISetState(); Показывает окно

    Case $msg = $Button_3 
		$GUIsugar3 = GUICreate("Приготовление кофе",370, 100, -1, -1)
					GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar2)
				GUIDelete($GUIsugar3)
				  ExitLoop
GUISetState(); Показывает окно

    Case $msg = $Button_4
		$GUIsugar3 = GUICreate("Приготовление кофе",370, 100, -1, -1); 
		GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar2)
				GUIDelete($GUIsugar3)
				  ExitLoop
		
GUISetState(); Показывает окно

  ExitLoop
    Case $msg = $Button_5 
                GUICreate("Приготовление кофе", 300, 430, -1, -1);
		$GUIsugar3 = GUICreate("Приготовление кофе",370, 100, -1, -1)
					GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar2)
				GUIDelete($GUIsugar3)
				  ExitLoop				
				GUISetState(); Показывает окно
Case $msg = $Button_6
			$Button_6 = GUICtrlCreateButton("Отмена", 150, 245, 200, 100)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
				GUIDelete($GUIsugar2)
  ExitLoop
EndSelect
WEnd
EndSelect
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button_8 
		$GUIsugar4 = GUICreate("Выберите количество сахара", 500, 365, -1, -1);
				

        $Button_9 = GUICtrlCreateButton("", 45, 25, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "no-sugar.bmp")

        $Button_10 = GUICtrlCreateButton("", 45, 135, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "2sugar.bmp")

        $Button_11 = GUICtrlCreateButton("", 255, 25, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "1sugar.bmp")

        $Button_12 = GUICtrlCreateButton("", 255, 135, 200, 100, $BS_PUSHLIKE + $BS_BITMAP)
        GUICtrlSetImage(-1, "3sugar.bmp")
		
		$Check = GUICtrlCreateCheckbox("Использовать функцию ""Свой стакан""", 150, 245, 250, 20)
		
		$Button_13 = GUICtrlCreateButton("Отмена", 150, 265, 200, 100)
		GUICtrlSetFont(-1, 16, 400, 0, $font)		
GUISetState(); Показывает окно

While 1
$msg = GUIGetMsg()

Select
    Case $msg = $Button_9
        GUICreate("Приготовление кофе", 300, 430, -1, -1); 
				$GUIsugar5 = GUICreate("Приготовление кофе",370, 100, -1, -1)
					GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar4)
				GUIDelete($GUIsugar5)
				  ExitLoop
GUISetState(); Показывает окно

    Case $msg = $Button_10 
		$GUIsugar5 = GUICreate("Приготовление кофе",370, 100, -1, -1)
					GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar4)
				GUIDelete($GUIsugar5)
				  ExitLoop
GUISetState(); Показывает окно

    Case $msg = $Button_11
		$GUIsugar5 = GUICreate("Приготовление кофе",370, 100, -1, -1); 
		GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar4)
				GUIDelete($GUIsugar5)
				  ExitLoop
		
GUISetState(); Показывает окно

  ExitLoop
    Case $msg = $Button_12 
                GUICreate("Приготовление кофе", 300, 430, -1, -1);
		$GUIsugar5 = GUICreate("Приготовление кофе",370, 100, -1, -1)
					GUICtrlCreateLabel("Пожалуйста ждите, Ваш кофе будет готов через 5 секунд.", 10, 10, 350, 60, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			GUISetState()
		Sleep(5000)
		GUICtrlCreateLabel("Ваш кофе готов!", 10, 10, 360, 500, $SS_CENTER)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
			Sleep(2000)
				GUIDelete($GUIsugar1)
				GUIDelete($GUIsugar4)
				GUIDelete($GUIsugar5)
				  ExitLoop				
				GUISetState(); Показывает окно
Case $msg = $Button_13
			$Button_13 = GUICtrlCreateButton("Отмена", 150, 245, 200, 100)
			GUICtrlSetFont(-1, 16, 400, 0, $font)
				GUIDelete($GUIsugar4)
  ExitLoop
EndSelect
WEnd
EndSelect
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
maks.plotnikoff,
Я бы сделал примерно так. (Почти не использовал циклы, чтобы код был понятен. :smile: )
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>

Local $aCoffee[3] = [0, 'Экспрессо', 'Капучино'], $iSugar, $aYour_Glass[2] = ['наш', 'Ваш'], $iSec = 5, $sTxt, _
        $aMsg, $hGUI_Coffee_Machine, $iBtn_Espresso, $iBtn_Cappuccino, _
        $hGUI_Sugar, $iBtn_No, $iBtn_1, $iBtn_2, $iBtn_3, $iChb_Your_Glass, $iBtn_Cancel, _
        $hGUI_Coffee_Preparation, $iLbl_Prep

;~ Основное окно
$hGUI_Coffee_Machine = GUICreate('Кофемашина', 700, 500)
GUICtrlCreateLabel('Здравствуйте, пожалуйста выберите интересующий Вас напиток.', 10, 10, 700, 50)
$iBtn_Espresso = GUICtrlCreateButton($aCoffee[1], 30, 50, 110, 50)
$iBtn_Cappuccino = GUICtrlCreateButton($aCoffee[2], 30, 110, 110, 50)
For $i = $iBtn_Espresso - 1 To $iBtn_Cappuccino
    GUICtrlSetFont($i, 16, 400, 0, 'Palatino Linotype')
Next
;~ Окно Выберите количество сахара
$hGUI_Sugar = GUICreate('Выберите количество сахара', 500, 370, -1, -1, -1, -1, $hGUI_Coffee_Machine)
$iBtn_No = GUICtrlCreateButton('No', 45, 25, 200, 100, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_PUSHLIKE, $BS_BITMAP))
$iBtn_1 = GUICtrlCreateButton('1', 255, 25, 200, 100, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_PUSHLIKE, $BS_BITMAP))
$iBtn_2 = GUICtrlCreateButton('2', 45, 135, 200, 100, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_PUSHLIKE, $BS_BITMAP))
$iBtn_3 = GUICtrlCreateButton('3', 255, 135, 200, 100, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_PUSHLIKE, $BS_BITMAP))
$iChb_Your_Glass = GUICtrlCreateCheckbox('Использовать функцию "Свой стакан"', 150, 245, 250, 20)
$iBtn_Cancel = GUICtrlCreateButton('Отмена', 150, 265, 200, 100)

;~ Окно Приготовление кофе
$hGUI_Coffee_Preparation = GUICreate('Приготовление кофе', 370, 100)
$iLbl_Prep = GUICtrlCreateLabel('', 10, 10, 350, 80, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER))

GUISetState(@SW_SHOW, $hGUI_Coffee_Machine)

While 1
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE
            Switch $aMsg[1]
                Case $hGUI_Coffee_Machine
                    ExitLoop
                Case $hGUI_Sugar
                    GUISetState(@SW_HIDE, $hGUI_Sugar)
            EndSwitch
        Case $iBtn_Espresso
            $aCoffee[0] = 1
            GUICtrlSetState($iChb_Your_Glass, $GUI_UNCHECKED)
            GUISetState(@SW_SHOW, $hGUI_Sugar)
        Case $iBtn_Cappuccino
            $aCoffee[0] = 2
            GUICtrlSetState($iChb_Your_Glass, $GUI_UNCHECKED)
            GUISetState(@SW_SHOW, $hGUI_Sugar)
        Case $iBtn_No To $iBtn_3
            Switch $aMsg[0]
                Case $iBtn_No
                    $iSugar = 0
                Case $iBtn_1
                    $iSugar = 1
                Case $iBtn_2
                    $iSugar = 2
                Case $iBtn_3
                    $iSugar = 3
            EndSwitch
            $sTxt = 'Пожалуйста, ждите, Ваш кофе ' & $aCoffee[$aCoffee[0]] & ' (сахара - ' & $iSugar & ', стакан - ' & _
                    $aYour_Glass[GUICtrlSendMsg($iChb_Your_Glass, $BM_GETCHECK, 0, 0)] & ') будет готов через '
            GUISetState(@SW_HIDE, $hGUI_Sugar)
            GUISetState(@SW_SHOW, $hGUI_Coffee_Preparation)
            GUISetState(@SW_HIDE, $hGUI_Coffee_Machine)
            For $i = $iSec To 1 Step -1
                GUICtrlSetData($iLbl_Prep, $sTxt & $i & ' секунд.')
				Sleep(1000)
            Next
			$sTxt = ''
            GUICtrlSetData($iLbl_Prep, 'Ваш кофе готов!')
            Sleep(3000)
            GUISetState(@SW_HIDE, $hGUI_Coffee_Preparation)
            GUISetState(@SW_SHOW, $hGUI_Coffee_Machine)
        Case $iBtn_Cancel
            GUISetState(@SW_HIDE, $hGUI_Sugar)
    EndSwitch
WEnd
 
Автор
M

maks.plotnikoff

Новичок
Сообщения
6
Репутация
0
madmasles, а можешь написать комментарии к циклу? А то я чуть-чуть запутался :sweating:
 

Pat4005

Новичок
Сообщения
85
Репутация
4
Мне кажется, товарища maks.plotnikoff интересует, как это из двух его циклов получился один, а главное каким образом так работает.
Если я прав, то вот как раз ответ из неофициального FAQ по AutoIt: пыщ.

P. S. Я считаю метод с несколькими циклами как минимум более простым для освоения. Сам использую его, ведь действительно удобно, когда отдельное окно создаётся и вызывается из предназначенной для него функции, и внутри же этой функции обрабатываются все нажатия на элементы этого окна.
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
maks.plotnikoff, Дочернее окно с блокировкой родительского - http://pastebin.com/fWcPjjfP
 
Верх