![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
ДенисС |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Репутация: ![]() ![]() ![]() |
Стал вот потихоньку разбираться с паскалем, вроде что то получается. Вот возникла проблема: как задействовать стрелки и прочии несимвольные клавиши? С буквами-цифирьками вроде все просто, пишешь например C:=readln, а потом разными способами опредиляешь, что надо сделать с этой клавишей. А вот как быть со стрелками - как то непойму. Они вроде таким способом в строковую переменную ничего не записывают. Где-то краем уха услышал, что используется запись каким-то сложным шифром, а вот как его после этого опредилять, и какие кнопки каким шифром опредиляются - не слышал. Может здесь кто подскажет, как это все надо делать?
|
![]() ![]() |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
APAL, не согласен с вами, так не проще.
ДенисС, этот метод как раз использует функция keypressed (определяет нажата ли клавиша) Вот тестовая программа, которая позволяет узнать сканкоды всех клавиш: Код uses dos; var scancod:word; begin repeat If port[$60]<$80 then begin scancod:=port[$60]; mem[0:$41C]:=mem[0:$41A]; {очистка} writeln(scancod) end until scancod=1; end. а вот эта более продвинутая программа: Код uses dos,crt; var scancod:word; begin clrscr; repeat If port[$60]<$80 then begin scancod:=port[$60]; mem[0:$41C]:=mem[0:$41A]; {®зЁбвЄ } writeln(scancod); port[$60]:=$80; end; If (scancod<>1) and (scancod<>0) then begin port[$60]:=$80; scancod:=0 end; until scancod=1; end. Итак обращаясь к порту $60 мы можем не только определить нажата ли клавиша, но и (что гораздо важнее) определить нажатую клавишу! в этих программах код клавиш - scancod . Вот примеры сканкодов: ESC =1 ENTER=28 SPASE=57 1=2 (клавиша 1 имеет код 2 ) n=n+1(клавиша n имеет код n+1, например 3-код4) q=16 ... (клавиши левее на 1 больше) p=25 и т.д -------------------------------- преимущества использования конструкции PORT[$60] 1) выигрыш в скорости: keypressed использует тоже обращение к портам, keypressed лежит в модуле CRT ---> компилируется с типом FAR --> задержка на несколько милисекунд, и занимает лишний байт!!!!!! 2) можно использовать не только как keypressed но и как readkey (2 в 1) 3) не надо мучаться с кодировками, все клавиши пронумерованны на всех компах одинаково ------------------------------ какие будут вопросики B) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 28.04.2025 11:06 |