Что нового

В чем разница MessageLoop и OnEvent

winkot

Новичок
Сообщения
189
Репутация
0
В чем разница MessageLoop и OnEvent ? Сделал два скрипта:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region (=== GUI generated by GuiBuilderPlus 1.3.0 ===)
Global $hGUI = GUICreate("MyGUI", 400, 350, 771, 302)

Global $Button_1 = GUICtrlCreateButton("Кнопка 1", 120, 160, 161, 41)
GUICtrlSetFont(-1, 15)
Global $Button_2 = GUICtrlCreateButton("Кнопка 2", 120, 239, 161, 41)
GUICtrlSetFont(-1, 15)
#EndRegion (=== GUI generated by GuiBuilderPlus 1.3.0 ===)


GUISetState(@SW_SHOWNORMAL)

While 1
    Switch GUIGetMsg()

        Case $Button_1
            Sleep(5000)
            Beep(500, 200)
        Case $Button_2
            Beep(1000, 100)
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd



И

Код:
Opt("GUIOnEventMode", 1)

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region (=== GUI generated by GuiBuilderPlus 1.3.0 ===)
Global $hGUI = GUICreate("MyGUI", 400, 350, 771, 302)
Global $Button_1 = GUICtrlCreateButton("Кнопка 1", 120, 160, 161, 41)
GUICtrlSetFont(-1, 15)
Global $Button_2 = GUICtrlCreateButton("Кнопка 2", 120, 239, 161, 41)
GUICtrlSetFont(-1, 15)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUICtrlSetOnEvent($Button_1, "Func1")
GUICtrlSetOnEvent($Button_2, "Func2")


#EndRegion (=== GUI generated by GuiBuilderPlus 1.3.0 ===)

    GUISetState(@SW_SHOWNORMAL)

While 1
  Sleep(100)
WEnd

Func Func1()
   Sleep(5000)
  Beep(500,200)
EndFunc

Func Func2()
  Beep(1000,100)
EndFunc


Func _Exit()
    GUIDelete()
    Exit
EndFunc   ;==>_Exit


Оба ведут себя одинаково. Когда нажимаю Кнопку 1, то пока не отработается ее функция, функция Кнопки 2 не срабатывает. И чем же тогда отличаются эти два режима?
 

damien2008

Осваивающий
Сообщения
188
Репутация
34
в GUICtrlSetOnEvent нельзя использовать передачу параметров, только название ф-ии.

GUIGetMsg возвращает событие, или массив с дополнительными параметрами:
- 0, ид события, ид контрола
- хендл окна
- хендл контрола
- координаты миши

они взимоисключаемы в зависимости от режима GUIOnEventMode.
 

Norm

Продвинутый
Сообщения
290
Репутация
76
Если бы это было так, то зачем он тогда нужен GUICtrlSetOnEvent ?
Всё там есть и все параметры тоже можно получить. Просто реализовано по другому.
Почитаите справку, там ни слова нету, что там что-то не делается как с GUIGetMsg.
Для небольших проэктов действительно проще использощать GUIGetMsg.
В своём проэкте, который уже пятый год разрабатываю, я был вынужден использую GUICtrlSetOnEvent.
Есть конечно маленькие неудобства, но в остальном только приемущества. Гибкость кода, на мой взгляд лучше, и
самое главное, не нужно беспокоится о постоянно распухающем While, от которого снижается скорость опроса GUI.
 
Последнее редактирование:
Верх