Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TURBO_PASCAL.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
8 Мб
Скачать
☆

15.4. Процедуры и функции модуля crt

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

Таблица 15.5

Процедуры и функции

Назначение

Работа с экраном в целом

Window(X1, Y1, X2, Y2 : Byte)

Задание текущего окна на экране {325}

Процедуры и функции

Назначение

ClrScr

Очистка текущего окна на экране

TextMode(M: Word)

Установка текстового режима

Позиционирование курсора

GotoXY(X, Y:Byte)

Установка курсора в столбец X, строку Y

WhereX : Byte

Выдача номера текущего столбца

WhereY : Byte

Выдача номера текущей строки

Работа со строками

ClrEOL

Стирание всех символов в строке, начиная от текущего и до конца строки

InsLine

Вставка пустой строки на место текущей

DelLine

Удаление текущей строки

Настройка цвета

TextColor(C:Byte)

Выбор цвета символов на экране

TextBlackGround(C:Byte)

Выбор цвета фона под символами

HighVideo

Включение яркости цвета символов

LowVideo

Выключение яркости цвета символов

NormVideo

Восстановление цветового режима

Подача звуковых сигналов

Sound(Hz:Word)

Включение звука с частотой тона Hz в герцах

NoSound

Выключение звука

Использование встроенного таймера

Delay (ms:Word)

Задержка процесса (пауза) в ms миллисекунд

Опрос клавиатуры

KeyPressed: Boolean

Логическая функция для анализа нажатия клавиши

ReadKey : Char

Функция, возвращающая символ нажатой клавиши

Переназначение стандартных файлов

AssignCRT(VAR f : Text)

Связь текстового файла f с устройством CRT

{326}

Далее будут рассмотрены более подробно все функции и процедуры из табл. 15.5.

15.4.1. Работа с экраном в целом

15.4.1.1. Процедура Window( X1, Y1, X2, Y2 : Byte). Эта процедуpa устанавливает текущее текстовое окно на экране согласно схеме на рис. 15.6.

(X1, Y1)

Текстовое окно

(X2, Y2)

←─−──

Все поле

экрана

(1, 1)

(Xmax, Ymax)

Рис. 15.6

Координаты диагонали окна X1, Yl, X2 и Y2 всегда отсчитываются от левого верхнего угла экрана в абсолютных координатах и должны удовлетворять следующим условиям:

1 <= Х1 < Х2 <= Xmax;

1 <= Y1 < Y2 <= Ymax.

При нарушении этих условий окно не создается.

Параметр Xmax может принимать два значения — 40 и 80 (при видеоадаптере MDA/Hercules — только 80), a Ymax — два или одно в зависимости от типа видеоадаптера: 25 (все типы) и 43 или 50 (адаптеры EGA или VGA соответственно).

После выполнения процедуры Window все операции, все действия с экраном относятся к той его части, которая определена координатами X1, Y1, X2, Y2. Отсчет строк и столбцов для позиционирования курсора теперь производится в координатах текущего окна, и позиция (1, 1) — это левый верхний угол окна. Часть экрана вне окна практически изымается из обращения и становится недоступной стандартным средствам языка.

Сразу после выполнения процедуры курсор устанавливается в позицию (1, 1) только что созданного окна. Очистка окна не производится.

При использовании процедуры Window следует помнить, что координаты очередного создаваемого окна всегда даются в «абсолют-{327}ных» экранных координатах, а не в относительных координатах последнего текстового окна.

После окончания работы программы, использующей окна, текущее окно автоматически становится равным полному экрану, так что заботиться об этом нет необходимости. Пример использования окон приведен на рис. 15.7.

PROGRAM Windows; { демонстрация текст-окон }

USES CRT; { используется модуль CRT }

VAR

i : Byte; { параметр циклов for }

BEGIN

TextAttr := White+16*Black; { цвет - белый на черном }

ClrScr;

for i:=1 to 112 do

Write(‘* Полный Экран '); { вывод на основной экран }

repeat

TextAttr := White+16*Red; { цвет - белый на красном }

Window ( 5, 5, 20, 15 ); { задание одного окна }

for i:=1 to 120 do

Write ( '* Окно 1 ' ); { вывод текста в это окно }

ClrScr; { очистка первого окна }

TextAttr:= White+16*Blue; { цвет - белый на синем }

Window ( 40,10, 55,20 ); { задание другого окна }

for i:=1 to 120 do

Write ( '* Окно 2 ' ); { вывод текста в это окно }

ClrScr; { очистка второго окна }

until KeyPressed; { цикл до нажатия клавиши }

END.

Рис. 15.7

Для программного опроса текущих координат окна на экране введены две специальные системные переменные модуля CRT — WindMax и WindMin.

15.4.1.2. Переменные WindMax и WindMin. Эти переменные имеют тип Word и хранят в себе закодированную информацию о размерах текущего окна на дисплее (см. процедуру Window). Поскольку максимальные значения координат текстовых окон в столбцах и строках не превышают 255, т.е. могут храниться в одном байте, каждая из переменных хранит одновременно координаты X и Y в младшем и старшем байтах соответственно. Извлечь значения X и {328} Y можно с помощью встроенных функций языка Турбо Паскаль Lo и Hi. Схема кодировки такова:

Х1 := Lo( WindMin ) + 1 ; Х2 := Lo( WindMax ) + 1;

Y1 := Hi( WindMin ) + 1 ; Y2 := Hi( WindMax ) + 1;

где X1, Yl, X2, Y2 — координаты диагонали окна (см. рис. 15.6).

Ко всем значениям добавлена единица. Это сделано для совмещения с экранными координатами, у которых начало расположено в верхнем левом углу дисплея и имеет координаты (1,1). В переменных же WindMax; и WindMin все значения отсчитываются от нуля (начало координат — точка (0,0)).

Переменные WindMin и WindMax являются единственным путем программного определения размеров текущего текстового окна. Надо только помнить схему кодировки значения и не забывать добавлять единицу.

15.4.1.3. Процедура ClrScr. Эта процедура очищает текущее текстовое окно, установленное процедурой Window или взятое по умолчанию (т.е. весь экран). При этом окно как бы «закрашивается» текущим цветом фона. Так, например, чтобы сделать поле экрана голубым, необходимо вставить в программу две строки:

TextBackGround(Blue);

ClrScr;

Процедура имеет дополнительный эффект — всегда устанавливает курсор в позицию с координатами (1,1) в текущем текстовом окне.

15.4.1.4. Процедура TextMode( М : Word ). Она переключает текстовые режимы вывода информации на дисплей. Специально для этой процедуры в модуле CRT определены восемь констант (табл. 15.6).

Таблица 15.6

Имя = числовое значение

Разрешение экрана

Цветовой режим

BW40 = 0

40x25

Черно-белый при цветном адаптере

CO40 = 1

или C40 = 1

40x25

Цветной

BW0 = 2

80x25

Черно-белый при цветном адаптере

CO80 = 3

или C80 = 3

80X25

Цветной

Mono =7

80x25

Монохромный на дисплеях MDA/Hercules {329}

Font8x8 = 256

80/40 x 43

80/40 x 50

Цветной, адаптер EGA

Цветной, адаптер VGA

Все остальные числовые значения до 65535, не являющиеся суммой одной из указанных констант (0, 1, 2, 3, 7), и Font8x8, включают в процедуре TextMode режим С80.

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

В качестве параметра процедуры TextMode, кроме констант и просто чисел, может быть использована и системная переменная LastMode.

Необходимо сделать несколько замечаний по явно выделяющейся в перечне константе Font8x8. В переводе она означает «шрифт 8x8» и включает режимы большей текстовой вместимости дисплеев с видеоадаптерами EGA и VGA, в которых вместо стандартных шрифтов из матриц 8x14 и 8x16 подключаются более «низкие» шрифты с матрицей 8x8, что дает увеличение числа строк до 43 (EGA) или 50 (VGA). Эта константа является дополнительной, т.е. она должна прибавляться к выбранному коду режима, например:

TextMode (CO80 + Font8x8 )

В этом случае включится цветовой режим CO80 одновременно со сменой разрешающей способности экрана с 80x25 на 80x43(50). Просто вызов TextMode(Font8x8) равносилен вызову TextMode (BW40+Font8x8).

В большинстве случаев режимы BWxx и СОхх не отличаются друг от друга, что всегда имеет место при использовании дисплеев с раздельным управлением цветовыми лучами (так называемые RGB-дисплеи).

Режим Mono, включенный при цветном видеоадаптере, может сбить палитру цветов для их «проявления» на монохромных дисплеях.

Кроме смены режима текстового изображения, команда TextMode обновляет значения системных переменных и производит переустановку цветовых атрибутов. Можно считать, что происходит выполнение следующих действий: {330}

Window( 1, 1, Xmax,Ymax ); {окно делается равным всему экрану}

DirectVideo <-- True; {включается режим прямого вывода }

CheckSnow <-- False; {отключается снятие "снега" (CGA) }

NormVideo; {устанавливается стартовый атрибут}

ClrScr; {экран очищается }

LastMode <-- Параметр; {параметр в TextMode запоминается }

Легко заметить, что «букет» эффектов от команды TextMode не располагает к слишком частому ее использованию в программе. Нормальное место процедуры TextMode — в начале программы и (или) в самом ее конце для включения и выключения режимов работы программы. С процедурой TextMode тесно связана уже упоминавшаяся системная переменная модуля CRT LastMode.

15.4.1.5. Переменная LastMode. В этой переменной сохраняется текстовый режим работы, который установлен последним выполнением процедуры TextMode.

Ее значения (типа Word) соответствуют разрешенным значениям параметров TextMode. Самое первое значение LastMode соответствует режиму, из которого запускалась программа.

С помощью переменной LastMode можно реализовать «хороший тон» работы программы, когда после ее выполнения восстанавливается исходный текстовый режим (рис. 15.8).

USES CRT; { программа использует модуль CRT }

VAR

StartMode : Word; { здесь сохранится значение режима }

BEGIN

StartMode := LastMode; { сохранение стартового режима }

... { работа в разных режимах }

TextMode ( StartMode ) { восстановление режима }

END.

Рис. 15.8

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]