Что нового

[Элементы GUI] Связь GUI со скриптом

Hwo

Новичок
Сообщения
20
Репутация
0
Помогите связать GUI со скриптом. Я привык к делфи синтаксису c ивентами и записью элемент.свойство и не совсем понимаю синтаксис AutoIt.

Написал скрипт для игрушки:
Код:
Opt("PixelCoordMode", 0) 
Opt("MouseCoordMode", 0) 
Opt("SendKeyDownDelay", 230)
Global $Action = 0
Global $S = 1
Global $i = 1


HotKeySet("{z}", "startmine")
HotKeySet("{x}", "runfor")
HotKeySet("{c}", "stopw")
HotKeySet("{v}", "square")

While 1
If $Action = 1 then
	MouseDown("left")
	Sleep(1000)
	Send("{w}")
     Sleep(1500)
	Send("{w}")
     Sleep(1200)
	MouseUp("left")
ToolTip("Вкл 1", 0, 0)


Elseif $Action = 2 Then
	Send("{w down}")
	Sleep(1000)
ToolTip("Вкл 2", 0, 0)


Elseif $Action = 3 Then
While ($Action = 3)
	MouseDown("left")
For $i = 1 to $S Step 1
	Send("{w}")
Next
$pos = MouseGetPos()
MouseMove($pos[0]+40, $pos[1])
For $i = 1 to $S Step 1
	Send("{w}")
Next
	$S=$S+1
	MouseUp("left")
WEnd
ToolTip("Вкл 1", 0, 0)


Else
   sleep(10)
ToolTip("Выкл", 0, 0)
	Send("{w up}")
 EndIf
WEnd

Func startmine()
$Action = 1
EndFunc

Func runfor()
$Action = 2
EndFunc

Func square()
$Action = 3
EndFunc

Func stopw()
$Action = 0
EndFunc


Написал GUI

Код:
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>


; GUI
$hGUI = GuiCreate("New", 400, 400)

; BUTTON
$hStart_1 = GuiCtrlCreateButton("Start", 70, 330, 100, 30,$WS_GROUP)



; TAB
$hTab = GuiCtrlCreateTab(70, 4, 320, 310)

$hTab1 = GuiCtrlCreateTabItem("Tunnel")
GuiCtrlCreateLabel("To dig a tunnel forward. Only forward", 80, 40)
; UPDOWN
GuiCtrlCreateLabel("Delay step/ms", 88, 250)
$hTab1u = GuiCtrlCreateInput("2000", 88, 268, 80, 20)
GuiCtrlCreateUpDown(-1)

$hTab2 = GuiCtrlCreateTabItem("Layer")
GuiCtrlCreateLabel("To dig round itself. To level an earth or sand layer", 80, 40)
; UPDOWN
GuiCtrlCreateLabel("Delay step/ms", 88, 250)
GuiCtrlCreateInput("3000", 88, 268, 80, 20)
GuiCtrlCreateUpDown(-1)

GuiCtrlCreateLabel("Angle in pix not deg", 190, 226)
GuiCtrlCreateLabel("+90/-90 right/left turn", 190, 240)
GuiCtrlCreateLabel("60 pix in window ~ 90 deg", 190, 254)
$hTab2u = GuiCtrlCreateInput("60", 190, 268, 80, 20)
GuiCtrlCreateUpDown(-1)


$hTab3 = GuiCtrlCreateTabItem("Run")
GuiCtrlCreateLabel("To run forward without a stop", 80, 40)
; UPDOWN
$hTab3u = GuiCtrlCreateLabel("Time sec", 88, 250)
$hTime = GuiCtrlCreateInput("30", 88, 268, 80, 20)

; CHECKBOX
$hCheck_1 = GuiCtrlCreateCheckbox("Hold shift", 180, 274, 62, 12)
;GuiCtrlSetState(-1, $GUI_CHECKED)
GuiCtrlCreateUpDown(-1)

GuiCtrlCreateTabItem("")


; PROGRESS
GuiCtrlCreateLabel("Progress:", 260, 320)
GuiCtrlCreateProgress(240, 338, 150, 18)
GuiCtrlSetData(-1, 50)


GuiSetState()
	; GUI MESSAGE LOOP
While GuiGetMsg() <> $GUI_EVENT_CLOSE
WEnd


Волнует меня странная организация цикла в скрипте - когда он запущен кнопка W всё время отпускается и бежать невозможно, но без этого я не знаю как остановить бег после включения ф-ии runfor
Думаю, что с таким циклом будет сложно привязать скрипт к GUI, поэтому прошу вас помочь в первую очередь с циклом.

Еще прошу помощи со связью кнопки старт и активной вкладки (tab). Т.е. привязать каждую из трех ф-й к вкладке
tunnel tab - startmine
layer tab - square
run tab - runfor
start button - stopw

Должно получиться так:

-Пользователь открывает вкладку, задаёт параметры
-Opt("SendKeyDownDelay", 230) только вместо 230 нужно вставить введённое в GuiCtrlCreateInput значение
-MouseMove($pos[0]+40, $pos[1]) только вместо +40 нужно +GuiCtrlCreateInput
-Как сделть чтобы скрипт "бежал" определённое время, т.е. давил кнопку W например 30 сек я еще не придумал.

Спасибо, что прочитали. Буду рад любым советам.

//Все вопросы 1го поста решены
 
Автор
H

Hwo

Новичок
Сообщения
20
Репутация
0
Можно ли сохранять значения элементов GUI в файл? В Examples не нашел такого скрипта. //решено
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Значения GUI в файл сохранять можно. Команды GuiCtrlRead и IniWrite тебе в помощь.
По поводу обработки событий GUI в хелпе есть прекрасный пример по команде GUIGetMsg
 
Автор
H

Hwo

Новичок
Сообщения
20
Репутация
0
Мне нужо в окне игры делать поворот камеры по X ровно на 90 градусов в право каждые несколько шагов (по квадрату ходить)
Код:
MouseMove($pos[0]+$angle, $pos[1],50)

$angle - кол-во пикселей, на которое двигается мышь, чтобы камера повернулась на 90 градусов
но, 1й поворот еще нормально вроде, 88-92 градуса (точность переменная)
а дальше с каждым поворотом он увеличивается в разы и в конце совсем закручивается как волчок

Код:
MouseDown("left")

						While ($Action = 1)

						For $i = 1 to $S Step 1
							    Sleep(1000)
							    Send("{w}")
						Next

							$pos = MouseGetPos()
							MouseMove($pos[0]+$angle, $pos[1],50)

						For $i = 1 to $S Step 1
							Sleep(1000)
							Send("{w}")
						Next
						$S=$S+1


Я вот думаю, что проблема в выходе мыши за пределы игрового окна.

//не решено
 
Автор
H

Hwo

Новичок
Сообщения
20
Репутация
0
Еще такой вопрос - у меня в форме картинка используется.
Как её в экзешник запихнуть при компиляции? //решено
 
Автор
H

Hwo

Новичок
Сообщения
20
Репутация
0
Как в GUI сделать кликабильные ссылки на сайт и на папку?
Ну точнее _IELinkClickByIndex я то нашел по справке. Но вот IE не любят обычно, как открыть страницу в том браузере, который у юзера по умолчанию? //решено
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Hwo
ИМХО, последние вопросы надо выносить в отдельную тему.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Код:
#include <GUIConstantsEx.au3>
Local $label_1
Local $msg
Opt("GUICoordMode", 1)
GUICreate("Sample", 400, 280)
$label_1 = GuiCtrlCreateLabel("Кликни меня", 200, 20, 200, 20)
GUISetState()
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			MsgBox(0, "", "Dialog was closed")
			Exit
		Case $msg = $GUI_EVENT_MINIMIZE
			MsgBox(0, "", "Dialog minimized", 2)
		Case $msg = $GUI_EVENT_MAXIMIZE
			MsgBox(0, "", "Dialog restored", 2)
		Case $msg = $label_1
			ShellExecute ("http://autoit-script.ru")
			MsgBox(0,0,"Кликнули")
	EndSelect
WEnd
 
Автор
H

Hwo

Новичок
Сообщения
20
Репутация
0
Спасибо, работает.

p.s.
madmasles, вы правы конечно.
Просто вопросов очень много - не хочу засорять форум лишний раз.
Но если это критично - буду новые темы делать.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Hwo [?]
не хочу засорять форум лишний раз.
любая информация в пределах одной тематической категории не является засорением. а вот разные вопросы в пределах одной темы, как раз таки, является засорением. так что, на будущее не стесняйся создавать новые темы. форум для этого и создавался
 
Верх