Файл BGI — это графический интерфейс (Borland Graphic Interface) фирмы Borland. Он обеспечивает взаимодействие программ с графическими устройствами. Перед работой программы в графических режимах дисплея процедура InitGraph определяет тип адаптера, представленнгого в ПЭВМ, и загружает в память соответствующий BGI-драйвер, в котором определены возможные режимы работы.
Процедура CloseGraph выгружает графический драйвер из памяти и восстанавливает текстовый режим работы видеоадаптера. В описываемом модуле присутствуют также процедуры, позволяющие выходить из графического режима без выгрузки драйвера (RestoreCRTMode) и возвращаться обратно (SetGraphMode).
Если в составе ПЭВМ есть два монитора, то при определении графических адаптеров модуль Graph автоматически включает графический режим на том устройстве, которое позволяет получить наивысшее качество изображения.
Итак, в рабочем каталоге могут находиться следующие файлы:
CGA.BGI — драйвер для IBM CGA, MCGA;
EGAVGA.BGI — драйвер для IBM EGA, VGA;
- 406 -
HERC.BGI — драйвер для Hercules;
ATT.BGI — драйвер для АТ&Т6300 (400 строк);
PC3270.BGI — драйвер для IBM 3270PC;
IBM8514.BGI — драйвер для IBM 8514.
Такой набор файлов необходим при составлении программ, которые будут работать практически на всех ПЭВМ, совместимых с ПЭВМ фирмы IBM. Если же такая задача не стоит, то достаточно иметь один файл, соответствующий представленному в используемой ПЭВМ графическому адаптеру.
Необходимо особо сказать об адаптере и драйвере IBM8514. Это адаптер высокого разрешения, позволяющий обрабатывать изображение размером 1024x768 точек и с палитрой в 256 цветов. Этот адаптер автоматически не определяется (точнее, он определяется, как адаптер VGA), поэтому при вызове процедуры инициализации он должен задаваться явно.
Все процедуры и функции модуля Graph можно разбить на функциональные группы:
1. Управление графическими режимами и их анализ (DetectGraph, InitGraph, CloseGraph, GraphDefaults, ClearDevice, InstallUserDriver, RegisterBGIDriver, RestoreCRTMode, SetGraphMode, SetWriteMode, GetGraphMode, GetModeRange, GetMaxMode, GetModeName, GelDriverName, GraphResult, GraphErrorMsg).
2. Рисование графических примитивов и фигур:
а) управление «текущим указателем» (MoveTo, MoveRel, GetMaxX, GetMaxY, GetX, GetY);
б) собственно рисование (Line, LineTo, LineRel, Arc, GetArcCoords, Circle, Sector, Ellipse, Rectangle, DrawPoly);
в) стиль линий и коэффициент сжатия изображении (SetLineStyle, GetLineSettings, SetAspectRatio, GetAspectRatio).
3. Управление цветами и шаблонами заполнения (SetColor, GetColor, SetBkColor, GetBkColor, GetMaxColor, GetPalette, GetPaletteSize, GetDefaultPalette, SetPalette, SetAllPalette, SetRGBPaletle, SetFillStyle, SetFillPattern, GetFillPattern, GetFillSettings, SetGraphBufSize, FillPoly, FillEllipse, FloodFill, PicSlice, Bar, Bar3D).
4. Битовые операции (PutPixel, GetPixel, ImageSize, GetImage, PutImage).
5. Управление страницами (SetActivePage, SetVisualPage).
6. Графические окна ( вьюпорты ) (SetViewPort, GetViewSettings, ClearViewPort).
- 407 -
7. Управление выводом текста (RegisterBGIFont, InstallUserFont, OutText, OutTextXY, SetTextStyle, SetTextJustify, SetUserCharSize, GetTextSettings, TextHeight, TextWidth).
19.2. Управление графическми режимами
19.2.1. Инициализация и закрытие графического режима
19.2.1.1. Процедура инициализации InitGraph. Простейшая программа, использующая графику, обязательно должна содержать блок вызовов процедур инициализации графического режима и обращение к процедуре его закрытия. Такой блок инициализирует графический режим, проверяет правильность переключения и, если все операции прошли успешно, допускает дальнейшую работу программы. Процедура инициализации объявлена следующим образом:
InitGraph( VAR GraphDriver : Integer; { тип адаптера }
| VAR GraphMode : Integer; { режим графики }
DriverPath : String ); { путь к драйверу }
В модуле Graph определены константы для задания вида графического адаптера параметром GraphDriver перед вызовом InitGraph (последняя константа введена для вызова процедуры GetModeRange уже после инициализации):
CONST
Detect =0; { автоопределение }
CGA =1; { адаптер CGA }
MCGA =2; { адаптер MCGA }
EGA =3; { адаптер EGA 256K }
EGA64 =4; { адаптер EGA 64K }
EGAMono =5; { EGA с моно-дисплеем }
IBM8514 = 6; { адаптер 8514 }
HercMono = 7; { адаптер Hercules }
ATT400 =8; {для ПЭВМ AT&T }
VGA = 9; { адаптер VGA }
PC3270 =10; { адаптер 3270 }
CurrentDriver =-128; { для GetModeRange }
Если параметру GraphDriver присвоить значение константы Detect, то система включится в режим автоопределения. Если возможно переключение системы в графический режим, то инициализируется соответствующий BGI-драйвер и включается режим с максимальным разрешением. В параметрах GraphDriver и
- 408 -
GraphMode при этом будут возвращены автоматически выбранные значения или код ошибки.