Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Управление клавиатурой




Назначение и состав модуля CRT

РАБОТА С МОДУЛЕМ CRT

Стандартные модули

 

Паскаль содержит стандартные модули SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY. Модуль GRAPH содержится в одноименном TPU-файле, остальные вхо­дят в состав библиотечного файла TURBO.TPL.

Для использования из программы процедур и функций модулей надо после оператора PROGRAM поместить предложение Uses, в котором должны быть указа­ны имена требуемых модулей. Например: Uses Printer, Crt, Graph;

Модуль SYSTEM подключается к программе автоматически, без указания его имени в Uses.

Стандартные модули содержат большое число разнообразных процедур и функций. Подсказки о них можно получить из среды Паскаль.

Процедуры и функции модуля DOS выполняют ряд действий, в том числе:

- обслуживание прерываний;

• проверку состояния диска;

- обработку файлов (поиск в каталоге, выдачу и установку атрибутов файлов);

- управление процессом выполнения программ;

• управление операционной средой.

Например, с помощью процедуры DiskFree (d: word); можно получить количество свободных байт на заданном диске; при d = 1 определяется диск А, при d = 2 - диск В и т. д. Процедуры SetDate и SetTime устанавливают в ОС текущую дату и время. С помощью GetDate и GetTime можно получить текущую дату и время.

В последующих разделах данной части рассмотрим назначение некоторых процедур и функций модулей CRT и GRAPH. Более детально с ними можно озна­комиться по [9] и [11].

 

 

Модуль CRT (Cathode-Ray Tube - электронно-лучевая трубка) входит в библиотечный файл Turbo.TPL. Для использования модуля CRT в программе должен быть оператор Uses CRT;.

Процедуры и функции модуля CRT предназначены для:

1) управления клавиатурой, в том числе считывания кода символа нажатой кла­виши с высвечиванием символа на экране и без высвечивания;

2) управления текстовым экраном, в том числе:

а) формирования окна;

б) управления положением курсора и определения координат положения курсора;

в) определения цвета фона и цвета символов на экране и в выделенном окне;

3) управления принтером, в том числе выбором шрифтов и перемещением бумаги;

4) управления звуковым сигналом.

Рассмотрим некоторые возможности модуля CRT.

 

 

Средства управления клавиатурой с помощью модуля CRT рассмотрим на примерах:

- кодировки символов клавиатуры;

- ввода текстов с их высвечиванием на экране (процедуры Read и Readln);

- ввода символа без его высвечивания на экране (процедура ReadKey);

- определения нажатия на любую клавишу (функция KeyPressed).

При нажатии на каждую клавишу схемно вырабатывается уникальный код - код сканирования (скан-код). В программах он не используется. Код сканиро­вания программно преобразуется в другой код, который и используется в про­граммах. Для наиболее широко применимых кодов разработаны стандарты. На­пример, для кодировки символов используется код ASCII - American Standard Code for Information Interchange. Это 7-битовый код. С его помощью можно закодировать всего 128 символов с кодами 0..127. Примеры этих кодов приведе­ны в таблице. Символы с кодами 0..31 - служебные. При выводе они представ­ляются пробелами. Некоторые из них могут иметь самостоятельное значение, например, 7 - звонок.

Таблица. Примеры кодов ASCII

 

Код Символ Код Символ Код Символ Код Символ
  NUL   &   A   a
  Звук   (   B   b
  Возврат (BS)   )   C   c
  Новая строка(LF)   *   D   d
  Enter (CR)   +   E   e
  EOF       F   f
  ESC       G   g
  Пробел       H   h
  #       I   i
  $       J   j
  %       K   k

 

Каждый символ в памяти занимает 1 байт (8 бит). С помощью байта можно закодировать 256 символов с кодами 0..255. Символы с кодами 128..255 не огра­ничены стандартами. С их помощью можно кодировать национальные алфавиты и специальные символы псевдографики. Один из вариантов кодировки символов кодами 128..255 дан в таблице, где коды символов русского алфавита упорядочены в порядке возрастания.

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

 

 

Код Символ Код Символ Код Символ Код Символ код Символ
  А   Б   В   Г   Д
  Е   Ж       И   Й
  К   Л   М   Н    
  П   Р   С   Т   У
  Ф   X   Ц   Ч   Ш
  Щ   Ъ   Ы   Ь   Э
  Ю   Я   а   б   в
  г   д   е   ж   з
  и   й   к   л   м
  н   о   п    
         
         
         
         
         
      =    
         
         
         
    р   с   т   у
  ф   х   ц   ч   ш
  щ   ъ   ы   ь   э
  ю   я   Ё   ё   Є
  є   Ï   ï   Ÿ   ÿ
  º     .    
  ¤              

 

В примере приведен текст программы, с помощью которой можно вы­вести значения символов, имеющих значения кодов, заданные с помощью пере­менной i. Значение символа по i-коду определяется с помощью функции chr (i). Результаты выводятся по 6 значений в строке.

Пример. Вывод значений символов, заданных кодами.

Uses CRT;

var

i: integer;

begin ClrScr;

for i:= 0 to 255 do

begin { - перебор i-значений кодов }

write ('i=', i,':', chr(i)); { - вывод символов на экран }

if i mod 6=0 then Writeln; { - переход на следующую строку }

end

end.

Определить коды заданных символов, например символов русского алфавита, можно с помощью программы: код a [i] - сим­вола определяется с помощью функции ord(a [i]).

Программа вывода кодов символов русского алфавита.

const a: array [1..62] of char =

‘абвгдежзийклмнопрстуфхцчшщьъэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЭЮЯ’;

var i: integer;

begin

for i:= 1 to 62 do { - перебор i-номеров символов массива 'а' }

writeln ('кода[', i, '] = ', a[i], ' = ', ord(a[i] } };

end.

Воспроизвести символ большинства кодов на экране можно, нажав соответст­вующую ему клавишу. Но этого нельзя сделать, например, для кодов псевдо­графики. Любой из символов, имеющих коды 1..255, можно воспроизвести на экране, дополнительно используя клавишу Alt. Для этого в среде Паскаль надо установить режим работы с цифровой клавиатурой (правая часть клавиатуры), нажав клавишу Num Lock, что фиксируется индикатором Num Lock. Затем надо нажать клавишу Alt и, не отпуская ее, на цифровой клавиатуре набрать код символа, после чего отпустить клавишу Alt. На экране воспроизведется символ, код которого был набран.

Процедуры Read и Readln модуля System осуществляют ввод данных, в том числе с помощью клавиатуры. Причем они приостанавливают выполнение про­граммы до тех пор, пока не будет нажата клавиша Enter. Для этого сначала значение набирается с помощью клавиатуры, запоминается в буфере и высвечи­вается на экране, и после нажатия клавиши Enter данные из буфера передаются

в область ОП переменных программы. Ввод с помощью процедур Read и Readln имеет следующие недостатки:

1) с их помощью невозможно опознать нажатие на клавиши управления курсором (Т, 4, —>, <—) и на функциональные клавиши;

2) ввод символов сопровождается их воспроизведением (эхо-повтором) на экране;

3) обращение к этим процедурам приостанавливает программу до нажатия клави­ши Enter.

Это неудобно, например, для игровых задач. Ряд дополнительных возможно­стей дают функции ReadKey и KeyPressed. Они обеспечивают потребности большинства прикладных программ.

Функция ReadKey без параметров. Она возвращает значение типа CHAR - код нажатой клавиши. С ее помощью можно считать и опознать нажатие на любую клавишу, кроме клавиш-переключателей (Alt, Shift, Ctrl, Caps Lock). Эта функция приостанавливает работу программы до тех пор, пока не будет нажата клавиша. Считанный символ не отображается на экране, т. е. функция ReadKey вводит символ без высвечивания его на экране (без эхо-повтора). Это дает воз­можность для разработки удобных интерактивных программ, управление кото­рыми сводится в основном к нажатию функциональных клавиш.

С помощью ReadKey можно считать коды основных клавиш (табл. 4.1 и 4.2) и расширенные коды ПК (табл. 4.3). Расширенные коды - это коды верхнего ряда клавиш, коды правой части клавиатуры и коды комбинаций клавиш Alt, Ctrl, Shift с другими клавишами. В случае считывания расширенных кодов при первом обращении функция ReadKey возвращает код 0, а при втором - код расширенного набора кодов. Примеры расширенных кодов даны в табл. 4.3. В листинге 4.15 приведена программа, которая считывает и выводит код нажа­той клавиши, в том числе клавиши, имеющей расширенный код. Завершается программа нажатием Ctrl + 2.

Таблица 1. Примеры расширенных кодов

 

Код Клавиша Код Комбинация клавиш
Первый байт Второй байт Первый байт Второй байт
Управляющие клавиши и их сочетание со сдиговыми
  0 + 3 Ctrl + 2     Ctrl + PgUp
  59..68 F1..F10   84..93 SHIFT-F1.. SHIFT-F10
    НОМЕ   94.. 103 CTRL-F1.. CTRL-F10
    Курсор вверх ↑   104.. 113 ALT-F1.. ALT-F10
    PGUP     CTRL-PRTSCR
    Курсор влево ←     CTRL- Курсор влево
    Курсор вправо →     CTRL-Kypcop вправо
    END     CTRL-END
    Курсор вниз ↓     CTRL-PGDN
    PGDN     CTRL-HOME
    INS   120.. 131 ALT-1.. ALT - (верхний ряд клавиш)
    DEL     CTRL
             

 

Считывание кодов с помошью ReadKey и вывод их на экран.

uses Crt;

var

Cl, C2: char; { - переменные для считанных символов }

begin ClrScr; { - очистка экрана }

repeat { - начало цикла }

Cl:= ReadKey; { - считывание первой половины кода }

if C1 = #0 { - анализ значения первой половины кода }

then C2:= ReadKey; { - считывание второй половины кода }

if Cl = #0 then writeln ('Cl = #0 ', ord(Cl): 5, ord(C2):5)

else Writeln ('Cl <> #0', ord(Cl): 5);

until (Cl = #0) and (C2 = #3); { - это код Ctrl+2 }

end.

Функция KeyPressed без параметров. Она возвращает значение типа Boolean: значение TRUE, если была нажата какая-либо клавиша, и значение FALSE, если ни одна клавиша не была нажата. Функция не приостанавливает выполнение программы. Пример. Программа, которая выводит символы 'Хх' до тех пор, пока не будет нажата какая-либо клавиша. Цикл repeat в программе бесконечный, и программа завершится только после нажа­тия какой-либо клавиши.

Uses Crt;

begin ClrScr; { - очистка экрана }

repeat { - начало бесконечного цикла }

Write ('Хх'); Delay (100); { - вывод 'Хх1 и задержка на 100 мс)

until KeyPressed; { - бесконечный цикл }

end.

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

VAR С: CHAR;... WHILE KeyPressed DO С:= ReadKey;...

Как только будет нажата клавиша, символ из буфера считывается с помощью функции ReadKey в переменную С, очищая буфер.

 




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 405; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.04 сек.