Функция ReadKey возвращает значение типа char. При обращении к этой функции анализируется буфер клавиатуры: если в нем есть хотя бы один не прочитанный символ, код этого символа берется из буфера и возвращается в качестве значения функции, в противном случае функция будет ожидать нажатия на любую клавишу. Ввод символа с помощью этой функции не сопровождается эхо-повтором и содержимое экрана не меняется. Например, в какой-то точке программы необходимо игнорировать все ранее нажатые клавиши, коды которых еще непрочитаны из буфера, т.е. необходимо очистить буфер. Этого можно достичь следующим способом:
Uses CRT;
Var
с; char;
Begin
while Keypressed do
c:== ReadKey;
. . . . .
end.
При использовании процедуры ReadKey следует учесть, что в клавиатурный буфер помещаются так называемые расширенные коды нажатых клавиш. Если нажимается любая алфавитно-цифровая клавиша, расширенный код совпадает с ASCII-кодом соответствующего символа. Например, если нажимается клавиша с латинской буквой «а» (в нижнем регистре), функция ReadKey возвращает значение chr(97), а если – «а» (в верхнем регистре) – значение chr(65). При нажатии функциональных клавиш F1...F10 (клавиш управления курсором), клавиш Ins, Home, Del, End, PgUp, PgDn в буфер помещается двухбайтовая последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией ReadKey, используется исключительно для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна еще раз обратиться к функции, чтобы прочитать расширенный код клавиши.
Следующая простая программа позволит определить расширенный код любой клавиши. Для завершения работы программы нужно нажать клавишу esc.
Var с: char;
repeat
c:= ReadKey;
if c< >#0 then
writeln (ord(c))
else
writeln ('0', ord (ReadKey):8)
until c=#27 {27 – расширенный код клавиши esc}
Если вы воспользуетесь этой программой, то обнаружите, что нажатие на некоторые клавиши игнорируется функцией ReadKey. Это прежде всего так называемые сдвиговые клавиши – Shift, Ctrl, Alt. Сдвиговые клавиши в MS-DOS обычно используются для переключения регистров клавиатуры и нажимаются в сочетании с другими клавишами. Именно таким способом, например, различается ввод прописных и строчных букв. Кроме того, функция игнорирует переключающие клавиши Caps Lock, Num Lock, Scroll Lock.
в таблице приведены расширенные коды клавиш, возвращаемые функцией ord(ReadKey).
Расширенные коды клавиш
Таблица
Код
Клавиша или комбинация клавиш
первый байт
второй байт
Алфавитно-цифровые клавиши
8
–
backspace (забой)
9
tab (табуляция)
13
enter
32
пробел
33
!
34
«
35
#
36
$
37
%
38
&
39
"
40
(
41
)
42
*
43
+
44
,
45
46
.
47
/
48...57
0...9
58
:
59
;
60
<
61
=
52
>
63
?
64
@
65...90
A...Z
91
[
92
93
]
94
^
95
_
96
97...122
a...z
123
{
124
??
125
}
126
~
128...159
A...Я
160...175
а...п
224...239
р...я
Управляющие клавиши и их сочетания со сдвиговыми
0
3
Ctrl–2
15
Shift – Tab
16...25
Alt–Q...Alt–P (верхний ряд букв)
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26