В предыдущей лекции мы уже упоминали, что модуль Crt, входящий в состав стандартных библиотек языка Pascal, содержит средства для работы с экраном в текстовом режиме.

Для того чтобы сделать работоспособными все описанные ниже процедуры и функции, ваша программа должна подключить стандартный модуль Crt:

uses crt;

Активная область ввода / вывода

Процедура Window(x1,y1,x2,y2: byte) создаст на экране окно с координатами левого верхнего угла в точке (x1,y1) и координатами правого нижнего угла в точке (x2,y2). Теперь активная область экрана будет ограничена этим окном. Текущие координаты курсора будут отсчитываться не от левого верхнего угла экрана, а от левого верхнего угла этого окна.

Очистка

Процедура ClrScr очистит весь экран (или активное окно); курсор будет помещен в верхний левый его угол.

Процедура ClrEol очистит текущую строку, начиная с текущей позиции курсора и до правого края экрана (окна).

Процедура DelLine удалит строку, в которой находится курсор.

Процедура InsLine очистит текущую строку целиком. Курсор останется на прежней позиции.

Цвета

Процедура TextBackground(color: byte) установит цвет фона.

Процедура TextColor(color: byte) установит цвет выводимого текста.

Замечание: Вместо номера цвета возможно использовать соответствующую константу (см. табл. 14.1).

Таблица 14.1. Стандартные цвета языка Pascal
Стандартная константа Номер Цвет Стандартная константа Номер Цвет
black 0 Черный darkgray 8 Темно-серый
blue 1 Синий lightblue 9 Ярко-синий
green 2 Зеленый lightgreen 10 Ярко-зеленый
cyan 3 Голубой lightcyan 11 Ярко-голубой
red 4 Красный lightred 12 Розовый
magenta 5 Фиолетовый lightmagenta 13 Ярко-фиолетовый
brown 6 Коричневый yellow 14 Желтый
lightgray 7 Светло-серый white 15 Белый

Помимо этого, можно использовать константу blink = 128 (мерцание).

Звук

Процедура Sound(hz: word) включит звуковой сигнал с частотой hz герц.

Процедура NoSound выключит звуковой сигнал.

Позиционирование

Процедура GotoXY(x,y: byte) переместит курсор в заданную позицию в пределах текущего окна (экрана).

Функция WhereX: byte вычислит положение курсора в текущем окне (или на экране): его горизонтальную составляющую. Напомним, что координата X отсчитывается от левого края экрана (окна).

Функция WhereY: byte вычислит положение курсора в текущем окне (или на экране): его вертикальную составляющую. Напомним, что координата Y отсчитывается от верхнего края экрана (окна).

Ожидание

Процедура Delay(ms: word) приостановит исполнение программы на ms миллисекунд.

Функция KeyPressed: boolean отслеживает нажатия клавиш (на клавиатуре).

Функция ReadKey: char возвращает код символа, чья клавиша (или комбинация клавиш) была нажата.

Пример использования текстовой графики

Задача 1. Написать простейший скрин-сейвер (screen-saver) - программу, предохраняющую монитор от пережигания. Его основными чертами должны стать:

  1. преобладание черного фона;
  2. регулярная смена позиций цветовых пятен;
  3. прекращение работы при нажатии произвольной клавиши на клавиатуре.
Решение
program scrsav;
uses crt;
var n,i,x,y,c,t,z: word;
 err: integer;

begin
 n:=10;
 if paramcount>0
 then if paramstr(1)='?'
 then begin 
 writeln('scrsav [density: byte] (=10 by default)');
 halt 
 end
 else begin
 val(paramstr(1),n,err);
 if (err<>0)or(n<=0) then n:=10;
 end;
 randomize; {активизация генератора случайных чисел}
 while not keypressed do
 begin 
 y:= random(24)+1; {генерация случайного числа от 1 до 25}
 x:= random(79)+1; {генерация случайного числа от 1 до 80}
 z:= random(220)+33; {генерация случайного символа}

 c:= random(14)+1; {генерация случайного цвета от 1 до 15}
 gotoxy(x,y);
 textcolor(c);
 delay(n);
 write(chr(z));
 for i:= 1 to 10 do
 begin
 y:= random(24)+1; {генерация случайного числа от 1 до 25}
 x:= random(79)+1; {генерация случайного числа от 1 до 80}
 gotoxy(x,y);
 textcolor(black);
 delay(n);
 write(' ');
 end;
 end.

Замечание: Параметр, регулирующий густоту и скорость изменения символов на экране, можно задавать как аргумент из командной строки во время вызова программы (см. лекцию 13).