Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by John Doe »

V=akey(Mode[,Type])
Возвращает название или код клавиши, вызвавшей макропоследовательность.
Mode = 0 - возвращается код клавиши, Mode = 1 - возвращается наименование клавиши.

V=waitkey([N[,T]])
Ожидает любую клавишу и возвращает её название (T=0) или значение (T=1).

S=key(V)
Преобразует параметр V в строковый эквивалент названия клавиши.
Возможно я что-то упускаю, но зачем сейчас этот "код клавиши"?
Что с ним делать?

Как его вообще можно использовать?
Чему он реально соответствует? Имеет ли смысл его значение вне фара?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(

Post by John Doe »

Насколько я помню, раньше определённый смысл был.
Наименования клавиш являлись по сути константами, и имело смысл такое сравнение: $if akey(0)==Esc
Кроме того, насколько я помню вызов akey(0) можно было использовать вместо $AKey

Сейчас это похоже пережиток.
Смущает, что в akey это первый параметр (причём обязательный)
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(

Post by zg »

John Doe wrote:Наименования клавиш являлись по сути константами, и имело смысл такое сравнение: $if akey(0)==Esc
насколько я помню, нельзя так было писать. только число, соответствующее внутреннему коду клавиши.
Сейчас это похоже пережиток.
оно пережиток. причина существования — сконвертированные макросы.

так как внутренние коды клавиш внутренние, то с ними может случиться всё что угодно, вплоть до полного исчезновения. поэтому лучше переходить на использование имён.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(

Post by John Doe »

zg wrote:
John Doe wrote:Наименования клавиш являлись по сути константами, и имело смысл такое сравнение: $if akey(0)==Esc
насколько я помню, нельзя так было писать. только число, соответствующее внутреннему коду клавиши.
Уже не важно, но для интереса проверил в двойке:

Code: Select all

macro:post $if(waitkey(0,1)==Esc) msgbox(Esc) $else msgbox(0,"not Esc") $end
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(

Post by zg »

John Doe wrote:Уже не важно, но для интереса проверил в двойке:
и каков результат?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(

Post by John Doe »

Работает, иначе зачем бы я код приводил :-)
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Числовые значения клавиш

Post by Shmuel »

Вопрос: пользуется ли кто-то числовыми значениями клавиш, например, в функциях akey и key?
Если пользуетесь, покажите пример полезного применения.
(Есть намерение убрать эти числа из доступа макросов).
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by Xerox »

Shmuel,
я пользуюсь, и убирать не надо :)
полезное применение - позволяет знать или задать коды нажатия,
которые есть вполне стандартные например код Еск = 27.

Ну например такой мой смелый но частично успешный эксперимент с зaданием цвета при записи в ФАР аутпут:
lua:printToFARConsole("aaa"..string.char(27).."[38;5;226m yellow color here")
из под КонеМу успех:
image.png
image.png (6.74 KiB) Viewed 1098 times
Без КонеМу (неуспех):
image.png
image.png (4.94 KiB) Viewed 1099 times
Узнать код или красивое имя нажатия:
lua:=mf.waitkey(10000, 0) -- 0 - for code name, 1 - for code value

отвечая на другой вопросы:
числовое значение используется вездe,
в том числе и в ФАРе в ИнпутРекорд евентов,
в том числе и во всех языках программирования/скриптинга которые я знаю.
Last edited by Xerox on Mon 30 Dec, 2019 10:06, edited 9 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by John Doe »

Xerox wrote: Mon 30 Dec, 2019 09:54 которые есть вполне стандартные например код Еск = 27.
Esc допустим. А Shift+Esc тоже даёт вполне стандартное значение?
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by Xerox »

John Doe wrote: Mon 30 Dec, 2019 11:40 Esc допустим. А Shift+Esc тоже даёт вполне стандартное значение?
Не дает, но и вреда огромного вроде не приносит..
Я бы скорее подумал что может сделать этот цифрокод более осмысленным (когдa-нибудь, если несложно),
чем изза того что он сейчас неосмысленный убирать рабочую для одиночных нажатий функциональность
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by John Doe »

Однако пока что практического применения этих иногда осмысленных кодов показано не было.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by Xerox »

John Doe,
А как же то что я говорил -
1.) писать в цвете в КонеМу
2.) соотносить с тем что есть в КейИнпутРекорд от евента
3.) да тупо подсмотреть забытый код буковки/нажатия

Вы имеете ввиду перейти целиком на именa/именованные константы?
Так есть 4.) китайские клавиатуры для которой не напасешься именованных констант, любые другие экзотичные клавиатуры
Код нажатия всегда будет, а красивое имя для него ой как не всегда
Last edited by Xerox on Tue 31 Dec, 2019 13:18, edited 1 time in total.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by Xerox »

Last edited by Xerox on Tue 31 Dec, 2019 13:26, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by John Doe »

Xerox wrote: Tue 31 Dec, 2019 12:44 писать в цвете в КонеМу
Для этого вы используете mf.key?
Xerox wrote: Tue 31 Dec, 2019 12:44 соотносить с тем что есть в КейИнпутРекорд от евента
И запретить пользователю нажимать модификаторы?
Xerox wrote: Tue 31 Dec, 2019 12:44 да тупо подсмотреть забытый код буковки/нажатия
Функции для перевода нажатия в коды (и обратно) безусловно имеют право на существование.
Обратите внимание на far.NameToInputRecord/far.InputRecordToName.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Для чего сейчас код клавиши: akey(0), waitkey(N,1), key(V) ?

Post by Xerox »

John Doe wrote: Tue 31 Dec, 2019 13:21 Для этого вы используете mf.key?
чтобы переводить туда-сюда цифра<==>имя, да, все средства хороши, пусть будет под рукой..
И запретить пользователю нажимать модификаторы?
запрещать ничего не надо, но в части сценариев, особенно диагностических "low-level" сценариев, имеет смысл..
Обратите внимание на far.NameToInputRecord/far.InputRecordToName.
NameToInputRecord/far.InputRecordToName работают с РЕКОРДОМ, если не ошибаюсь? а это во многих сценариях мнее удобно чем с кодом
Post Reply

Return to “Обсуждение макросов”