Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
рук-во по РГР c указанием сложности.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
205.82 Кб
Скачать

Клавиши и коды

При нажатии любой клавиши клавиатура генерирует некоторый код, известный как скэн-код (scan-code) [1]. Далее проводится преобразо­вание поступающего скэн-кода в специальный двухбайтовый код. Младший из этих двух байтов для символьных клавиш содержит ASCII-код, соответствующий изображенному на клавише знаку, а старший байт содержит скэн-код клавиши.

При нажатии некоторых управляющих клавиш, таких как <F1> — <F10>, <Home>, <Del>, <Ins> и других, а также при нажатии некоторых комбинаций клавиш младший байт двухбайтового кода содержит не ASCII-код, а 0 (нуль). Это признак того, что нажатая клавиша не являет­ся символьной. Старший байт при этом содержит скэн-код нажатой клавиши (если это единственная клавиша) или номер комбинации кла­виш (если это комбинация, в которой участвует управляющая клавиша). Двухбайтный код, младший байт которого содержит нуль, называют расширенным ASCII-кодом.

В соответствии с этим клавиши на стандартной клавиатуре компью­тера можно разделить на три группы:

  • клавиши (и комбинации клавиш), при нажатии которых в буфер заносится простой ASCII-код (символьные клавиши в обоих регистрах, а также некоторые ком­бинации с участием клавиш <Ctrl> и <Alt>);

  • клавиши (и комбинации клавиш), при нажатии которых в буфер заносится расширенный ASCII-код (функциональные клавиши и их комбинации с клавишами <Ctrl>, <Shift> и <Alt>; символьные клавиши в сочетании с <Alt> и еще некоторые);

  • клавиши (и комбинации клавиш), при нажатии которых никакой код в буфер не заносится (<Ctrl>, <Alt>, <Shift>, <NumLock>, <CapsLock>, <ScrollLock>, <Pause>, <Print Screen>, а также некоторые комбинации).

Итак, после нажатия клавиши соответствующий код помещается в буфер клавиатуры. Считывание из буфера осуществляется с помощью процедур Read и ReadLn, а также функции ReadKey. Буфер в состоянии вместить до 16 символов. Если клавиши на клавиатуре нажимаются, а коды из буфера не считываются, имеет место переполнение буфера и после этого коды начинают теряться. Для работы с клавиатурой удобно использовать 2 функции модуля CRT:

  • Функция KeyPressed: Boolean – возвращает значение True, если в буфере есть хотя бы один символ (т.е, если была нажата клавиша на клавиатуре), и False в противном случае.

  • Функция ReadKey: Char cчитывает символ из буфера клавиатуры; считанный символ этом на экране не отображается. Если перед обращением к ReadKey в буфере что-то было, символ считывается немедленно. Если буфер пуст, функция ожидает нажатия клавиши.

Приложение 6

Пример программы выявления нажатия любой клавиши

uses crt;

var a.-byte;

begin

while KeyPressed do { опорожнение буфера клавиатуры }

a:=ReadKey;

repeat {цикл, выполнение которого продолжается

пока не будет нажата любая клавиша}

until KeyPressed;

end.

Первый цикл в программе:

WHILE KeyPressed do a:=ReadKey

опорожняет буфер клавиатуры. Здесь используются две функции модуля CRT (KeyPressed и ReadKey). До тех пор, пока функция KeyPressed не вернет значение FALSE, будет выполняться оператор a:=ReadKey. Иными словами, чтобы опорожнить буфер, считываются все содержа­щиеся в нем коды символов.

Второй цикл в этой программе:

repeat ... until KeyPressed

обеспе­чивает циклическое выполнение набора операторов (представленных здесь тремя точками) до тех пор, пока не будет нажата любая клавиша, после чего некоторый код попадет в буфер. Иными словами, как раз этот цикл выявляет нажатие любой клавиши.

Приложение 7