1 (изменено: Amadare, 2012-03-12 23:50:55)

Тема: AHK: Глобальные переменные в процедурах. Как сделать?

Доброго времени суток. Начал разбираться в AutoHotkey совсем недавно, поэтому вопрос будет немного простоватым, но нагуглить ответ никак не мог...
Тестовая программка. Должна запоминать координаты курсора при нажатии левого Win и выводить их в MsgBox'e при нажатии правого. При чём, если координаты не были заданы, должны выводится нули.
Почему-то не работает - выдает нули все время. Что я сделал не так?

x=0
y=0

LWIN::Set(x, y)
RWIN::View(x, y)

Set(_x,_y) 
{
	MouseGetPos x,y
	%_x%=%x%
	%_y%=%y%
}

View(x_,y_)
{
	MsgBox, %x_% %y_%
}

2 (изменено: creature.ws, 2012-03-13 00:36:55)

Re: AHK: Глобальные переменные в процедурах. Как сделать?

Тестовая программка. Должна запоминать координаты курсора при нажатии левого Win и выводить их в MsgBox'e при нажатии правого

LWIN::MouseGetPos x, y
RWIN::MsgBox % (x ? x : 0) . " " . (y ? y : 0)

//upd исправлено во имя добра

3

Re: AHK: Глобальные переменные в процедурах. Как сделать?

Amadare, твой вариант правилен в таком виде:

LWIN::Set(x, y)
RWIN::View(x, y)
 
Set(ByRef _x, ByRef _y) 
{
    MouseGetPos, x, y
    _x := x   ; или _x = %x%
    _y := y   ; или _y = %y%
}
 
View(x_,y_)
{
    MsgBox, %x_% %y_%
}

Тебе нужно прочитать справку по переменным и по функциям.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Глобальные переменные в процедурах. Как сделать?

Спасибо, creature.ws. Так оно выглядит получше. И даже есть ключевое (то, что мне было нужно) "global x, y". А где можно почитать про конструкции вида "% (x ? x : 0) . " " . (y ? y : 0)"?

Спасибо, teadrinker. Осмотрел код, пролистал предложенную документацию, все стало понятнее. Дальше буду читать внимательнее.

5 (изменено: creature.ws, 2012-03-25 19:55:04)

Re: AHK: Глобальные переменные в процедурах. Как сделать?

Amadare пишет:

А где можно почитать про конструкции вида "% (x ? x : 0) . " " . (y ? y : 0)"?

Всё там же в справке. Переменные и выражения, тернарный оператор, конкатенация.