- •2.1. Первое знакомство с языком Паскаль
- •Упражнения
- •2.2. Некоторые сведения о системе ТурбоПаскаль (тп)
- •2.3. Элементы языка ТурбоПаскаль
- •2.4. Концепция типов данных
- •Типы данных ТурбоПаскаля
- •Зарезервированные константы Турбо Паскаля
- •2.5. Арифметические операции, функции, выражения. Оператор присваивания
- •Бинарные операции Паскаля
- •Стандартные математические функции ТурбоПаскаля
- •Упражнения
- •2.6. Ввод данных с клавиатуры и вывод на экран
- •Форматы процедуры Write
- •2.7. Управление символьным выводом на экран (модуль crt)
- •Упражнения
- •2.8. Логические величины, операции, выражения
- •Результаты выполнения логических операций
- •2.9. Функции, связывающие различные типы данных
- •Стандартные функции, связывающие различные типы данных
- •Упражнения
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 приведено в специальной литературе по ТурбоПаскалю.
