Для создания графических изображений, то есть для работы монитора в графическом режиме, предназначен модуль GRAPH, хранящийся в соответствующем файле.
В настоящее время используются самые разнообразные видеоадаптеры, поддерживающие несколько режимов работы монитора, стандартными из которых считаются:
VGA (Video Graphics Array) с максимальным разрешением 640х480 точек (пикселов);
SVGA (Super VGA) – 800x600;
XGA (eXtended Graphics Array) – 1024x768:
SXGA (Super XGA) – 1280x1024;
UXGA (Ultra XGA) – 1600x1200 и другие.
Более того, в каждом режиме можно отображать разное количество цветов, что существенно зависит от объема видеопамяти. При работе с 16-ю цветами каждая точка занимает полбайта, с 256 – 1 байт, в режиме High Color (более 65 тыс. цветов) – 2 байта, в режиме True Color (более 16 млн. цветов) – 3 байта.
В модуле Graph поддерживается только режим VGA. Здесь можно задавать всего 16 цветов, но три варианта точек по вертикали: 200, 350 и 480, которые задаются режимами: VGALo=0, VGAMed=1, VGAHi=2. Для управления режимом VGA необходимо подключать специальный драйвер, находящийся в файле EGAVGA.BGI (Borland Graphic Interface).
Если программа запускается из DOS, то графический режим надо инициализировать, задав драйвер и его режим в процедуре инициализации:
InitGraph (< драйвер >,< режим >,< путь к драйверу >);
например:
D:=VGA;
R:=VGAHi;
InitGraph (D,R,’’);
Аналогично для восстановления текстового режима используется процедура
CloseGraph;
Удобнее автоматически распознавать используемый адаптер процедурой
DetectGraph (<драйвер>,<режим>);
например
DetectGraph (D,R);
InitGraph (D,R,’’);
В графическом режиме курсор отсутствует. Его функции выполняет невидимый текущий указатель CP (Current Pointer), выполняющий аналогичные функции. Для его перемещения используется процедура
MoveTo (X,Y:Integer);
причем Х для режима Hi может изменяться в диапазоне от 1 до 640, а Y – от 1 до 480.
Для перемещения указателя относительно его последнего положения используется процедура
MoveRel (dX,dY:Integer);
Аналогично текстовому режиму, здесь используется цвет переднего плана и цвет фона, которые устанавливаются процедурами
SetColor (Color:Word);
SetBkColor (Color:Word);
Дополнительно используется процедура заливки для закрашивания фигур и замкнутых областей
SetFillStyle (Pattern:Word; Color:Word);
где Pattern определяет стиль заполнения.
Модуль включает множество простейших процедур рисования: отображение точки, прямой, прямоугольников, окружностей и т.п. Для вывода текста используются специальные процедуры.
Пример построения столбцовой диаграммы двух функций.
Program Diagram;
{ Демонстрационный пример на использование модуля Graph: столбцовая диаграмма функций F1 и F2 }
Uses Crt,Graph;
Const
xmin:real=0.05; { Начальные значения аргумента }
xmax:real=1;
step:real=0.05;
Var x, { текущее значение аргумента }
Fmin,Fmax:real;
stdiag, { ширина большого прямоугольника }
xdiag, { текущая точка диаграммы }
rezim,razm:integer; { режим и разрешение монитора }
stng:string; { временная переменная для преобразования числовых данных при выводе }
Function F1(x:real):real;
Begin
F1:=exp(-x)*sin(x)
end;
Function F2(x:real):real;
Begin
F2:=exp(-sqrt(x))*cos(x);
end;
Begin
{ Поиск экстремумов функции }
x:=xmin;
Fmin:=F1(x);
Fmax:=Fmin;
Repeat
if F1(x)>Fmax then Fmax:=F1(x);
if F2(x)>Fmax then Fmax:=F2(x);
if F1(x)
if F2(x)
x:=x+step;
until x>xmax;
{ Контроль за масштабом шкалы ординат }
Writeln('min=',Fmin:8:5,' max=',Fmax:8:5);
Read(Fmin,Fmax);
{ Установка графического режима и цветов }
DetectGraph(rezim,razm);
InitGraph(rezim,razm,'');
SetBkColor(Black);
SetColor(White);
{ Заголовок диаграммы }
OutTextXY(220,20,'Диаграмма двух функций');
{ Координатные линии }
Line(44,50,44,451);
Line(44,451,595,451);
{ Масштабы по X и Y - числовые значения }
Str(xmin:4:2,stng);
OutTextXY(44,460,stng);
Str(xmax:4:2,stng);
OutTextXY(570,460,stng);
Str(Fmax:4:2,stng);
OutTextXY(1,50,stng);
Str(Fmin:4:2,stng);
OutTextXY(1,445,stng);
{ Определение расстояния между столбцами }
stdiag:=round(500/((xmax-xmin)/step));
x:=xmin;
xdiag:=45;
{ Вывод в цикле по два столбца }
Repeat
{ F1 - широкий и зеленый столбец }
SetFillStyle(SolidFill,Green);
Bar(xdiag,450,xdiag+stdiag-2,round(450-400*(F1(x)-Fmin)/(Fmax-Fmin)));
{ F2 - красный и узкий столбец }
SetFillStyle(SolidFill,Red);
Bar(xdiag+round(stdiag/4),450,
xdiag+round(stdiag/4*3)-2,round(450-400*(F2(x)-Fmin)/(Fmax-Fmin)));
x:=x+step;
xdiag:=xdiag+stdiag;
until x>xmax;
{ Индицируем результат, пока не будет нажата какая либо клавиша }
Repeat
until KeyPressed;
{ Выход из графического режима }
CloseGraph
end.
-
Что такое «модуль»?
-
Что такое «ресурсы модуля»?
-
Чем отличается программа от модуля?
-
Что находится в интерфейсе модуля?
-
Что находится в реализации модуля?
-
Для чего предназначен и когда выполняется раздел инициализации модуля?
-
Какова общая структура модуля?
-
Как выглядят заголовки подпрограмм в интерфейсной части и в разделе реализации?
-
Как выполняется подключение модулей к программе?
-
Как получить доступ к именам модулей при их совпадении?
-
Что такое «косвенное использование модулей»?
-
Может ли модуль обращаться сам к себе (рекурсивное обращение)?
-
Что необходимо предпринять, если имя модуля и имя содержащего его файла не совпадают?
-
В каком файле находятся стандартные используемые модули?
-
Какие 5 модулей находятся в стандартном библиотечном файле?
-
Что находится в модуле System, и как он подключается к программе?
-
Что содержит модуль Crt?
-
Что содержит модуль Dos?
-
Какую информацию содержит байт атрибута символа в текстовом режиме монитора?
-
Сколько цветов можно использовать для символа, и сколько для фона при наличии одного байта атрибута символа?
-
В каких местах экрана расположена начальная и конечная координата символов?
-
Какая процедура используется для очистки экрана?
-
Какая процедура используется для перемещения курсора в заданную точку?
-
С помощью каких функций можно узнать местоположение курсора?
-
С помощью какой функции можно изменить цвет дальнейших выводимых символов?
-
С помощью какой функции можно изменить цвет дальнейших выводимых знакомест (фона символов)?
-
Какая функция предназначена для считывания одного символа с клавиатуры?
-
Какая функция предназначена для определения нажатия клавиши?
-
Что такое «стандартный звуковой сигнал»?
-
Какую процедуру используют для включения звука с заданной частотой?
-
Какую процедуру используют для выключения звука?
-
Какую процедуру используют для выполнения задержки по времени?
-
В каких целях используются ресурсы модуля DOS?
-
Какая процедура используется для поиска первого файла с заданным именем?
-
Какая процедура используется для поиска следующего файла, после найденного первого?
-
Какая процедура используется для распаковки данных о времени создания файла?
-
Какая процедура используется для поиска файла в разных каталогах?
-
Какой процедурой из составного имени файла выделяют отдельно путь, имя и расширение файла?
-
С помощью какой процедуры можно определить размер логического устройства (диска)?
-
С помощью какой процедуры можно определить количество свободного места (в байтах) на логическом устройстве (диске)?
-
С помощью какой процедуры можно определить системную дату?
-
С помощью какой процедуры можно определить системное время?
-
С помощью какой процедуры можно установить системную дату?
-
С помощью какой процедуры можно установить системное время?
-
Какая стандартная процедура модуля DOS используется для общего вызова прерывания?
-
Какая стандартная процедура модуля DOS используется для вызова часто используемого прерывания DOS 21H?
-
Какой стандартный режим монитора поддерживает модуль Graph?
-
Какой процедурой инициализируется графический режим монитора?
-
Какой процедурой инициализируется текстовый режим монитора?
-
Какая процедура используется для перемещения графического (текущего) указателя в абсолютных координатах?
-
Какая процедура используется для перемещения графического (текущего) указателя в относительных координатах?
-
Какая процедура используется для установки цвета переднего плана в графическом режиме?
-
Какая процедура используется для установки цвета фона в графическом режиме?
-
Какой вид имеет процедура заливки для закрашивания фигур и замкнутых областей?
Достарыңызбен бөлісу: |