Для чтения с клавиатуры используются две функции: KeyPressed и ReadKey.
Функция KeyPressed определяет факт нажатия на любую клавишу и не приостанавливает дальнейшее исполнение программы. Возвращает значение типа Boolean – True, если клавиша нажата клавиша (и тогда в буфере клавиатуры есть хотя бы один символ), False – если клавиша не нажата (и, соответственно, буфер клавиатуры пуст).
Функция ReadKey читает расширенный код нажатой клавиши без эхо повтора и приостанавливает исполнение программы до нажатия на любую клавишу, кроме Shift, Ctrl, Alt, CapsLock, NumLock, ScrollLock.
При использовании процедуры ReadKey необходимо учесть, что в клавиатурный буфер помещаются так называемые расширенные коды нажатых клавиш. Если нажимается любая алфавитно-цифровая клавиша, расширенный код совпадает с ASCII-кодом соответствующего символа.
При нажатии функциональных клавиш <F1>—<F10>, клавиш управления курсором, клавиш <Ins>, <Home>, <Del>, <End>, <PgUp>, <PgDn> в буфер помещается двухбайтная последовательность: сначала символ #0, а затем расширенный код клавиши. Таким образом, значение #0, возвращаемое функцией ReadKey, необходимо только для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа должна еще раз обратиться к функции, чтобы прочитать расширенный код клавиши.
Следующая простая программа позволит вам определить расширенный код любой клавиши. Для завершения работы программы нажмите клавишу .
Uses CRT;
var
С: Char;
begin
repeat
С := ReadKey;
if C<>#0 then
WriteLn{ord(C))
else
WriteLn('0\ord(ReadKey) :,8)
until C=#27 {27 - расширенный код клавиши Esc)
end.
Если вы воспользуетесь этой программой, то обнаружите, что нажатие на некоторые клавиши игнорируется функцией ReadKey. Это прежде всего так называемые сдвиговые клавиши — , , . Сдвиговые клавиши в MS-DOS обычно служат для переключения регистров клавиатуры и нажимаются в сочетании с другими клавишами. Именно таким способом, например, различается ввод прописных и строчных букв. Кроме того, функция игнорирует переключающие клавиши , , .
В табл. 13.1 приводятся расширенные коды клавиш, возвращаемые функцией ord (ReadKey). Для режима ввода кириллицы приводятся коды, соответствующие альтернативному варианту кодировки.
Таблица 13.1. Расширенные коды клавиш
|