Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль.doc
Скачиваний:
58
Добавлен:
07.06.2015
Размер:
1.21 Mб
Скачать

23.1. Модуль Crt

Этот модуль облегчает работу с клавиатурой и экраном, позволяет создавать окна, задавать цвет текста и фона для цветного дисплея. Содержит около 20 процедур и функций. В зависимости от типа дисплея и драйвера (программы, обеспечивающей связь компьютера с дисплеем) поддерживает до 16 цветовых текстовых режимов.

Замечание. При исполнении на компьютерах с процессорами последних разработок модуль Crt работает некорректно, выдавая ошибку: 200 Division by zero. В Интернете можно найти комплект программ, исправляющих этот недостаток. Такой комплект CrtDevice можно переписать в лаборатории кафедры вычислительной техники.

Рассмотрим наиболее часто употребляемые процедуры и функции модуля.

23.1.1. Работа с клавиатурой и звуком

1) ReadKey - функция, возвращающая символ нажатой клавиши без вывода его на экран. Тип результата – Char. Аргумента у функции нет. Специальные клавиши на клавиатуре (функциональные F1 – F12, управления курсором, Alt, Ctrl и т.д.) генерируют расширенные коды. При нажатии такой клавиши функция ReadKey возвращает сначала нулевой, а затем - расширенный код клавиши.

Пример. S := ReadKey;

Приводимый ниже фрагмент программы показывает, как можно применить функцию для организации итерационных циклов.

Repeat

. . .

Writeln(’Продолжаем?- Да/Нет (Д/Н)’);

S := ReadKey;

Until (S=’H’) OR (S=’н’) ;

2) KeyPressed -функция без аргумента, возвращает значение True (истина), если клавиша нажата, и False (ложь) в противном случае. Символ, соответствующий нажатой клавише, остается в буфере клавиатуры. Функция не распознает клавиш перевода регистра (Shift, Alt, NumLock и т.д.). Может использоваться для организации итерационных циклов следующего вида

Repeat

- - - - -

Until KeyPressed;

Цикл заканчивается, если нажата любая клавиша. Например, текст программы может завершаться следующим фрагментом:

WriteLn(’Работа окончена. Нажмите любую клавишу ...’);

Repeat Until KeyPressed;

End.

3) Delay(задержка : word); – процедура, которая выполняет задержку на число миллисекунд, задаваемых параметром задержка.

4) Sound(частота : word); – процедура, которая включает внутренний излучатель звука, который будет издавать звуковой сигнал с частотой, заданной параметром частота.

5) NoSound выключает внутренний излучатель звука.

Внимание! Звуковой сигнал, включенный процедурой Sound, будет звучать до тех пор, пока его не выключить обращением к процедуре NoSound.

Если в программе часто используются звуковые эффекты, то целесообразно написать процедуру, которая обеспечит излучение звука заданной частоты в течение заданного промежутка времени. Эта процедура может быть такой.

Procedure Zvuk(freq, long : word);

Begin

Sound(freq);

Delay(long);

NoSound;

End; { Zvuk }

23.1.2. Управление цветом

Если используется цветной графический дисплей с адаптером EGA (Enhansed Graphic Adapter), VGA (Video Graphic Array) и др., то можно задавать и изменять цвет текста и фона с помощью следующих процедур:

1) TextBackGround (Color:Byte); задает цвет фона.

2) TextColor(Color:Byte); – задает цвет текста.

Параметр Color (цвет) может задаваться выражением целого типа, которое должно принимать значения в диапазоне 0..15, или одной из определенных в модуле Crt констант цветов (название цвета на английском языке). Константы для фонового и основного цвета и их значения приведены ниже:

Black = 0 (черный)

DarkGray = 8 (темно-серый)

Blue = 1 (синий)

LightBlue = 9 (светло-синий)

Green = 2 (зеленый)

LightGreen = 10 (светло-зеленый)

Cyan = 3 (бирюзовый)

LightCyan = 11 (светло-голубой)

Red = 4 (красный)

LightRed = 12 (розовый)

Magenta = 5 (малиновый)

LightMagenta = 13 (светло-малиновый)

Brown = 6 (коричневый)

Yellow = 14 (желтый)

LightGray = 7 (светло-серый)

White = 15 (белый)

Цвет текста может быть любой, а цвет фона – один из восьми первых.

Вместо того чтобы устанавливать раздельно цвет текста и цвет фона указанными выше процедурами, можно воспользоваться определенной в модуле Crt переменной TextAttr, длиной в байт. Ей можно присвоить значение, которое сразу определит текстовые атрибуты. Младшие 4 бита у этой переменной кодируют цвет текста (0..15), следующие 3 бита – цвет фона (0..7), а самый старший (левый) бит позволяет сделать текст мерцающим. Константа мерцания имеет имя Blink, а значение – 128.Для размещения цвета фона в правильных позициях битов, его значение нужно умножить на 16. Например, следующее присваивание:

TextAttr := Yellow + Blue*16 + Blink

Обеспечит вывод желтых мерцающих символов на голубом фоне.

3) TextMode (Mode:Integer); – процедура; задает указанный текстовый режим (mode). Приведем некоторые определенные в модуле Crt константы (слева) для выбора текстовых режимов и их значения (справа):

BW80 = 2;– черно-белый режим с разрешением экрана 80х25 символов;

C80 = 3; – цветной режим с разрешением экрана 80х25 символов;

Font8*8 = 256; – цветной режим с разрешением экрана 80х50 символов;

Более подробное описание этих и других режимов для соответствующих адаптеров можно найти в справочниках.

Предыдущий цветовой режим сохраняется в памяти в переменной LastМode.