Page 1 of 2

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

Posted: Wed 20 Feb, 2013 13:17
by John Doe
V=akey(Mode[,Type])
Возвращает название или код клавиши, вызвавшей макропоследовательность.
Mode = 0 - возвращается код клавиши, Mode = 1 - возвращается наименование клавиши.

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

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

Как его вообще можно использовать?
Чему он реально соответствует? Имеет ли смысл его значение вне фара?

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

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

Сейчас это похоже пережиток.
Смущает, что в akey это первый параметр (причём обязательный)

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

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

так как внутренние коды клавиш внутренние, то с ними может случиться всё что угодно, вплоть до полного исчезновения. поэтому лучше переходить на использование имён.

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

Posted: Thu 21 Feb, 2013 01:00
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

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

Posted: Thu 21 Feb, 2013 02:27
by zg
John Doe wrote:Уже не важно, но для интереса проверил в двойке:
и каков результат?

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

Posted: Thu 21 Feb, 2013 09:06
by John Doe
Работает, иначе зачем бы я код приводил :-)

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

Posted: Sat 10 Jan, 2015 18:52
by Shmuel
Вопрос: пользуется ли кто-то числовыми значениями клавиш, например, в функциях akey и key?
Если пользуетесь, покажите пример полезного применения.
(Есть намерение убрать эти числа из доступа макросов).

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

Posted: Mon 30 Dec, 2019 09:54
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 477 times
Без КонеМу (неуспех):
image.png
image.png (4.94 KiB) Viewed 478 times
Узнать код или красивое имя нажатия:
lua:=mf.waitkey(10000, 0) -- 0 - for code name, 1 - for code value

отвечая на другой вопросы:
числовое значение используется вездe,
в том числе и в ФАРе в ИнпутРекорд евентов,
в том числе и во всех языках программирования/скриптинга которые я знаю.

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

Posted: Mon 30 Dec, 2019 11:40
by John Doe
Xerox wrote: Mon 30 Dec, 2019 09:54 которые есть вполне стандартные например код Еск = 27.
Esc допустим. А Shift+Esc тоже даёт вполне стандартное значение?

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

Posted: Mon 30 Dec, 2019 22:57
by Xerox
John Doe wrote: Mon 30 Dec, 2019 11:40 Esc допустим. А Shift+Esc тоже даёт вполне стандартное значение?
Не дает, но и вреда огромного вроде не приносит..
Я бы скорее подумал что может сделать этот цифрокод более осмысленным (когдa-нибудь, если несложно),
чем изза того что он сейчас неосмысленный убирать рабочую для одиночных нажатий функциональность

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

Posted: Mon 30 Dec, 2019 23:22
by John Doe
Однако пока что практического применения этих иногда осмысленных кодов показано не было.

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

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

Вы имеете ввиду перейти целиком на именa/именованные константы?
Так есть 4.) китайские клавиатуры для которой не напасешься именованных констант, любые другие экзотичные клавиатуры
Код нажатия всегда будет, а красивое имя для него ой как не всегда

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

Posted: Tue 31 Dec, 2019 13:16
by Xerox

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

Posted: Tue 31 Dec, 2019 13:21
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.

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

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