Здесь аргументы — величины типа 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 приведено в специальной литературе по ТурбоПаскалю.
Упражнения
1. Определить, что будет напечатано следующей программой, если в качестве исходных данных заданы числа 1.0 и -2.0:
Program Roots;
Var B, C, D: Real;
Begin
Read(B, C);
D:= Sqrt(Sqr(B) - 4 * C);
WriteLn('xl =', (-B + D)/2,
'x2 =', (-B - D)/2)
End.
2. Определить, что будет напечатано следующей программой при последовательном введении значений 3.4 и 7.9:
Program Less;
Var X: Real; T: Boolean;
Begin
Read(X);
T:= X < Round(X);
Read(X);
T:= T And (X < Trunc(X));
WriteLn(T)
End.
3. Определить, что будет напечатано следующей программой при последовательном введении значений 36, -6 и 2345:
Program ABC;
Var А, В: Integer;
Begin
Read (А, В, А);
WriteLn(А, В: 2, А: 5)
End.
4. Составить программу вычисления суммы двух целых чисел, которая будет вести диалог с пользователем в следующем виде (вместо отточий — вводимые и выводимые числа):