Координаты диагонали окна 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 следует помнить, что координаты очередного создаваемого окна всегда даются в «абсолют-
- 328 -
ных» экранных координатах, а не в относительных координатах последнего текстового окна.
После окончания работы программы, использующей окна, текущее окно автоматически становится равным полному экрану, так что заботиться об этом нет необходимости. Пример использования окон приведен на рис. 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 и
- 329 -
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 |
- 330 -