IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Как задействовать стрелки?
ДенисС
сообщение 2.04.2004 13:22
Сообщение #1





Группа: Пользователи
Сообщений: 9

Репутация: -  0  +


Стал вот потихоньку разбираться с паскалем, вроде что то получается. Вот возникла проблема: как задействовать стрелки и прочии несимвольные клавиши? С буквами-цифирьками вроде все просто, пишешь например C:=readln, а потом разными способами опредиляешь, что надо сделать с этой клавишей. А вот как быть со стрелками - как то непойму. Они вроде таким способом в строковую переменную ничего не записывают. Где-то краем уха услышал, что используется запись каким-то сложным шифром, а вот как его после этого опредилять, и какие кнопки каким шифром опредиляются - не слышал. Может здесь кто подскажет, как это все надо делать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
P@sh@
сообщение 7.04.2004 5:04
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


процедурка для проверки нажатых клавиш - обычных, модификаторов (shift, ctrl, alt) и переключателей (Num Lock, Caps Lock, Scroll Lock). Если нет нажатых клавиш - везде нули... нажатий не ждет...
вариант чисто на Паскале:
Код

uses dos;

procedure ReadKeyExt(var ASCII,Scan,Reg:Byte);
var Regs:Registers;
begin
 Regs.AH:=2; Intr($16,Regs); Reg:=Regs.AL; Scan:=0;
 Regs.AH:=1; Intr($16,Regs); ASCII:=0;
 if Regs.Flags and fZero=0 then begin
   Regs.AH:=0; Intr($16,Regs);
   Scan:=Regs.AH; ASCII:=Regs.AL;
 end;
end;

Reg рассматривать как набор битов - флагов клавиш-модификаторов
Scan - сканкод клавиши (любой)
ASCII - код нажатого символа (в текущей кодировке/состоянии регистров)
если хотите, можете переписать на ассемблере
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ДенисС   Как задействовать стрелки?   2.04.2004 13:22
SKVOZNJAK   Дык просто. При нажатии курсоров, эфок и т. д. В б...   2.04.2004 13:37
ДенисС   Это я понял, спасибо. А вот как потом этот код обр...   2.04.2004 14:01
SKVOZNJAK   IF KEYPRESSED=TRUE THEN IF ORD(READKEY)=0 THEN IF ...   2.04.2004 14:10
Altair   Раз уж речь пошла про клавиатуру, то позвольте рсс...   2.04.2004 15:46
SKVOZNJAK   Но обнулять буфер всё-равно надо! Иначе при за...   2.04.2004 21:14
Altair   Да, SKVOZNJAK, согласен с вами, обнуление буфера -...   3.04.2004 8:04
ДенисС   Oleg_Z А можно поподробнее про этот метод, я паск...   3.04.2004 9:10
APAL   А может проще: Repeat   {выполняем програм...   4.04.2004 10:02
Altair   APAL, не согласен с вами, так не проще. ДенисС, эт...   4.04.2004 12:14
APAL   А если надо узнать в какой кодировке была нажата к...   4.04.2004 12:45
Altair   Да,APAL, согласен тогда разделим сферы интересов: ...   4.04.2004 12:53
APAL   Полностью согласен! P.S.: У тебя хорошо получ...   4.04.2004 13:36
BlackShadow   Я бы ещё порекомендовал использовать модифицирован...   6.04.2004 10:28
Altair   Отлично, думаю надо создать тему "Замена стан...   6.04.2004 13:05
P@sh@   не забывайте также, что седьмой бит значения scanc...   6.04.2004 14:43
APAL   Идея хорошая! Если откапаю в своем архиве вы...   6.04.2004 21:32
SKVOZNJAK   Ну, если уж почувствовали в себе силушку богатырск...   6.04.2004 21:51
P@sh@   процедурка для проверки нажатых клавиш - обычных, ...   7.04.2004 5:04
P@sh@   ASCII можно объявить как Char, в ней будет возвращ...   7.04.2004 5:06
ДенисС   Ой, углубились вы куда-то. Операторы какие-то стра...   13.04.2004 6:25
Altair   точно.   13.04.2004 6:26


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.07.2025 3:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"