Имеется вот такой код:
По нажатию на кнопку Play/Pause вызывается переключатель функций(от play к pause и наоборот). Особенность в том, что в функции Play используется бесконечный цикл. Как прерывать этот цикл в режиме MessageLoop не имею понятия, но вот что пишут в хелпе о режиме OnEvent:
Почему в функции Play не используется цикл для переключения 'звездочек'?
Потому что в изначальной(реальной) программе на его месте также стоят различные действия, не заключенные в цикл, а скрипт представленный здесь лишь упрощенный пример.
Код:
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
Opt("GUIOnEventMode", 1)
Opt("GUICoordMode", 1)
GUICreate("", 500,130)
GUISetFont(92,650)
dim $label[9]
dim $k=0
$label[1]=GUICtrlCreateLabel("",10,10,50,100)
$label[2]=GUICtrlCreateLabel("",70,10,50,100)
$label[3]=GUICtrlCreateLabel("",130,10,50,100)
$label[4]=GUICtrlCreateLabel("",190,10,50,100)
$label[5]=GUICtrlCreateLabel("",250,10,50,100)
$label[6]=GUICtrlCreateLabel("",310,10,50,100)
$label[7]=GUICtrlCreateLabel("",370,10,50,100)
$label[8]=GUICtrlCreateLabel("",430,10,50,100)
;GUICtrlSetBkColor($label[1],0x666666)
GUISetFont(9,550)
$button1=GUICtrlCreateButton("Пуск/Пауза",10,100,480,20)
GUICtrlSetOnEvent($button1,"Switch1")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetState ()
While 1
sleep(100)
WEnd
Func Switch1()
if $k==0 then
$k=1
Play()
Else
$k=0
Pause()
EndIf
EndFunc
Func Play()
while 1
GUICtrlSetData($label[8],"")
GUICtrlSetData($label[1],"*")
sleep(300)
GUICtrlSetData($label[1],"")
GUICtrlSetData($label[2],"*")
sleep(300)
GUICtrlSetData($label[2],"")
GUICtrlSetData($label[3],"*")
sleep(300)
GUICtrlSetData($label[3],"")
GUICtrlSetData($label[4],"*")
sleep(300)
GUICtrlSetData($label[4],"")
GUICtrlSetData($label[5],"*")
sleep(300)
GUICtrlSetData($label[5],"")
GUICtrlSetData($label[6],"*")
sleep(300)
GUICtrlSetData($label[6],"")
GUICtrlSetData($label[7],"*")
sleep(300)
GUICtrlSetData($label[7],"")
GUICtrlSetData($label[8],"*")
sleep(300)
WEnd
EndFunc
Func Pause()
while 1
sleep(300)
Wend
EndFunc
;*============================================================
Func SpecialEvents()
Select
Case @GUI_CTRLID = $GUI_EVENT_CLOSE
Exit
Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
Case @GUI_CTRLID = $GUI_EVENT_RESTORE
MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
EndSelect
EndFunc
По нажатию на кнопку Play/Pause вызывается переключатель функций(от play к pause и наоборот). Особенность в том, что в функции Play используется бесконечный цикл. Как прерывать этот цикл в режиме MessageLoop не имею понятия, но вот что пишут в хелпе о режиме OnEvent:
я подумал "вот оно! этот режим может поставить на паузу все что угодно!" но не тут то было.. Видимо против бесконечного цикла не выстоит ничто(даже кнопка закрытия отказала).Реакцией GUI на событие является временная остановка текущей обработки сценария (прерывание) и вызов заранее созданных функций сценария
Почему в функции Play не используется цикл для переключения 'звездочек'?
Потому что в изначальной(реальной) программе на его месте также стоят различные действия, не заключенные в цикл, а скрипт представленный здесь лишь упрощенный пример.