Что нового

Закрытие GUI без остановки скрипта

le1to

Новичок
Сообщения
14
Репутация
0
Привет!
Есть такая задача: несколько раз в день в определенное время появляются уведомления, MsgBox для этого мал, решил воспользоваться GUI и Label с Font на нем. Но появилась проблема, GUI должен закрываться по нажатию баттона, но из-за ExitLoop он виснет, а из-за Exit закрывает скрипт.
Где ошибка? Как сделать, чтоб кнопка закрывала GUI, но скрипт продолжал работать, т.к. будут другие функции для другого времени?
Код:
#include <GuiConstantsEx.au3>

While 1
   If @HOUR = 12 And @MIN = 00 And @SEC = 00 Then
	  day ()
   EndIf
   WEnd

Func day ()
   GUICreate ("", 130, 70)
GUISetState(@SW_SHOW)
$iBtn = GUICtrlCreateButton ("OK", 0, 35, 130, 35)
$iLbl = GUICtrlCreateLabel ("День", 52, 10, 30, 20)

Local $iMsg
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $iBtn
            ExitLoop
        Case $GUI_EVENT_CLOSE
		   ExitLoop
		EndSwitch
	 WEnd
	 EndFunc
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
le1to
А скрипт и продолжает работать, но Ваше окно остаётся существовать в видимом состоянии. Смотрите функции:
Код:
GUIDelete()
GUISetState()
 
Автор
L

le1to

Новичок
Сообщения
14
Репутация
0
Пробовал присваивать кнопке в появляющемся GUI и GUIDelete и GUISetState, что то он виснит, не могу понять.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
le1to
Код:
#include <GuiConstantsEx.au3>

Global $hGui, $iBtn, $iLbl
While Sleep( 10 )
	If @HOUR = 12 And @MIN = 00 And @SEC = 00 Then
		day ()
	EndIf
WEnd

Func day ()
	If Not $hGui Then
		$hGui = GUICreate ("", 130, 70)
		$iBtn = GUICtrlCreateButton ("OK", 0, 35, 130, 35)
		$iLbl = GUICtrlCreateLabel ("День", 52, 10, 30, 20)
	EndIf
	GUISetState(@SW_SHOW, $hGui)

	While 1
		Switch GUIGetMsg()
			Case $iBtn
				ExitLoop
			Case $GUI_EVENT_CLOSE
				ExitLoop
		EndSwitch
	WEnd

	GUISetState(@SW_HIDE, $hGui )
EndFunc
 

GUIMish

Знающий
Сообщения
122
Репутация
12
Можно еще и таким своеобразным путем пойти.

Код:
#include <GuiConstantsEx.au3>

Global $WinDi = True

While 1
	If @HOUR = 12 And @MIN = 00 And @SEC = 00 Then
		$WinDi = True
		Day()
	EndIf
WEnd

Func Day()
	If $WinDi = True Then
		$WinDi = False
		$Win = GUICreate ("", 130, 70)
		GUISetState(@SW_SHOW)
		$iBtn = GUICtrlCreateButton ("OK", 0, 35, 130, 35)
		$iLbl = GUICtrlCreateLabel ("День", 52, 10, 30, 20)

		Local $iMsg
		While 1
			$iMsg = GUIGetMsg()
			Switch $iMsg
				Case $iBtn
					ExitLoop
					GUIDelete($Win)
				Case $GUI_EVENT_CLOSE
					ExitLoop
					GUIDelete($Win)
			EndSwitch
		WEnd
	EndIf
EndFunc
 
M

max1300

Гость
показываю на своём примере

Код:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			 Exit
		Case $Button3
			Beep(GUICtrlRead($Input2),GUICtrlRead($Input1))
		Case $Button2
			MsgBox(64,"Информация","Авторы Max 1300" & @CRLF & "Системные требования Windows 7 x64")
		Case $Button1
			$filepath = FileOpenDialog("заблокировать файл",@WorkingDir,"()")
			GUICtrlSetData($Input3,$filepath)
		Case $Button4
			 GUISetState(@SW_HIDE)
	EndSwitch
WEnd

после кнопки нужно поставить
Код:
GUISetState(@SW_HIDE)

GUI закрывается скрипт не выключается
 
Верх