p align="left">
11.2. Текстовый вывод на экран Библиотека Turbo Vision способна удовлетворить самым высоким требованиям, и мы настоятельно рекомендуем обращаться к ней при программировании сложных текстовых изображений (меню, окон и т.п.). Тем не менее, вполне возможно, что некоторые из читателей захотят использовать значительно более простые, но достаточно эффективные средства модуля CRT, описываемые в этом разделе. Процедура TextMode используется для задания одного из возможных текстовых режимов работы адаптера монитора. Заголовок процедуры: Procedure TextMode (mode: word); Здесь mode - код текстового режима. в качестве значения этого выражения могут использоваться следующие константы, определенные в модуле CRT: const bw40=0; {черно-белый режим 40*25} co40=l; {цветной режим 40*25} bw80=2, {черно-белый режим 80*25} co80=3; {цветной режим 80*25} mono=7; {используется с mda} Font8*8=256; {используется для загружаемого шрифта в режиме 80*43 или 80*50 с адаптерами EGA или VGA} Код режима, установленного с помощью вызова процедуры TextMode, запоминается в глобальной переменной LastMode модуля CRT и может использоваться для восстановления начального состояния экрана. следующая программа иллюстрирует использование этой процедуры в различных режимах. заметим, что при вызове TextMode сбрасываются все ранее сделанные установки цвета и окон, экран очищается и курсор переводится в его левый верхний угол. user CRT; procedure print (s: string), {вывести сообщение s и ждать инициативы пользователя} Begin writeln (s), {вывести сообщение} writeln ('нажать клавишу enter...'); readln {ждем нажатия клавиши enter} end; {print} Var lm: word, {начальный режим экрана} Begin lm:=LastMode; {запомнить начальный режим работы дисплея} TextMode (со40); print ('режим 40*25'); TextMode (co8o); print ('режим 80*25'); TextMode (co40+font8*8); print ('режим co40+font8*8'); TextMode (co80+font8*8); print ('режим co80+font8*8'), {восстановить исходный режим работы:} TextMode (lm) end. Процедура TextColor определяет цвет выводимых символов. заголовок процедуры: Procedure TextColor (color: byte); Процедура TextBackGround определяет цвет фона. заголовок процедуры: Procedure TextBackGround (color: byte); Единственным параметром обращения к этим процедурам должно быть выражение типа byte, задающее код нужного цвета. Этот код удобно определять с помощью следующих мнемонических констант, объявленных в модуле CRT: const black=0; {черный} blue=l; {темно-синий} green=2; {темно-зеленый} суаn=3; { бирюзовый} red=4; {красный} magenta=8; {фиолетовый} brown=6; {коричневый} lightgray=7; {светло-серый} darkgray=8; {темно-серый} light blue=9; {синий} lightgreen=10; {светло-зеленый} lightcyan=11; {светло-бирюзовый} lightred=12; {розовый} lightmagenta=13; {малиновый} yellow=14; {желтый} white=15; {белый} blink=128; {мерцание символа} Следующая программа иллюстрирует цветовые возможности Турбо-Паскаля. uses CRT, const col: array [1..15] of string [16] = ('темно-синий', 'темно-зеленый', 'бирюзовый', 'красный', 'фиолетовый', 'коричневый', 'светло-серый', 'темно-серый', 'синий', 'зеленый', 'светло-бирюзовый', 'розовый', 'малиновый', 'желтый', 'белый'); Var k: byte, Begin for k:=l to 15 do Begin {выводим 15 сообщений различными цветами} textcolor (k), writeln ("цвет", k, "-", col [k] ) end; textcolor (white+blink); {белые мигающие символы} writeln ("мерцание символов"); {восстанавливаем стандартный цвет} textcolor (lightgray), writeln end. Обратите внимание на последний оператор writeln. Если его убрать, режим мерцания символов сохранится после завершения программы, несмотря на то, что перед ним стоит оператор TextColor (lightgray); Дело в том, что все цветовые определения предварительно заносятся в специальную переменную TextAttr модуля CRT и используются для настройки адаптера только при обращении к процедурам write/writeln. Процедура ClrScr очищает экран или окно (см. ниже процедуру window). после обращения к ней экран (окно) заполняется цветом фона и курсор устанавливается в его левый верхний угол. например: uses CRT; Var с: char Begin textbackground (red); clrscr; {заполняем экран красным цветом} writeln ("нажмите любую клавишу..."); с:= ReadKey, {ждем нажатия любой клавиши} textbackground (black); clrscr {восстанавливаем черный фон экрана} end. Процедура Window определяет текстовое окно - область экрана, которая в дальнейшем будет рассматриваться процедурами вывода, как весь экран. Сразу после вызова процедуры курсор помещается в левый верхний угол окна, а само окно очищается (заполняется цветом фона). По мере вывода курсор, как обычно, смещается вправо и при достижении правой границы окна переходит на новую строку, а если он к этому моменту находился на последней строке, содержимое окна сдвигается вверх на одну строку, т.е. осуществляется «прокрутка» окна. Заголовок процедуры: Procedure Window (xi, yi, х2, y2: byte); Здесь x1...y2 - координаты левого верхнего (х1, y1) и правого нижнего (х2, y2) углов окна. Они задаются в координатах экрана, причем левый верхний угол экрана имеет координаты (1,1), горизонтальная координата увеличивается слева направо, а вертикальная - сверху вниз. В следующем примере иллюстрируется вывод достаточно длинного сообщения в двух разных окнах: uses CRT; Var k: integer; Begin {создать левое окно - желтые символы на синем фоне:} textbackground (blue); window (5, 2, 35, 17); textcolor (yellow); for k:= i to 100 do write ("нажать клавишу enter... "); readln, {ждем нажатия enter} clrscr; {очищаем окно} {создать правое окно - белые символы на красном фоне:} textbackground (red); textcolor (white); window (40, 2, 70, 17); for k:= i to 100 do write ("нажать клавишу enter... "); readln; TextMode (Co8o) {сбросить все установки} end. Обращение к процедуре Window игнорируется, если какая-либо из координат выходит за границы экрана или если нарушается одно из условий: Х2>Х1 или Y2>Y1. Каждое новое обращение к Window отменяет предыдущее определение окна. Границы текущего окна запоминаются в двух глобальных переменных модулях CRT: переменная WindMin типа Word хранит X1 и Y1 (Х1 - в младшем байте), а переменная того же типа WindMax - Х2 и Y2 (Х2 - в младшем байте). При желании вы можете изменять их нужным образом без обращения к Window. например, вместо оператора Window (40, 2, 70,17); можно было бы использовать два оператора: WindMin:=39+(lshl8); WindMax:= 69+(16 shl 8); (в отличие от обращения к Window, координаты, хранящиеся в переменных WindMin и WindMax, соответствуют началу отсчета 0, 0). Процедура GotoXY переводит курсор в нужное место экрана или текущего окна. Заголовок процедуры: Procedure GotoXY (Х, Y: Byte); Здесь X, Y - новые координаты курсора. Координаты задаются относительно границ экрана (окна), т.е. оператор GotoXY (1,1); Оператор указывает, перевести курсор в левый верхний угол экрана (или окна, если к этому моменту на экране определено окно). Обращение к процедуре игнорируется, если новые координаты выходят за границы экрана (окна). Функции WhereX и WhereY. С помощью этих функций типа Byte можно определить текущие координаты курсора: WhereX возвращает его горизонтальную, а WhereY - вертикальную координаты. В следующей программе в центре экрана создается окно светло-бирюзового цвета, которое обводится рамкой. Program Prim52; Uses CRT; {подключить библиотеку (модуль) CRT}
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
|