Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Функции опроса клавиатуры



В модуле CRT дополнительные возможности управления клавиатурой реализуются двумя функциями: KeyPressed и ReadKey.

ФункцияKeyPressed возвращает значение типа Boolean, указы­вающее состояние буфера клавиатуры (False означает, что буфер пуст, а True — что в буфере есть хотя бы один символ, еще не прочитанный программой).

В MS—DOS реализуется так называемый асинхронный буферизованный ввод с клавиатуры. По мере нажатия клавиши, соответствующие коды ASC II помещаются в особый буфер, откуда они могут быть прочитаны программой. Стандартная длина буфера рассчитана на хранение до 16 кодов символов. Если программа достаточно долго не обращается к кла­виатуре, а пользователь нажимает клавиши, буфер может оказаться пе­реполненным. В этот момент раздается звуковой сигнал и «лишние» коды теряются. Чтение из буфера обеспечивается процедурами Read/ReadLn и функцией ReadKey. Отметим, что обращение к функции KeyPressed не за­держивает исполнения программы: функция немедленно анализирует буфер и возвращает то или иное значение, не дожидаясь нажатия клави­ши.

Функция ReadKey. Возвращает значение типа Char. При обращении к этой функции анализируется буфер клавиатуры: если в нем есть хотя бы один не прочитанный символ, код этого символа берется из буфера и возвращается в качестве значения функции, в противном случае функция будет ожидать нажатия на любую клавишу. Ввод символа с помощью этой функции не сопровождается эхоповтором и содержимое экрана не меняется.

Пусть, например, в каком-то месте программы необходимо игнори­ровать все ранее нажатые клавиши, коды которых еще не прочитаны из буфера, т.е. необходимо очистить буфер. Этого можно достичь следующим способом:

Uses CRT;

var

С: Char;

begin

while KeyPressed do

С:= ReadKey;

………

end.

При использовании процедуры ReadKey необходимо учитывать, что в буфер клавиатуры поступают так называемые коды нажатых клавиш. Если нажимается любая алфавитно-цифровая клавиша, расширенный код совпадает с ASC II - кодом соответствующего символа. Например, если нажимается клавиша с латинской буквой «а» (в нижнем регистре), функция ReadKey возвращает значение chr{97), а если «А» (в верхнем регистре) – значение chr(65). При нажатии функциональных клавиш F1...F10, клавиш управления курсором, клавиш Ins, Home, Del, End, PgUp, PgDn в буфер помещается двубайтная последовательность: сначала символ #0, а затем расширенный код клавиши. Значение #0, возвращаемое функцией ReadKey, используется исключительно для того, чтобы указать программе на генерацию расширенного кода. Получив это значение, программа еще раз обращается к функции, чтобы прочитать расширенный код клавиши.

Следующая простая программа позволит Вам определить расширенный код любой клавиши. Для завершения работы программы необходимо нажать клавишу Esc.

Program DemoOrd;

Uses CRT;

Var

ch:Char;

Begin

repeat

ch:=Readkey;

Writeln(Ord(ch));

until ch=#27

End.

Поработав с этой программой, обнаруживаем, что нажатие некоторых клавиш игнорируется функцией ReadKey. Это, прежде всего, так называемые сдвиговые клавиши – Shift, Ctrl, Alt. Сдвиговые клавиши в MS—DOS обычно используются для переключения регистров клавиатуры и нажимаются в сочетании с другими клавишами. Таким способом, например, различается ввод прописных и строчных букв. Функция также игнорирует переключающие клавиши Caps Lock, NumLock, Scrol Lock.

В таблице 1 привены расширенные коды клавиш, возвращаемые функцией ord(ReadKey). Для режима ввода кириллицы приводятся коды, соответствующие альтернативному варианту кодировки.

Код Клавиша или комбинация клавищ Код Клавиша или комбинация клавищ
Первый байт Второй байт Первый байт Второй байт
Алфавитно-цифровые клавиши
  Backspace (Забой)   Tab (Табуляция)
  Enter   Пробел
  !  
  #   $
  %   &
    (
  )   *
  +   ,
    .
  / 48..57 0..9
  :   ;
  <   =
  >   ?
  @ 65..90 A..Z
  [   \
  ]   ^
  _   `
97..122 a..z   {
  |   }
    128..159 А..Я
160..175 а...п 224..239 р..я
Управляющие клавиши и их сочетание со сдвиговыми
    Ctrl-2     Shift-Tab
  16..25 Alt-Q…Alt-P (верхний ряд букв)   30..38 Alt-A…Alt-L (средний ряд букв)
  44..50 Alt-Z…Alt-M (нижний ряд букв)   59..68 F1…F10
    Home     Курсор вверх
    PgUp     Курсор влево
    Курсор вправо     End
    Курсор вниз     PgDn
    Ins     Del
  84..93 Shift-F1…Shift-F10   94..103 Ctrl-F1…Ctrl-f10
  104..113 Alt-F1…Alt-F10     Ctrl-PrtScr
    Ctrl – Курсор влево     Ctrl – Курсор вправо
    Ctrl-End     Ctrl-PgUr
    Ctrl-Home   120..131 Alt-1…Alt-= (верхний ряд клавиш)
    Ctrl-PgUp      

Для обработки клавиатуры удобно использовать операторы Case.. of в конструкциях вида:

repeat

ch:=readKey;

case ch of

#77: x:=x+1;

#75: x:=x-1;

#72: y:=y-1;

#80: y:=y+1;

end;

…………..

until ch=#27;

………….

Пример программы, которая создает на экране окно синего цвета и кубик белого цвета, затем перемещает его при нажатии клавиш управления указателя.

Program DemoDvigenie;

Uses CRT;

Var

x,y: integer;

ch: char;

Begin

x:=15;

y:=1;

TextBackGround(Blue); {Предварительное создание картинки}

Window(15,1,55,24); {синее окно и белый кубик}

ClrScr;

TextBackGround(White);

Window(x,y,x+1,y);

ClrScr;

repeat

ch:=readKey; {Обработка клавиатуры}

case ch of

#77: x:=x+1;

#75: x:=x-1;

#72: y:=y-1;

#80: y:=y+1;

end;

If x<15 then x:=54; {Если координаты кубика выходят за }

If x>54 then x:=15; { границы окна, то он появляется }

If y<1 then y:=24; {с противоположной стороны окна.}

If y>24 then y:=1;

TextBackGround(Blue); {Перерисовываются окно и кубик,}

Window(15,1,55,24); {а старая картинка закрашивается.}

ClrScr;

TextBackGround(White);

Window(x,y,x+1,y);

ClrScr;

until ch=#27;

End.





Дата публикования: 2015-06-12; Прочитано: 242 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...