Назначение модуля CRT
Модуль CRT содержит подпрограммы, предназначенные для работы с экраном в текстовом режиме.
При работе с экраном через модуль CRT, он разбивается на отдельные элементы (позиции), показанные на рис. 10.1, в каждую точку которых можно поместить один символ (в том числе и пробел). Для каждого элемента можно задать цвет фона и цвет символа.
![]() |
Рисунок 10.1 – Координаты позиций экрана в текстовом режиме
Цвета экрана кодируются либо значениями констант, либо их кодами, представленными в таблице 10.1.
Таблица 10.1 – Кодировка возможных цветов экрана
Константа | Код цвета | Значение |
Black | 0 | черный |
Blue | 1 | синий |
Green | 2 | зеленый |
Cyan | 3 | бирюзовый |
Red | 4 | красный |
Magenta | 5 | малиновый |
Brown | 6 | коричневый |
LightGray | 7 | светло-серый |
DarkGray | 8 | темно-серый |
LightBlue | 9 | светло-синий |
LightGreen | 10 | светло-зеленый |
Продолжение таблицы 10.1.
LightCyan | 11 | светло-бирюзовый |
LightRed | 12 | ярко-красный |
LightMagenta | 13 | светло-малиновый |
Yellow | 14 | желтый |
White | 15 | белый |
Blink | 128 | мерцание |
Для символов можно использовать любые цвета из таблицы, а для фона – только цвета с кодами от 0 до 7.
Процедуры и функции модуля CRT
Процедура ClrScr;
Очищает экран и помещает курсор в левый верхний угол экрана. Все позиции символов заполняются пробелами, причем используется текущее определение текстовых атрибутов. Таким образом, если для TextBackGround не задан черный цвет, то для всего экрана устанавливается соответствующий фоновый цвет.
Процедура Delay(Msec:Word);
Выполняет задержку выполнения программы на заданное число миллисекунд.
Процедура DelLine;
Удаляет строку, на которой находится курсор. Все строки, расположенные ниже, сдвигаются на одну строку вверх, внизу экрана появляется новая строка.
Процедура GoToXY(X,Y:Byte);
Устанавливает курсор в точку с заданными координатами. Если задаются недопустимые координаты (Х > 80 или Y > 25), то обращение к процедуре игнорируется.
Функция KeyPressed:Boolean ;
Возвращает значение True, если на клавиатуре нажата клавиша и False в противном случае. Символ (символы) остаются в буфере клавиатуры. Нажатие клавиш Shift, Alt, Ctrl не распознается. Код клавиши можно считать с помощью функции ReadKey.
Процедура NoSound;
Выключает внутренний динамик.
Функция ReadKey:Char;
Считывает символ, нажатый на клавиатуре. Считанный символ на экране не отображается.
Процедура Sound(Herz:Word);
Включает внутренний динамик, параметр Herz задает частоту генерируемого сигнала в герцах.
Процедура TextBackGround(Color:Byte);
Устанавливает фоновый цвет. Параметр Color должен быть целого типа и иметь значение от 0 до 7.
Процедура TextColor(Color :Byte);
Задает цвет выводимого символа. Параметр Color должен быть целого типа и иметь значение от 0 до 15, соответствующее одной из констант цветов (табл.10.1).
Процедура Window(X1,Y1,X2,Y2:Byte);
Задает размеры окна на экране и помещает курсор в левый верхний угол окна с координатами (1, 1).
X1, Y1 – координаты левого верхнего угла окна;
X2, Y2 - координаты правого нижнего угла окна;
Если хотя бы одна из координат недопустима, процедура не выполняется.
Примеры использования модуля CRT
![]() |
Рисунок 10.2 – Процедура приостановки программы
Пример 10.2. Программа Example_19, показанная на рисунке 10.3, иллюстрирует технику управления цветами выводимых символов.
Program Example_19;
Uses CRT;
Begin
Writeln('По умолчанию выводятся белые символы');
Writeln(' на черном фоне ');
{ Задание цветов цвета текстовыми константами}
TextColor(Yellow);
TextBackGround(Blue);
Writeln('Желтые символы на синем фоне');
{ Задание цветов числовыми константами }
TextColor(4);
TextBackGround(7);
Writeln('Красные символы на сером фоне');
{ Задание мерцания символов }
TextColor(15+128);
TextBackGround(4);
Writeln('Белый мерцающий текст на красном фоне');
End.
Рисунок 10.3 – Программа Example_19
Пример 3. Написать программу, имитирующую движение шарика по экрану, который изменяет свое направление, «отражаясь» от краев экрана. Для изображения шарика использовать символ « 0 ». Каждое отражение сопроводить звуковым сигналом. Программа решения задачи показана на рисунке 10.4.
Program Example_20; {Скачущий шарик}
Uses CRT;
Const Ball='O'; { имитация шарика }
Blank=' '; { стирание шарика }
Var x,y : byte; { текущие координаты шарика }
Right, Down : boolean; { признаки направления движения }
Procedure Beep; { звуковой сигнал при достижении края }
Begin
Sound(100); Delay(100); NoSound
End;
Begin
Clrscr; {чистим экран}
Write('Для завершения нажмите любую клавишу');
GotoXY(10,5);
x:=9; Y:=5;
repeat
GotoXY(x,y);
Write(blank); { стираем старое положение шарика }
if Right Then x:=x+1 else x:=x-1; { определяем новое }
if Down Then y:=y+1 else y:=y-1; { положение шарика }
GotoXY(x,y);
Write(Ball); {рисуем шарик}
Delay(100); {задержка для наглядности}
If x=80 then begin Right:=False; Beep End; {достигли правой границы}
If x=1 then begin Right:=True; Beep End; {достигли левой границы}
If y=25 then begin Down:=False; Beep End; {достигли низа экрана}
If y=1 then begin Down:=True; Beep End; {достигли верха экрана}
until KeyPressed;
Clrscr {чистим за собой экран}
End.
Рисунок 10.4 – Программа Example_20
ГРАФИКА
Назначение модуля GRAPH
Модуль GRAPH содержит подпрограммы, предназначенные для работы с экраном в графическом режиме.
|
![]() |
Любой объект, высвеченный на экране, представляет собой совокупность отдельных пикселов. При переходе в графический режим экран очищается; отличием графического режима от текстового является отсутствие курсора.
Кодировка цветов графического экрана совпадает с описанной в разделе 10.1.
При работе с библиотекой графических модулей её необходимо подключить конструкцией Uses GRAPH.
Перед началом работы с графическим режимом его необходимо инициализировать путем обращения к процедуре:
InitGraph(var gd,gm:integer; pt:string);
где gd - тип графического адаптера;
gm – режим работы графического адаптера;
pt - путь к драйверам адаптера.
Для автоматического выбора адаптера переменной gd необходимо присвоить значение gd: = detect, при этом переменная gm не используется, а вместо pt нужно использовать пробел.
Программа, использующая библиотеку GRAPH, должна заканчиваться обращением к процедуре
CloseGraph;
которая завершает работу в графическом режиме, освобождает буфер, сбрасывает все графические режимы.
Работая в графическом режиме, пользователь имеет возможность временного возврата в текстовый режим работы дисплея, для этого необходимо обратиться к процедуре
RestoreCrtMode;
Обратный переход можно выполнить с помощью процедуры
SetGraphMode;
Дата: 2019-03-05, просмотров: 254.