Переменная описана как глобальная и используется с различных функциях. В "главной/первой" функции она изменяется, точнее используется как индекс массива. В остальных/второстепенных она лишь считывается.
Вопрос, а точнее недопонимание принципов работы Autoit. Почему второстепенные функции видят только изначальное значение переменной(которое задано в Global)?
Это напоминает C++, там, если в функции используется цикл, то переменная этого цикла должна быть объявлена внутри этой функции, но в нашей справке об этом ни слова.
И как с этим бороться, НЕ используя передачу параметра в функцию?
Вопрос, а точнее недопонимание принципов работы Autoit. Почему второстепенные функции видят только изначальное значение переменной(которое задано в Global)?
Это напоминает C++, там, если в функции используется цикл, то переменная этого цикла должна быть объявлена внутри этой функции, но в нашей справке об этом ни слова.
И как с этим бороться, НЕ используя передачу параметра в функцию?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $k=False, $vb=1
Dim $label[6][9], $st[3], $pl[3]
$st[1]=0
$st[2]=0
$pl[1]=0
$pl[2]=0
Opt("GUIOnEventMode", 1)
Opt("GUICoordMode", 1)
GUICreate("",130,410)
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")
$lb=GUICtrlCreateLabel("",0,0,500,440)
GUICtrlSetOnEvent(-1,"Switch1")
GUISetFont(92, 650)
$x=10
$y=10
For $i=1 To 5
For $j=1 To 2
$label[$i][$j] = GUICtrlCreateLabel("",$x,$y,50,70)
GUICtrlSetOnEvent(-1,"Switch1")
$x+=60
Next
$x=10
$y+=80
Next
GUISetState()
While 1
If $k Then Play()
WEnd
Func Switch1()
$k = Not $k
EndFunc
Func Play()
For $vb=1 to 2
$st[$vb]+=1
If $st[$vb] > 5 Then $st[$vb] = 1
Switch $st[$vb]
Case 1
Play1()
Case 2
Play2()
Case 3
Play3()
Case 4
Play4()
Case 5
Play5()
EndSwitch
Next
EndFunc
Func Play1()
MsgBox(0,'',$vb&' '&$st[$vb])
$pl[$vb] += 1
If $pl[$vb] > 2 Then $pl[$vb] = 1
If $pl[$vb] = 1 Then
GUICtrlSetData($label[1][$vb], "*")
Else
GUICtrlSetData($label[1][$vb], "")
EndIf
Sleep(300)
EndFunc
;*========================================================================
Func Play2()
If $pl[$vb] = 1 Then
GUICtrlSetData($label[2][$vb], "*")
Else
GUICtrlSetData($label[2][$vb], "")
EndIf
Sleep(300)
EndFunc
;*========================================================================
Func Play3()
If $pl[$vb] = 1 Then
GUICtrlSetData($label[3][$vb], "*")
Else
GUICtrlSetData($label[3][$vb], "")
EndIf
Sleep(300)
EndFunc
;*========================================================================
Func Play4()
If $pl[$vb] = 1 Then
GUICtrlSetData($label[4][$vb], "*")
Else
GUICtrlSetData($label[4][$vb], "")
EndIf
Sleep(300)
EndFunc
;*========================================================================
Func Play5()
If $pl[$vb] = 1 Then
GUICtrlSetData($label[5][$vb], "*")
Else
GUICtrlSetData($label[5][$vb], "")
EndIf
Sleep(300)
EndFunc
;*============================================================
Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
Local $iID = BitAND($wParam, 0xFFFF)
Switch $iID
Case 0xF060
Exit
Case 0xF020
GUISetState(@SW_MINIMIZE)
Case 0xF030
GUISetState(@SW_MAXIMIZE)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc