[решено] Объединение нескольких GUI в один файл au3

Аватара пользователя
sLiDeR-X

Re: [решено] Объединение нескольких GUI в один файл au3

Сообщение sLiDeR-X »

-TRM-, твой скомпилированный работает.

Выложи au3 свой, пожалуйста.
Аватара пользователя
-TRM-

Re: [решено] Объединение нескольких GUI в один файл au3

Сообщение -TRM- »

sLiDeR-X,
Цитата sLiDeR-X:



-TRM-, твой скомпилированный работает.

Выложи au3 свой, пожалуйста.
[решено] Объединение нескольких GUI в один файл au3
Вложения
Dispatcher_au3.rar
(3.87 КБ) 0 скачиваний
Dispatcher_au3.rar
(3.87 КБ) 0 скачиваний
Аватара пользователя
sLiDeR-X

Re: [решено] Объединение нескольких GUI в один файл au3

Сообщение sLiDeR-X »

-TRM-, ты сделал на первых выложенных файлах. В шапке сейчас другие уже. Там GUI окна работают по ключу Opt("GUIOnEventMode", 1).

Сделал по аналогии, как сделал ты - у меня ошибки появляются, программа работает не корректно. Я так понял загвоздка именно из-за GUIOnEventMode=1.

Вот как сделал я:
Вложения
Вложение Dispatcher.zip больше недоступно
Вложения
Dispatcher.zip
(4.31 КБ) 0 скачиваний
Dispatcher.zip
(4.31 КБ) 0 скачиваний
Аватара пользователя
sLiDeR-X

Re: [решено] Объединение нескольких GUI в один файл au3

Сообщение sLiDeR-X »

Если отбросить работу самой программы, то как сделать вот это (хочу понять сам принцип):

Поправьте код

Код:

Код: Выделить всё

#include  ;Стиль окон GUI
#include  ;Раширенный стили GUI
TraySetToolTip('Название')
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)
TraySetState(1)
$iRegistration = TrayCreateItem('Регистрация программы')
TrayItemSetOnEvent(-1, "_Registration")
$iExit = TrayCreateItem('Выход')
TrayItemSetOnEvent(-1, '_Quit')
;Программа запущена в трее и выполняет _SomeFunc() раз в 3 секунды
While 1
   _SomeFunc()
   Sleep(3000)
WEnd
Func _SomeFunc()
   ;Основная работа программы
   ConsoleWrite('Основной цикл' & @LF)
EndFunc
;Функция вызова GUI окна. После отработки должно исчезнуть, а программа должна продолжить работать по основному циклу.
Func _Registration()
   Opt("GUIOnEventMode", 1)
   $hGui = GUICreate('Регистрация программы', 370, 225)
   GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSEClicked")
   $BtnOk = GUICtrlCreateButton("ОК", 250, 190, 100, 25)
   GUICtrlSetOnEvent($BtnOk, "_OKButton")
   GUISetState()
   While 1
      Sleep(1000)
   WEnd
EndFunc
Func _CLOSEClicked()
   If @GUI_WinHandle = $hGui Then
   ;Закрыть окно и продолжить основной цикл
   EndIf
EndFunc
Func _OKButton()
   MsgBox(4096 + 64, '', 'Регистрация произведена!')
   ;Выполнить некоторые операции, закрыть окно и продолжить основной цикл
EndFunc
Func _Quit()
   Exit
EndFunc
Аватара пользователя
madmasles

Re: [решено] Объединение нескольких GUI в один файл au3

Сообщение madmasles »

sLiDeR-X,

ИМХО, нет смысла дублировать темы на разных форумах. Я начинаю путаться, где Вам отвечать. Изображение
Аватара пользователя
sLiDeR-X

Re: [решено] Объединение нескольких GUI в один файл au3

Сообщение sLiDeR-X »

madmasles, благодарю за помощь!

Хотя я уже сделал немного по другому - обошелся без GUIOnEventMode=1 и сделал через While и GUIGetMsg



Вот ответ на мой вопрос:



Код:

Код: Выделить всё

#NoTrayIcon
#include  ;Стиль окон GUI
#include  ;Раширенный стили GUI
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)
Opt("GUIOnEventMode", 1)
TrayCreateItem('Регистрация программы')
TrayItemSetOnEvent(-1, "_Registration")
TrayCreateItem('Выход')
TrayItemSetOnEvent(-1, '_Quit')
TraySetToolTip('Название')
TraySetState(1)
;Программа запущена в трее и выполняет _SomeFunc() раз в 3 секунды
While 1
   _SomeFunc()
   Sleep(3000)
WEnd
Func _SomeFunc()
   ;Основная работа программы
   Sleep(500)
   ConsoleWrite('Основной цикл' & @LF)
EndFunc   ;==>_SomeFunc
;Функция вызова GUI окна. После отработки должно исчезнуть, а программа должна продолжить работать по основному циклу.
Func _Registration()
    GUICreate('Регистрация программы', 370, 225)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_CLOSEClicked")
    GUICtrlCreateButton("ОК", 250, 190, 100, 25)
    GUICtrlSetOnEvent(-1, "_OKButton")
    GUISetState()
EndFunc   ;==>_Registration
Func _CLOSEClicked()
    GUIDelete(@GUI_WinHandle)
EndFunc   ;==>_CLOSEClicked
Func _OKButton()
    MsgBox(4096 + 64, '', 'Регистрация произведена!', 0, @GUI_WinHandle)
    ;Выполнить некоторые операции, закрыть окно и продолжить основной цикл
EndFunc   ;==>_OKButton
Func _Quit()
    Exit
EndFunc   ;==>_Quit
Ответить

Вернуться в «AutoIt»