Модуль GRAPH. Процедура инициализации InitGraph. Переключение между графическим и текстовым режимами

Страницы работы

Содержание работы

                   Модуль GRAPH

Для создания графических изображений в TP предназначен стандартный библиотечный модуль Graph. Он представляет стандартных подпрограмм, которая полностью обеспечивает управление графическими режимами адаптеров дисплеев. Подключение модуля производится с помощью зарезервированного слова USES.

Uses Graph;

Для работы с модулем необходимы графические драйверы, а для работы со шрифтами необходимы также файлы шрифтов, все эти файлы должны находиться в рабочем каталоге программы.

Типы драйверов:

CGA.BGI

Адаптеры CGA,MCGA

EGAVGA.BGI

Адаптеры EGA,VGA

Типы шрифтов:

TriplexFont

TRIP.CHR

SmallFont

LITT.CHR

SansSerifFont

SANS.CHR

GothicFont

GOTH.CHR

Процедура инициализации InitGraph

Процедура InitGraph-это процедура инициализации графического драйвера и видеорежима.

InitGraph (Var GraphDriver:Integer;){Тип адаптера}

Var GraphMode:Integer; {Режим графики}

  Var GraphPath:String; {Путь к драйверу}

Пример:

GraphDriver:EGA; GraphMode:EGAHi;

Если в программе прописать GraphDriver  присвоить значении Detect, то система сама найдет необходимый драйвер.

Пример:

Program Prim;

Uses Graph;

Var GrDriver,GrMode:Integer; {Определяет драйвер и режим}

Begin

     GrDriver:=Detect; {Режим автоопределения}

InitGraph(GrDriver,GrMode,’’);

CloseGraph;

End.

Процедура CloseGraph.

Процедура CloseGraph используется для выхода из графического режима программы, возврат в которую возможен лишь через процедеру InitGraph.

Процедура DetectGraph.

DetectGraph (Var GraphDriver, GraphMode:Integer);

Пример:

Program Det;

Uses Graph;

Var

     GrDriver,GrMode:Integer;

Begin

     DetectGraph(GraphDriver, GraphMode); {режим автоопределения}

If GrDriver=VGA then

begin

 GrDriver:=CGA; {замена VGA на CGA}

 GrMode:=CGAHi;

End;

InitGraph(GrDriver,GrMode,’’);

If  Result<>0 then

begin

Writeln(‘Ошибка графики’);

  Halt(1);

end;

End.

В этой программе принудительно устанавливается режим CGA.

Переключение между графическим и текстовым режимами.

Переключение между режимами производится с помощью процедуры SetGraphMode, которая переключает систему в указанный параметром GraphMode графический режим и очищает экран монитора.

SetGraphMode(GraphMode:Integer);

Процедура RestoreCRTMode.

RestoreCRTMode возвращает систему в текстовый режим, установленный до инициализации графики.

RestoreCRTMode переключает в текстовый режим, а процедура GetGraphMode переключает наоборот, в режим графики.

Пример:

Program perehod;

Uses Graph;

Var

     GrDriver,GrMode:Integer;

Begin

Writeln(‘Первоначально в текстовом режиме’);

Readln;

{Инициализация драйвера и режима}

GrDriver:=Detect;

InitGraph(GrDriver,GrMode,’’);

If Result<>0 then

Begin

Writeln(‘Ошибка графики’);

Halt(1);

End;

OutText(‘Нажмите Enter для возврата в текстовый режим’);

Readln;

RestoreCRTMode;

Writeln(‘Снова нажмите Enter’);

Readln;

SetGraphMode(GetGraphMode);

OutText(‘Снова в графике’);

Readln;

CloseGraph;

End.

Построение изображений на экране.

Система координат в TP немного отличается от обыкновенной декартовой системы координат. Точка (0:0) находится в левом верхнем углу экрана. Значение X (столбец) изменяется в направлении слева направо, значение Y (строка) изменяется в направлении сверху вниз. Определение размера экрана производится с помощью процедур GetMaxX:Integer;

GetMaxY:Integer;

Управление текущим указателем.

Для построения изображения необходимо знать его положение, а точнее его начальную позицию. В графическом режиме видимого курсора нет, но есть невидимый, выполняющий те же  функции, что и курсор в текстовом режиме, этот невидимый курсор называется current pointer. Для перемещения CP используются процедуры MoveTo и MoveRel.

Процедура MoveTo

MoveTo(X,Y:Integer);

перемещает указатель в точку с координатами (X,Y).

Процедура MoveRel

MoverRel(dX,dY:Integer);

перемещает CP на dX по горизонтали и на dY точек по вертикали относительно последнего положения текущего указателя. При задании положительного значения dX и dY значения соответствующих координат увеличиваются, при задании отрицательных – уменьшаются.

Для определения текущего положения указателя используются процедуры

GetX:Integer;

GetY:Integer;

Отображение точки на экране.

Для отображения точки на экране в TP в модуле Graph используется функция

PUTPixel (X,Y:Integer,Color:Word), где X,Y-координаты точки, а Color-цвет точки на экране.Доступ к пикселам прозводится с помощью функции GetPixel(X,Y:Integer):Word

Отображение линий.

Line(X1,Y1,X2,Y2:Integer); где X1,Y1 – координаты точки начала, а X2,Y2 – координаты точки конца линии. Так же применяются еще две функции для отображения линий на экране монитора – это

LineTo(X,Y)- проводит линию от текущего положения указателя до координат кочки, указанных в скобках

LineRel(dX,dY)-проводит линию от точки текущео положения указателя до точки (CPX+dX,CPY+dY), где CPX и CPY – текущие координаты CP.

Типы линий задаются с помощью процедуры SetLineStyle(LineStyle:Word;Pattern:Word;Thickness:Word), где LineStyle – тип cnhjrb, Pattern -  шаблон, Thickness – толщина линии.

Тип линий:

SolidLn

Сплошная

DottedLn

Пунктирная

CenterLn

Штрих-пунктирная

DashedLn

Штриховая

UserBitLn

Заданная пользователем

NormWidth

Нормальной толщины

ThickWidth

Большой толщины

Чтобы получить информацию о текущем стиле линий можно воспользоваться процедурой GetLineSetting(Var LineType:LineSettingType), где LineSettingType описывается таким образом:

Type

  LineSettingType=record

        LineStyle:Word;

       Pattern:Word;

      Thickness:Word;

End;

Построение прямоугольников.

Rectangle(X1,Y1,X2,Y2:Integer)

Bar(X1,Y1,X2,Y2:Integer) {строит прямоугольник с залитой по шаблону внутренней областью}.

Bar3D(X1,Y1,X2,Y2:Integer,D3:Word;Top:Boolean) {Отображение парраллелепипедов}

X1,Y1 – координаты левого верхнего угла, X2,Y2 – координаты правого нижнего угла, D3 – глубина в пространстве.

Построение многоугольников.

Процедура DrawPoly позволяет строить многоугильники заданного цвета и стиля.

DrawPoly(NumPoints:Word;Var PolyPoints)

Num Points – количество точек ломанной.

Похожие материалы

Информация о работе