Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЛАВА 2 ч 1 ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
433.35 Кб
Скачать

2.7. Управление символьным выводом на экран (модуль crt)

План

Модуль CRT, его возможности,

Режимы экрана, координаты позиции на экране

Установка курсора в заданную позицию

Очистка экрана

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

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

Функция KeyPressed

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

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

Uses CRT

Рассмотрим понятия, необходимые при работе с модулем CRT: режимы экрана, координаты позиции на экране, текстовое окно, цвет фона и цвет символа.

Режимы экрана. Во-первых, вывод на экран может происхо­дить в текстовом или графическом виде (на графических дисплеях). Мы здесь будем говорить только о текстовом выводе. Дисплеи могут быть монохроматическими (черно-белыми) и цветными. Монохроматические дисплеи могут работать только в черно- белом режиме, а цветные — как в черно-белом, так и в цветом. Кроме того, текстовые режимы различаются по числу символьных строк и столбцов, умещающихся на экране. В модуле CRT каждый режим имеет определенный номер, за которым закреплено символическое имя (описанная константа). Для установки режима экрана используется процедура

TextMode(<номер режима>).

При обращении к процедуре <номер режима> может задаваться как числом, так и именем соответствующей константы. Например, эквивалентны следующие два оператора:

TextMode(l) ;

Text Mode(CO40) ;

Как правило, исходный режим экрана, устанавливаемый по умолчанию, — СО80 (на цветных дисплеях).

Координаты позиции. Каждая символьная позиция на текстовом экране определена двумя координатами (X, Y). Координата X— позиция в строке. Крайняя левая позиция в строке имеет коордиту Х= 1. Координата Yномер строки, в которой находится символ. Строки нумеруются сверху вниз.

Например, в режиме 80 х 25 символ в верхнем левом углу экра­на имеет координаты (1; 1), символ в нижнем правом углу экра­на— (80; 25); символ в середине экрана— (40; 13).

Для установления курсора на экране в позицию с координата­ми (X, Y) в модуле CRT существует процедура

GoToXY(X,Y)

Здесь координаты курсора задаются выражениями типа Byte. Приведем для примера программу, которая очищает экран и выставляет в центре экрана символ «*»:

Uses CRT;

Begin

ClrScr;

GoToXY(40,13);

Write (' *')

End.

Используемая здесь процедура ClrScr выполняет очистку экрана.

Текстовое окно. Прямоугольное пространство на экране, в которое производится вывод символов, называется текстовым ок­ном. Положение этого окна определяется координатами верхнего левого и нижнего правого углов прямоугольника. Если окно занимает весь экран, то в режиме 80 х 25 его координаты (1; 1) и (80; 25). Это исходное окно, изменить положение и размер которого можно с помощью процедуры

Window (X1, Y1, X2, Y2)

Здесь аргументы — величины типа Byte; (X1, Y1) — координа­ты верхнего левого угла окна; (Х2, Y2) — координаты правого нижнего угла окна.

После определения окна попытки вывода символов за его преде­лы окажутся безрезультатными. Повторное обращение к процедуре Window с новыми параметрами отменяет предыдущее назначение.

Управление цветом. На цветных дисплеях типа EGA, VGA и SVGA в текстовом режиме экрана можно использовать 16 цветов.

В модуле CRT объявлены константы, имена которых есть анг­лийские названия цветов, а соответствующие им значения — по­рядковые номера этих цветов.

TextBackGround(Color) Процедура назначения цвета фона

Здесь аргумент — величина типа Byte, задающая номер цвета.

TextColor(Color) Процедура назначения цвета символа

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

Для примера приведем программу, которая по очереди откро­ет четыре окна, и каждое из этих окон «зальется» разным фоно­вым цветом:

Uses CRT;

Begin

Window(1, 1, 40, 12);

TextBackGround(White) ; ClrScr;

Window(41, 1, 80, 12);

TextBackGround(Red); ClrScr;

Window(1, 13, 40, 25);

TextBackGround(LightRed); ClrScr;

Window(41, 13, 80, 25);

TextBackGround(Green) ; ClrScr;

End.

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

Uses CRT;

Var I : Byte;

Begin

TextBackGround(White);

ClrScr;

GoToXY(l, 12);

For I := 0 To 14 Do

Begin

TextColor(I);

Write (I : 5)

End

End.

Кратко опишем еще несколько процедур управления тексто­вым экраном из модуля CRT, не имеющих параметров:

• процедура ClrEOL — стирает часть строки от текущей пози­ции курсора до конца этой строки в окне. При этом положение курсора не изменяется;

  • процедура DelLine — уничтожает всю строку с курсором. При этом нижние строки сдвигаются на одну вверх;

  • процедура InsLine — вставляет пустую строку перед строкой, в которой стоит курсор;

  • процедуры LowVideo, NormVideo, HighVideo — устанавлива­ют соответственно режимы пониженной, нормальной и повышен­ной яркости символов.

Весьма полезной является функция KeyPressed из модуля CRT, при исполнении которой происходит опрос клавиатуры и опре­деляется, не нажата ли какая-нибудь клавиша. В результате эта функция выдает логическое значение True, если нажата любая клавиша, и значение False — в противном случае. Часто данную функцию используют для организации задержки окна результа­тов на экране (после выполнения программы ТурбоПаскаль вы­зывает на экран окно редактора), для чего перед концом про­граммы записывают следующий оператор:

Repeat Until KeyPressed;

Это пустой цикл, который «крутится на месте» до нажатия какой-либо клавиши. В это время на экране выведено окно ре­зультатов. После нажатия клавиши значение KeyPressed станет равно True, цикл завершится, исполнение выйдет на конец про­граммы и на экран вернется окно редактора. Этот прием можно использовать для задержки выполнения программы в любом ее месте.

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

Repeat Until KeyPressed;

Window(1, 1, 80, 25);

TextBackGround(Black);

ClrScr;

Описание других процедур и функций модуля CRT приведено в специальной литературе по ТурбоПаскалю.