Что нового

GUI окно создается, но виснет

Malderin

Новичок
Сообщения
68
Репутация
1
День добрый. Есть такая непонятная проблема. Имеется скрипт:
Код:
#include "ModernMenuRaw.au3"
#NoTrayIcon

Opt("GUIOnEventMode", 1)
Opt("TrayMenuMode", 7)
_SetFlashTimeOut(250)

$nTrayIcon = _TrayIconCreate("Создание ...", "shell32.dll", -160)

_TrayCreateContextMenu()
_SetTrayTextColor(0x000000)
_SetTrayBkColor(0xFFD8C0)
_SetTrayIconBkColor(0xFDFDFD)
_SetTrayIconBkGrdColor(0xC0A0A0)
_SetTraySelectBkColor(0x662222)
_SetTraySelectRectColor(0x800000)
_SetTraySelectTextColor(0x66FFFF)
;~ $bUseAdvTrayMenu = False ;Перекрашивает фон меню

_TrayCreateItem("")

$iAddNew = _TrayCreateItem("1_Запустить GUI")
GUICtrlSetOnEvent($iAddNew, "iGui") ; Запуск GUI
_TrayItemSetIcon(-1, "shell32.dll", -195)

$nExit = _TrayCreateItem('Выход')
GUICtrlSetOnEvent(-1, "_Quit")
_TrayItemSetIcon(-1, "shell32.dll", -216)

_TrayIconSetState()

While 1
	Sleep(5000)
WEnd

Func _Quit()
	_TrayIconDelete($nTrayIcon)
	Exit
EndFunc   ;==>_Quit

Func iGui() ; Не покатило
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

		Local $iRadio3, $iRadio4, $iRadio5, $msg1, $hGUI1
		$hGUI1 = GUICreate("Выбор типа ДСЕ", 250, 100) ; Создаёт окно в центре экрана

		GUICtrlCreateGroup("Выберите тип ДСЕ (ДЕ или СБ)", 10, 10, 230, 80)
		$iRadio3 = GUICtrlCreateRadio("-", 30, 35, 40, 40, $BS_PUSHLIKE + $BS_ICON)
		GUICtrlSetImage(-1, "shell32.dll", 22)
		GUICtrlSetState(-1, $GUI_CHECKED) ; параметр -1 определяет последнюю использованную переменную

		$iRadio4 = GUICtrlCreateRadio("-", 80, 35, 40, 40, $BS_PUSHLIKE + $BS_ICON)
		GUICtrlSetImage(-1, "shell32.dll", 23)

		$iRadio5 = GUICtrlCreateRadio("-", 130, 35, 40, 40, $BS_PUSHLIKE + $BS_BITMAP)
		GUICtrlSetImage(-1, "oemlogo.bmp")
		GUICtrlCreateGroup("", -99, -99, 1, 1)

		GUISetState() ; показывает созданное окно

		; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
		While 1
			$msg1 = GUIGetMsg()
			Select ; рекомендуется использовать Switch вместо Select
				Case $msg1 = $GUI_EVENT_CLOSE
					ExitLoop
				Case $msg1 = $iRadio3 And BitAND(GUICtrlRead($iRadio3), $GUI_CHECKED) = $GUI_CHECKED
					MsgBox(64, 'Информация:', 'В кликнули Радио кнопку слева и этот выбор отмечен визуально.', 0, $hGUI1)
					ExitLoop
				Case $msg1 = $iRadio4 And BitAND(GUICtrlRead($iRadio4), $GUI_CHECKED) = $GUI_CHECKED
					MsgBox(64, 'Информация:', 'В кликнули Радио кнопку в центре и этот выбор отмечен визуально.', 0, $hGUI1)
					ExitLoop
				Case $msg1 = $iRadio5 And BitAND(GUICtrlRead($iRadio5), $GUI_CHECKED) = $GUI_CHECKED
					MsgBox(64, 'Информация:', 'В кликнули Радио кнопку справа и этот выбор отмечен визуально.', 0, $hGUI1)
					ExitLoop
			EndSelect
		WEnd
GUIDelete($hGUI1)
EndFunc


Сделано меню в трее на основе библиотеки ModernMenuRaw.au3 (если у кого ее нет, могу прикрепить отдельным файлом). Далее Функция iGui - не что иное как обычное окно с тремя кнопками, при нажатию на каждую из которых вылезает окно с указанием какая из кнопок была нажата. Вызывается это окно из меню в трее.
Теперь о проблеме. Окно GUI конечно вызывается, но дальше все, при нажатии на эти кнопки ничего не происходит, а должны выходить всплывающие сообщения что нажата такая то кнопка.
В чем проблема и как исправить я не понимаю, помогите разобраться.
 
Автор
M

Malderin

Новичок
Сообщения
68
Репутация
1
Alofa сказал(а):
Цитата из описания функции GUIGetMsg():
... Если опция GUIOnEventMode установлена в 1, то GUIGetMsg() всегда возвращает 0 и @error установленный в 1.
Спасибо за подсказку, но это помогло лишь частично. Добавил в начале функции iGUI переключение этой опции в значение 0, а в конце в значение 1. Один раз срабатывает, но при повторном вызове этой функции получаем сообщение:
"C:\Program Files\AutoIt3\Include\GUIConstantsEx.au3" (14) : ==> Can not redeclare a constant.:
Global Const $GUI_EVENT_CLOSE = -3
Global Const ^ ERROR

В итоге воспользовался советом Prog выше и сделал так:

Код:
#include "ModernMenuRaw.au3"
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#NoTrayIcon


#Region GUI
		Local $iRadio3, $iRadio4, $iRadio5, $msg1, $hGUI1
		$hGUI1 = GUICreate("Выбор типа ДСЕ", 250, 100) ; Создаёт окно в центре экрана

		GUICtrlCreateGroup("Выберите тип ДСЕ (ДЕ или СБ)", 10, 10, 230, 80)
		$iRadio3 = GUICtrlCreateRadio("-", 30, 35, 40, 40, $BS_PUSHLIKE + $BS_ICON)
		GUICtrlSetImage(-1, "shell32.dll", 22)
		GUICtrlSetState(-1, $GUI_CHECKED) ; параметр -1 определяет последнюю использованную переменную

		$iRadio4 = GUICtrlCreateRadio("-", 80, 35, 40, 40, $BS_PUSHLIKE + $BS_ICON)
		GUICtrlSetImage(-1, "shell32.dll", 23)

		$iRadio5 = GUICtrlCreateRadio("-", 130, 35, 40, 40, $BS_PUSHLIKE + $BS_BITMAP)
		GUICtrlSetImage(-1, "oemlogo.bmp")
		GUICtrlCreateGroup("", -99, -99, 1, 1)

		GUISetState(@SW_HIDE) ; показывает созданное окно

#EndRegion

Opt("GUIOnEventMode", 1)
Opt("TrayMenuMode", 7)
_SetFlashTimeOut(250)

$nTrayIcon = _TrayIconCreate("Создание ...", "shell32.dll", -160)

_TrayCreateContextMenu()
_SetTrayTextColor(0x000000)
_SetTrayBkColor(0xFFD8C0)
_SetTrayIconBkColor(0xFDFDFD)
_SetTrayIconBkGrdColor(0xC0A0A0)
_SetTraySelectBkColor(0x662222)
_SetTraySelectRectColor(0x800000)
_SetTraySelectTextColor(0x66FFFF)
;~ $bUseAdvTrayMenu = False ;Перекрашивает фон меню

_TrayCreateItem("")

$iAddNew = _TrayCreateItem("1_Запустить GUI")
GUICtrlSetOnEvent($iAddNew, "AddNew") ; Запуск GUI
_TrayItemSetIcon(-1, "shell32.dll", -195)

$nExit = _TrayCreateItem('Выход')
GUICtrlSetOnEvent(-1, "_Quit")
_TrayItemSetIcon(-1, "shell32.dll", -216)

_TrayIconSetState()

While 1
	Sleep(10000)
WEnd

Func AddNew()
Opt("GUIOnEventMode", 0)
GUISetState(@SW_SHOW, $hGUI1) ; показывает созданное окно

		While 1
			$msg1 = GUIGetMsg()
			Select ; рекомендуется использовать Switch вместо Select
				Case $msg1 = $GUI_EVENT_CLOSE
					ExitLoop
				Case $msg1 = $iRadio3 And BitAND(GUICtrlRead($iRadio3), $GUI_CHECKED) = $GUI_CHECKED
					MsgBox(64, 'Информация:', 'В кликнули Радио кнопку слева и этот выбор отмечен визуально.', 0, $hGUI1)
					GUISetState(@SW_HIDE, $hGUI1)
					Opt("GUIOnEventMode", 1)
					ExitLoop
				Case $msg1 = $iRadio4 And BitAND(GUICtrlRead($iRadio4), $GUI_CHECKED) = $GUI_CHECKED
					MsgBox(64, 'Информация:', 'В кликнули Радио кнопку в центре и этот выбор отмечен визуально.', 0, $hGUI1)
					GUISetState(@SW_HIDE, $hGUI1)
					Opt("GUIOnEventMode", 1)
					ExitLoop
				Case $msg1 = $iRadio5 And BitAND(GUICtrlRead($iRadio5), $GUI_CHECKED) = $GUI_CHECKED
					MsgBox(64, 'Информация:', 'В кликнули Радио кнопку справа и этот выбор отмечен визуально.', 0, $hGUI1)
					GUISetState(@SW_HIDE, $hGUI1)
					Opt("GUIOnEventMode", 1)
					ExitLoop
			EndSelect
		WEnd
EndFunc

Func _Quit()
	_TrayIconDelete($nTrayIcon)
	Exit
EndFunc   ;==>_Quit


Вроде наконец работает.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Malderin
Не правильные выводы сделали. GUIOnEventMode - не может вызывать такую ошибку.
Эта ошибка из за того - что в вашем коде не правильно использовался #include
 
Верх