1

Тема: AHK: Циклически изменять хоткеем значение буквенной переменной

Господа подскажите чайнику как проще циклически изменять одним хоткеем значение буквенной переменной.
Всё до чего мог додуматся:

A = Вилка

F3::MsgBox %A%
return

F2::
If A = Вилка
{
A = Ложка  
return
} 
Else
If A = Ложка
{
A = Тарелка  
return
} 
Else
A = Вилка 
return

УЖАС

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2 (изменено: Irbis, 2012-08-03 02:12:16)

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Мьсе страдает склерозом? Пост

(Тонкий намек - элементами списка могут быть не только числа.)

3

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Irbis пишет:

Мьсе страдает склерозом? Пост

Напротив хорошо помню 

Просто нет понимания как это связать именно с буквенной переменной.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

b1 := ["Ложка","Вилка","Тарелка"]
a1 := 1
Active := b1[a1] 

F1:: Active := b1[a1 :=  (!a1) ||  (a1>=b1.MaxIndex()) ? 1 : a1+1]
 
F12::  MsgBox,,, %Active% , 1

5

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

СПАСИБО!!!
Выручаете который раз!

Эх, когда же я в этом начну хоть что то понимать 

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Irbis пишет:
b1 := ["Ложка","Вилка","Тарелка"]
a1 := 1
Active := b1[a1] 
F1:: Active := b1[a1 :=  (!a1) ||  (a1>=b1.MaxIndex()) ? 1 : a1+1]
F12::  MsgBox,,, %Active% , 1

Больше часа уже убил, мой ГГМ на грани выкипания, помогите!
Я не понимаю в данном примере назначения

(!a1) ||

Вроде как а1 принимает значения от 1 до 3, то есть (!a1) всегда будет False? (Или нет? Если убрать (!a1) || - все работает.)
При отсутствии


a1 := 1
Active := b1[a1]

не улавливаемый мной смысл вроде как проявляется - значение по умолчанию тогда отсутствует и при первом нажатии хоткея нужно пустой переменной присвоить значение 1, чтобы начать перебор элементов массива с первого.
Разрешите мои сомнения пожалуйста, а то не покидает паскудное ощущение, что, упершись рогами, я в очередной раз упустил что-то очевидное .

BIG BROTHER IS WATCHING YOU.

7

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Как ногам не дает покоя дурная голова, так оной не дает покоя вредная привычка читать темы, начиная с последних постов .
Начиналось-то все с однострочного скрипта

F2:: a := (!a) ||  (a>=3) ? 1 : a+1

, откуда, видимо и перекочевало упомянутое мной условие в последующие, расширенные варианты.
Но все-таки хотелось бы знать точно, а то мерзкое ощущение не проходит .

BIG BROTHER IS WATCHING YOU.

8 (изменено: Irbis, 2012-08-03 13:25:33)

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Отголосок предыдущего кода, когда значение переменной a1 было неопределено вначале. В данном случае есть явное a1 := 1, поэтому (!a1) || как бы и не нужно.
Но кто гарантирует, что оно будут всегда? FoolFroofed код всегда лучше, чем обычный.

Upd: Ну вот, и сам прекрасно разобрался.

9 (изменено: serzh82saratov, 2012-09-09 17:01:18)

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

b1 := ["Ложка","Вилка","Тарелка"]
a1 := 1
Active := b1[a1 :=  (!a1) ||  (a1>=b1.MaxIndex()) ? 1 : a1+1]
Return
Space::
Active := "Вилка"
MsgBox %a1%

Подскажите, а как здесь узнать значение "a1". То есть например переменная стала равна "Вилка", как узнать что она вторая в списке (получить на выходе "2")?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

b1 := ["Ложка","Вилка","Тарелка"]

Space::
    Active := "Вилка"
    For a1, value in b1
        continue
    Until value = Active
    MsgBox % a1

11

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Спасибо! А как сделать, чтобы если нет совпадения, то можно было это узнать, при подставлении не существующей в списке переменной, выдаёт 3.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12 (изменено: creature.ws, 2012-09-09 18:50:20)

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

1, 2 и внезапно 3

List := {"Стакан": "Стеклянный", "Вилка": "Железная", "Ложка": "Деревянная"}
result := ObjSearchValue(List, "Железная"))
msgbox % "Совпадений: " result.MaxIndex() "`nПервое совпадение: " result[1]
 
ObjSearchValue(obj, value)
{
    result := []
    for k, v in obj
        (v = value) && result.Insert(k)
    return result
}
b1 := ["Ложка","Вилка","Тарелка", "Вилка","Вилка","Вилка","Вилка","Вилка","Вилка"]

If IsObject(result := ObjSearchValue(b1, "Вилка"))
    msgbox % "Совпадений: " result.MaxIndex() "`nПервое совпадение: " result[1]

ObjSearchValue(obj, value)
{
    result := []
    for k, v in obj
        (v = value) && result.Insert(k)
    return result.MaxIndex()? result : false
}

Массивы List и b1 — объекты, в первом значения ассоциированы с текстовыми строками, во втором — с числами. Инициализация объекта с использованием {} или [] — для удобства, но суть объекта от этого не меняется.

13

Re: AHK: Циклически изменять хоткеем значение буквенной переменной

Да, действительно, что-то я запамятовал, сорри.


http://s019.radikal.ru/i606/1203/58/7b55e7d0f1c8.jpg

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui