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

> Прочтите прежде чем задавать вопрос!

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

> Опрос клавиатуры
RockFan
сообщение 17.04.2007 1:41
Сообщение #1





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

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


Помогите решить проблему!Нужно определить каждую клавишу на клавиатуре через прерывание!В этой версии при нажатии на функциональные клавиши или стрелочки выдается сообщение о нажатии левого Шифта!Как это исправить?И как определить клвишы у которых скен коды больше 255(num look например)?


uses dos, crt;
Var
Shift, RightShift,PrintScr,CapsLook,ScrollLook: boolean;
Ctrl, Alt, exit,NumLook,F11,F12,Up: boolean;
Old_09: Pointer;
SvInt9: procedure;

{$f+}
Procedure New9; Interrupt;
Var
Scan: integer;
Begin
Scan := Port[ $60 ];
Shift := (Scan = 42) or (Scan = 54);
if Shift then
RightShift := (scan = 54)
else begin
Ctrl := (scan = 29);
Alt := (scan = 56);
CapsLook := (scan = 58);
NumLook := (scan = 170);
PrintScr := (scan = 55);
ScrollLook := (scan = 70);
F11:=(scan = 87);
F12:=(scan = 88);
NumLook:=(scan = 325);
Up:=(scan = 328);
exit := (scan = $01);
end;

Inline( $9C );
SvInt9;
End;
{$f-}

Procedure Klavisha;
var key: char;

begin
key:= readkey;
if key<>#0 then
begin
case key of
#8 : writeln ('BackSpace ');
#9 : writeln ('Tab ');
#13 : writeln ('Enter ');
#27 : writeln ('Esc ');
#32 : writeln ('Џа®ЎҐ« ');
else
writeln (Key);
end;
end
else
begin
key:=readkey;
case key of
#59..#68 : writeln('F',ord(key)-58);
#71: writeln('Home');
#72: writeln('Up');
#73: writeln('PageUp');
#75: writeln('Left');
#77: writeln('Right');
#79: writeln('End');
#80: writeln('Down');
#81: writeln('PageDown');
#82: writeln('Ins');
#83: writeln('Del');
end;
end;
end;

BEGIN
GetIntVec($9, @SvInt9);
SetIntVec($9, @New9);

repeat
if keypressed then
Klavisha
else
if Shift then begin
if RightShift
then write('Right ')
else write('left ');
writeln('Shift ');
Shift := false;
end
else
if Ctrl then begin
writeln('Control ');
Ctrl := false
end
else
if Alt then begin
writeln('Alt ');
Alt := false
end
else
if Capslook then begin
writeln('CapsLook ');
CapsLook := false;
end

else
if ScrollLook then begin
writeln('ScrollLook ');
ScrollLook := false;
end
else
if F11 then begin
writeln('F11 ');
F11 := false;
end
else
if F12 then begin
writeln('F12 ');
F12 := false;
end
else
if NumLook then begin
writeln('NumLook ');
NumLook := false;
end;



until exit;

SetIntVec($9, @SvInt9);
END.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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