Модуль 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 – количество точек ломанной.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.