Что нового

Значение с GUICtrlCreateInput не выполняется в цикле заданное количество раз

Liberum

Новичок
Сообщения
11
Репутация
0
Собственно, в коде ниже цикл выполняется 4 раза при любых значениях в $nInput = GUICtrlCreateInput("10", 80, 5, 30, 20)

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)  ; Включает режим OnEvent

;~ Выход из программы
Global $HotExit
HotKeySet("{ESC}", "_Exit")

Func _Exit()
	$HotExit = Not $HotExit
	While $HotExit
		Exit
	WEnd
	ToolTip("")
EndFunc


;~ Назначение горячей клавиши. При нажатии Pause Break скрипт встанет на паузу
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")

Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip("Script is Paused")
WEnd
ToolTip("")
EndFunc


;~ главное окно
$mainwindow = GUICreate("Автоудар", 200, 200, -1, -1, -1, $WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

;~ поле для ввода количества ударов, не работает, почему-то проходит 4 удара при любых значениях
Global $nInput ;~ Обьявляю переменную для текстового поля на колечество ударов
GUICtrlCreateLabel("К-во ударов", 10, 10) ;~ Надпись в окошке - "к-во ударов"
$nInput = GUICtrlCreateInput("10", 80, 5, 30, 20) ;~ Текстовое поле для ввода количества ударов с значением по умолчанию 10
Global $Udar ;~ Обьявляю переменную для удара в цикл
$Udar = $nInput ;~ Передаю количество ударов в переменную $Udar

;~ поля для ввода координат почему-то не работают, берут неправильные значения, как и в случаи с ударом
;~ GUICtrlCreateLabel("Удар 1", 10, 35)
;~ $x1 = GUICtrlCreateInput("677", 80, 30, 30, 20)
;~ $y1 = GUICtrlCreateInput("279", 120, 30, 30, 20)

;~ GUICtrlCreateLabel("Удар 2", 10, 65)
;~ $x2 = GUICtrlCreateInput("697", 80, 60, 30, 20)
;~ $y2 = GUICtrlCreateInput("279", 120, 60, 30, 20)

;~ GUICtrlCreateLabel("Блок", 10, 95)
;~ $x3 = GUICtrlCreateInput("839", 80, 90, 30, 20)
;~ $y3 = GUICtrlCreateInput("279", 120, 90, 30, 20)

;~ кнопки старт и стоп
$okbutton = GUICtrlCreateButton("Start", 20, 170, 60)
$cancelbutton = GUICtrlCreateButton("Stop", 120, 170, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUICtrlSetOnEvent($cancelbutton, "CancelButton")
GUISetState(@SW_SHOW)

;~ координаты вручную, работают
$x1 = 677
$y1 = 279

$x2 = 697
$y2 = 279

$x3 = 839
$y3 = 279

While 1
  Sleep(1000)  ; Цикл ожидания - WTF 0_o
WEnd

;~ кнопка старт
Func OKButton()

;~ запуск цикла на количество ударов указанное в переменной $Udar
For $i = $Udar To 1 Step -1
MouseClick("left", $x1, $y1, 1, 0)
MouseClick("left", $x2, $y2, 1, 0)
MouseClick("left", $x3, $y3, 1, 0)
sleep(1500)
Next
EndFunc

;~ кнопка стоп, позже реализую
Func CancelButton()

  Exit

EndFunc

;~ закрыть
Func CLOSEClicked()
  Exit
EndFunc
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
Так и должно быть. Чтобы получить значение из инпута стоит использовать GUICtrlRead.
 
Автор
L

Liberum

Новичок
Сообщения
11
Репутация
0
Спасибо.. сделал вот так:

Код:
GUICtrlCreateLabel("К-во ударов", 10, 40) ;~ Надпись в окошке - "к-во ударов"
$nInput = GUICtrlCreateInput("10", 80, 35, 30, 20) ;~ Текстовое поле для ввода количества ударов с значением по умолчанию 10
Global $Udar ;~ Обьявляю переменную для удара в цикл
$Udar = GuictrlRead($nInput) ;~ Передаю количество ударов в переменную $Udar


Дальше цикл с переменной $Udar, проходит 10 раз, независимо от введенного в поле (
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ну поставьте $Udar = GuictrlRead($nInput) в начале фунции, и будет вам счастье)
 
Автор
L

Liberum

Новичок
Сообщения
11
Репутация
0
Спасибо :smile: Счастье действительно наступило, но почему не работало вне функции, ведь это глобальная переменная получалась. Просто для себя хотелось бы узнать :smile:
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Liberum
Потому что если переменная глобальная это не значит что она автоматически изменяется при изменении input. Нужно читать текущее значение input перед тем как использовать. Глобальная - всего лишь переменная видимая для всех функций.
 
Верх