Для чего сейчас код клавиши: 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
насколько я помню, нельзя так было писать. только число, соответствующее внутреннему коду клавиши.
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 (6.74 KiB) Viewed 1106 times
Без КонеМу (неуспех):
image.png (4.94 KiB) Viewed 1107 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
У меня идея кстати, по поводу VT кодов, в аутпуте консоли раз получается писать, то может в UI-elements их начать использовать?
Сейчас получается такая фигня (в том числе и в KонеMу) :
image.png (2.44 KiB) Viewed 1012 times
можно ли делать так чтобы элементы UI прозрачно передавали такие коды в консоль?
Имеет ли мне смысл перепостить это в "предложения и идеи" ?
Для чего сейчас код клавиши: 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 работают с РЕКОРДОМ, если не ошибаюсь? а это во многих сценариях мнее удобно чем с кодом