ГЛАВА 12. МОДУЛЬ GRAPH. Модуль Graph реализует полную библиотеку из более чем 50 графических программ, начиная от высокоуровневых, таких как SetViewPort, Circle, Bar3D или DrawPoly до бит-ориентированных, таких как GetImage и PutImage. Поддерживаются несколько типов линий и стилей заполнения, существует несколько типов шрифтов, которые можно увеличивать, выравнивать и ориентировать вертикально или горизонтально. Для того чтобы компилировать программу, которая использует модуль Graph, Вам требуется Ваш исходный код, компилятор и доступ к стандартным модулям в TURBO.TPL и модулю Graph в GRAPH.TPU. Для того чтобы выполнить программу, которая использует модуль Graph, Вам необходим один или более графических драйверов (.BGI файлы, см. ниже). Кроме того, если Ваша программа использует штриховые шрифты, Вам потребуется один или более файлов шрифтов (.CHR). Драйверы. Графические драйверы поддерживают следующие графические адаптеры (и полностью совместимые с ними): - CGA - MCGA - EGA - VGA - Hercules - AT&T 400 строк - 3270 PC - IBM-8514 Каждый драйвер содержит код и данные, хранящиеся в отдельном файле. Во время выполнения, процедура InitGraph определяет графическое устройство, загружает и инициализирует соответствующий графический драйвер, переводит систему в графический режим и возвращает управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и восстанавливает предыдущий видеорежим. Вы можете переключиться между графическим и текстовым режимами используя RestoreCrtMode и SetGraphMode. Для того, чтобы загрузить Ваш собственный драйвер или выключить его в .EXE, см. RegisterBGIDriver в Справочном руководстве по библиотеке. Graph поддерживает конфигурацию с двумя мониторами. Когда Graph инициализируется вызовом InitGraph, соответствующий монитор будет выбран для запрошенного графического драйвера и режима. Когда графическая программа завершается, предыдущий видеорежим будет восстановлен. Если в конфигурации с двумя мониторами будет вызван InitGraph с режимом автообнаружения, Graph выберет монитор и графический адаптер на котором будет поддерживаться графический вывод с более высоким качеством. CGA.BGI Драйвер для IBM CGA, MCGA EGAVGA.BGI Драйвер для IBM EGA, VGA HERC.BGI Драйвер для монохромного Hercules ATT.BGI Драйвер для AT&T 6300 (400 строк) PC3270.BGI Драйвер для IBM 3270 PC IBM8514.BGI Драйвер для IBM 8514 Поддержка IBM 8514. Turbo Pascal поддерживает графический адаптер IBM 8514, который имеет высокое разрешение 1024х768 и палитру цветов 256 из списка 256K цветов. Имя файла драйвера - IBM8514.BGI. Графический адаптер IBM 8514 не может быть правильно распознан автоматически (он будет распознаваться как адаптер VGA). Следовательно, для использования IBM 8514, переменной GraphDriver должно быть присвоено значение IBM8514 (оно определено в модуле Graph) при вызове InitGraph. DetectGraph или DETECT с InitGraph не должны использоваться с IBM 8514 (если только Вы не хотите эмулировать режим VGA). Адаптер IBM 8514 поддерживает режимы IBM8514Lo (640x480) и IBM8514Hi (1024x768). Обе эти константы определены в модуле Graph. IBM 8514 использует три 6-ти битовые значения для определения цветов. Определены 6-битовые Red (красный), Green (зеленый) и Blue (синий) компоненты для каждого определенного цвета. Для определения цвета в библиотеку BGI добавлена новая программа: procedure SetRGBPalette(ColorNum, Red, Green, Blue: Word); Аргумент ColorNum определяет номер цвета в палитре. ColorNum задается в диапазоне 0-255 (десятичные). Аргументы Red, Green, Blue определяют значение цвета для элемента палитры. Для определения палитры используются 6 старших битов младшего байта каждого из этих параметров. Другие программы манипуляции с палитрой из графической библиотеки не могут использоваться с драйвером IBM 8514 (такие как SetAllPalette, SetPalette, GetPalette). Для совместимости с другими графическими адаптерами IBM, модуль Graph определяет первые 16 значений палитры IBM 8514, соответствующие цветам EGA/VGA. Эти значения могут быть использованы как они определены или изменены, используя программу SetRGBPalette. Программа FloodFill не работает на адаптере IBM 8514. Эти же ограничения действуют при использовании VGA в режиме 256 цветов. Координатная система. Верхний левый угол графического экрана определен как (0,0). Значение Х или колонки увеличиваются направо. Значение Y или строки увеличиваются вниз. Так в режиме 320x200 на адаптере CGA экранные координаты каждого из четырех углов и точка в центре экрана будут представлены: Рис. 12.1. Экран с координатами (X,Y). (0,0) (319,0) ┌───────────────────────┐ │ │ │ (159,99) │ │ . │ │ │ │ │ │ │ └───────────────────────┘ (0,199) (319,199) Текущий указатель. Многие графические системы поддерживают понятие текущего указателя (CP - Current Pointer). CP подобен понятию курсора в текстовом режиме, но в отличие от курсора CP не виден. Write('ABC'); В текстовом режиме оператор Write будет помещать курсор в колонку непосредственно после символа C. Если C помещен в колонку 80, то курсор передвинется в первую колонку следующей строки. Если C помещен в колонку 80 25-ой строки, то весь экран сдвинется на одну строку вверх и курсор будет в первой колонке 25 строки. MoveTo(0, 0); LineTo(20, 20); В графическом режиме оператор LineTo поместит CP в точку (20,20). Выведенная линия будет отсечена в текущем окне, если отсечение включено. Заметим, что CP никогда не отсекается. Команда MoveTo эквивалентна GotoXY. Она используется только для перемещения CP. Следующие команды перемещают CP: InitGraph, MoveTo, MoveRel, LineTo, LineRel, OutText, SetGraphMode, GraphDefaults, ClearDevice, SetViewPort, ClearViewPort. Примечание: последние 5 команд перемещают CP в (0,0). Текст. Побитовый шрифт с матрицей 8х8 и несколько штриховых шрифтов определены для вывода текста в графическом режиме. Символ побитового шрифта определен в матрице 8х8 пикселов (точек). Штриховый шрифт определен серией отрезков, которые говорят графической системе как рисовать шрифт. Удобство использованоя штрихового шрифта проявляется, когда Вы начинаете рисовать большие символы. Поскольку штриховый шрифт определен отрезками, он остается хорошего разрешения и качества при увеличении. Когда побитовый шрифт увеличивается, матрица умножается на коэффициент масштабирования, и как только коэффициент масштабирования становится большим, разрешения символов становится грубым. Для небольших символов побитовый шрифт будет эффективен, но для большого текста Вы захотите использовать штриховый шрифт. Выравнивание графического текста управляется процедурой SetTextJustify. Масштабирование и выбор шрифта производится процедурой SetTextStyle. Графический текст выводится вызовом процедуры OutText или OutTextXY. Запрос текущих установок текста производится процедурой GetTextSettings. Размер штрихового шрифта может быть определен процедурой SetUserCharSize. Каждый штриховой шрифт хранится в отдельном файле с расширением .CHR. Файлы шрифтов могут быть загружены с диска автоматически модулем Graph во время выполнения (как описано), или они могут быть включены в пользовательскую программу или загружены ей и "зарегистрированы" модулем Graph. Специальная программа BINOBJ.EXE обеспечивает преобразование файла шрифтов (или любого двоичного файла данных, который соответствует ему) в файл .OBJ, который может быть включен в модуль или программу, используя директиву компилятора {$L}. Это позволяет программе иметь все файлы шрифтов, встроенные в .EXE файл. (Читайте комментарий в начале программы GRLINK.PAS на дистрибутивном диске). Фигуры и стили. Существует большое число программ для рисования и заполнения фигур, включая точки, линии, окружности, дуги, эллипсы, прямоугольники, многоугольники, полосы, 3-х мерные полосы и сектора. Использование SetLineStyle позволяет управлять толщиной линий и типом: сплошная, точками или тип, определенный Вами. Использование SetFillStyle и SetFillPartern, FillPoly и FloodPoly позволяет заполнять многоугольник штриховкой или другим стилем. Окна и битовые образы. Процедура SetViewPort заставляет все выводные команды работать относительно прямоугольной области экрана (окна или поля вывода). Точки, линии, фигуры - весь графический вывод - зависит от определения окна (его координат) до тех пор, пока окно не будет изменено. Другие программы обеспечивают очистку окна и чтение текущего определения окна. Если отсечение активно, весь графический вывод отсекается по границам текущего окна. Заметим, что CP никогда не отсекается. GetPixel и PutPixel обеспечивают чтение пикселов. GetImage и PutImage могут быть использованы для сохранения и вывода на экран прямоугольной области экрана. Они обеспечивают полный набор битовых операции (копирование, xor, or, and, not). Страницы и цвет. Существует ряд других программ, включая поддержку нескольких графических страниц (только для EGA, VGA, Hercules; особенно полезны для мультипликации), палитры, цвета и т.п. Обработка ошибок. Внутренние ошибки в модуле Graph возвращаются функцией GraphResult. GraphResult возвращает код ошибки последней графической операции. Коды ошибок определены в таблице 12.2. Следующие программы устанавливают GraphResult: Bar ImageSize SetFillPattern Bar3D InitGraph SetFillStyle ClearViewPort InstallUserDriver SetGraphBufSize CloseGraph InstallUserFont SetGraphMode DelectGraph PieSlice SetLineStyle DrawPoly RegisterBGIdriver SetPalette FillPoly RegisterBGIfont SetTextJustify FloodFill SetAllPalette SetTextStyle GetGraphMode Заметим, что GraphResult устанавливается в ноль после его вызова. Следовательно, программист должен запомнить значение GraphResult во временной переменной, а затем проверять его. Начало работы. Пример простой программы: program GraphText; uses Graph; var GraphDriver, GraphMode, ErrorCode : Integer; begin GraphDriver :=Detect; InitGraph(GraphDriver, GraphMode,'C:\DRIVERS'); ErrorCode :=GraphResult; if ErrorCode <> grOK then {ошибка } begin Writeln('Graphics error: ', GraphErrorMsg(ErrorCode)); Writeln('Program aborted...'); Halt(1); end; Rectangle(0, 0, GetMaxX, GetMaxY); {рисовать прямоугольник на весь экран} SetTextJustify(CenterText, CenterText); {центрировать текст} SetTextStyle(DefaultFint, Horez Dir 3); OutTextXY(GetMaxX div 2, GetMaxY div 2, 'Borland Graphics interface (BGI)'); Readln; CloseGraph; end. {GraphTest} Программа начинается с вызова InitGraph, который автоматически определяет аппаратуру и загружает соответствующий графический драйвер (из справочника С:\DRIVERS). Если графическое устройство не распознано или во время инициализации произошла ошибка, выдается сообщение об ошибке и программа завершается. Иначе, чертится прямоугольник по краю экрана и в центре экрана выводится текст. Примечание: Адаптеры AT&T 400 и IBM 8514 нельзя распознать автоматически. Для использования этих драйверов Вам нужно отменить автообнаружение и передать в InitGraph код драйвера и правильный код графического режима. Например, чтобы использовать драйвер AT&T, замените строки 9 и 10 в предыдущем примере на: GraphDriver := ATT400; GraphMode := ATT400Hi; InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS'); Это указывает системе загрузить драйвер AT&T 400 и установить графический режим 640x400 точек. Приведенный ниже пример демонстрирует возможность переключения между графическим и текстовым режимами: program GraphText; uses Graph; var GraphDriver, GraphMode, ErrorCode : Integer; begin GraphDriver :=Detect; InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS'); ErrorCode :=GraphResult; if ErrorCode <> grOK then {ошибка} begin Writeln(Graphics error: ', GraphErrorMsg(ErrorCode)); Writeln('Program aborted...'); Halt(1); end; OutText('InGraphiesMode. Press'); Readln; RestoreCRTMode; Writeln('Now in text mode. Press'); Readln; SetGraphMode(GraphMode); OutText('Back in Graphics mode. Press'); Readln; CloseGraph; end. {GraphTest} Заметим, что вызов SetGraphMode устанавливает все графические параметры (палитру, текущий указатель, цвета и т.п.) в значение по умолчанию. Вызов CloseGraph вoсстанавливает видеорежим, который был установлен до вызова InitGraph и освобождает память, используемую графическим драйвером. Пользовательские программы управления кучей. Модуль Graph использует две программы управления кучей: GraphGetMem и GraphFreeMem. GraphGetMem распределяет память для драйверов графического устройства, шрифтов и сканирующего буфера. GraphFreeMem освобождает память распределенную драйверу. Стандартные программы имеют вид: procedure GraphGetMem (var P: Pointer; Size: Word); procedure GraphFreeMem (var P: Pointer; Size: Word); Модуль Graph определяет два указателя для ссылки на эти стандартные программы. Эти указатели определены так: var GraphGetMemPtr : Pointer; {указатель на программу распределения памяти} GraphFreeMemPtr : Pointer; {указатель на программу освобождения памяти} Программы управления кучей, ссылки на которые хранятся в GraphGetMemPtr и GraphFreeMemPtr, вызываются модулем Graph для распределения и освобождения памяти для: - многоцелевого буфера, размер которого может быть установлен программой SetGraphBufSize (по умолчанию 4 Кбайта) - драйвера устройства, загружаемого InitGraph (*.BGI файлы) - файла штрихового шрифта, загружаемого SetTextStyle (*.CHR файлы) Графический буфер всегда распределяется в куче. Драйвер устройства распределяется в куче, если только Ваша программа не загрузила его и не установила связь при помощи RegisterBGIdriver; и файл шрифтов распределяется в куче, когда Вы выбираете штриховой шрифт используя SetTextStyle, если только Ваша программа его не загрузила или не связала, используя вызов RegisterBGIfont. При инициализации модуля Graph эти указатели указывают на стандартные программы распределения и освобождения памяти, которые определены в разделе implementation модуля Graph. Вы можете вставить Ваши программы управления памятью присвоением этим указателям адресов этих программ. Ваши программы должны иметь такой же список параметров, что и стандартные программы и должны быть объявлены как дальние (far). Приведенный ниже пример демонстрирует пользовательские программы распределения и освобождения памяти. Заметим, что использование MgExitProc автоматически вызывает CloseGraph при завершении программы: program UserHeapManagment; {показывает как пользователь может составлять программы управления памятью, используя модуль Graph} uses Graph; var GraphDriver, GraphMode: Integer; ErrorCode: Integer; { Используется для запоминания кода возвращаемого GraphResult } PreGraphExitProc: Pointer; { Используется для сохранения первоначальной процедуры выхода } ($F+) { Программа должна быть дальней модели } procedure MyGetMeM(var P: Pointer; Size: Word); far; { Распределяет память для драйвера графического устройства, шрифта и сканирующего буфера } begin GetMet(P, Size); end; { MyGetMem } procedure MyFreeMem(var P: Pointer; Size: Word); far; { Освобождает память графического драйвера, шрифта и сканирующего буфера } begin if P <> nil then { Не освобождает если указатель nil (пустой)} begin FreeMen(P, Size); P := nil; end; end; { MyFreeMem } procedure MyExitProc; far; { Получает управление при завершении программы } begin ExitProc := PreGraphExitProc; { Восстанавливает перво- начальную процедуру } CloseGraph; { Очищает кучу } end; ( MyExitProc ) ($F-) begin { Инсталирует программу выхода } PreGraphExitProc := ExitProc; ExitProc := @MyExitProc; GraphGetMemPtr := @MyGetMem; { Управление распределением памяти } GraphFreeMemPtr := @MyFreeMem; { Управление освобождением памяти } GraphDriver := Detect; InitGraph(GraphDriver, GraphMode, ''); ErrorCode := GraphResult; if ErrorCode <> grOk then begin Writeln('Graphics error: ', GraphErrorMsg(ErrorCode)); Readln; Halt(1); end; Line(0, 0, GetMaxX, GetMaxY); OutTextXY(1, 1, 'Press :'); Readln; end. { UserHeapManagment }  Константы, типы и переменные модуля Graph.  Константы.  Используйте эти константы драйверов и режимов с InitGraph, DetectGraph и GetModeRange: ─────────────────────────────────────────────────────────────────── Константа Значение Описание ─────────────────────────────────────────────────────────────────── Detect 0   Запрашивает автообнаружение CGA 1 MCGA 2 EGA 3 EGA64 4 EGAMono 5 IBM8514 6 HercMono 7 ATT400 8 VGA 9 PC3270 10 CurrentDriver -128 Передается в GetModeRange CGAC0 0   320x200 палитра 0: LightGreen, LightRed, Yellow; 1 страница   CGAC1     1 320x200 палитра 1: LightCyan, LightMagenta, White; 1 страница CGAC2 2 320x200 палитра 2: Green, Red, Brown; 1 страница CGAC3 3 320x200 палитра 3: Cyan, Magenta, LightGray; 1 страница CGAHi 4 640x200 1 страница MCGAC0 0 320x200 палитра 0: LightGreen, LightRed, Yellow; 1 страница MCGAC1 1 320x200 палитра 1: LightCyan, LightMagenta, White; 1 страница MCGAC2 2 320x200 палитра 2: Green, Red, Brown; 1 страница MCGAC3 3 320x200 палитра 3: Cyan, Magenta, LightGray; 1 страница MCGAMed 4 640x200 1 страница MCGAHi 5 640x480 1 страница EGALo 0 640x200 16 цветов 4 страницы EGAHi 1 640x350 16 цветов 2 страницы EGA64Lo 0 640x200 16 цветов 1 страница EGA64Hi 1 640x350 4 цвета 1 страница EGAMonoHi 3 640x350 64K: 1 страница; 256K: 2 страницы HercMonoHi 0 720x348 2 страницы ATT400C0 0 320x200 палитра 0: LightGreen, LightRed, Yellow; 1 страница ATT400C1 1 320x200 палитра 1: LightCyan, LightMagenta, White; 1 страница ATT400C2 2 320x200 палитра 2: Green, Red, Brown; 1 страница ATT400C3 3 320x200 палитра 3: Cyan, Magenta, LightGray; 1 страница ATT400Med 4 640x200 1 страница ATT400Hi 5 640x400 1 страница VGALo 0 640x200 16 цветов 4 страницы VGAMed 1 640x350 16 цветов 2 страницы VGAHi 2 640x480 16 цветов 1 страница PC3270Hi 0 720x350 1 страница IBM8514LO 0 640x480 256 цветов IBM8514HI 1 1024x768 256 цветов ─────────────────────────────────────────────────────────────────── Значения ошибок, возвращаемые GraphResult: Таблица 12.2. Значения ошибок GraphResult. ─────────────────────────────────────────────────────────────────── Константа Значение Описание ─────────────────────────────────────────────────────────────────── grOk 0 нет ошибок grNoInitGraph -1 графика не инициализированна (используйте InitGraph) grNotDetected -2 графическое устройство не обнаружено grFileNotFound -3 файл драйвера устройства не найден grInvalidDriver -4 неправильный файл драйвера устройства grNoLoadMem -5 не достаточно памяти для загрузки драйвера grNoScanMem -6 выход за пределы памяти при заполнении (scan fill) grNoFloodMem -7 выход за пределы памяти при заполнении (flood fill) grFontNotFound -8 файл шрифта не найден grNoFontMem -9 не достаточно памяти для загрузки шрифта grInvalidMode -10 неверный графический режим для этого драйвера grError -11 графическая ошибка grIOerror -12 ошибка графического ввода/вывода grInvalidFont -13 неверный файл шрифта grInvalidFontNum -14 неверный номер шрифта ─────────────────────────────────────────────────────────────────── SetPalette и SetAllPalette.  Используйте эти константы цветов с SetPalette и SetAllPalette:  ─────────────────────────────── Константа Значение   ─────────────────────────────── Black 0 Blue 1 Green 2 Cyan 3 Red 4 Magenta 5 Brown 6 LightGray 7 DarkGray 8 LightBlue 9 LightGreen 10 LightCyan 11 LightRed 12 LightMagenta 13 Yellow 14 White 15   ─────────────────────────────── SetRGBPalette. Эти константы цветов могут быть использованы с  SetRGBPalette для выбора стандартных EGA цветов на графическом адаптере IBM 8514: ─────────────────────────────── Константа Значение   ─────────────────────────────── EGABlack 0 темные цвета  EGABlue 1 EGAGreen 2 EGACyan 3 EGARed 4 EGAMagenta 5 EGABrown 20 EGALightGray 7 EGADarkGray 56 светлые цвета EGALightBlue 57 EGALightGreen 58 EGALightCyan 59 EGALightRed 60 EGALightMagenta 61 EGAYellow 62 EGAWhite 63   ─────────────────────────────── Константы типов линий. Используйте эти константы типов линий с GetLineSettings и SetLineStyle:  ─────────────────────────────── Константа Значение   ─────────────────────────────── SolidLn 0 DottedLn 1 CenterLn 2 DashedLn 3 UserBitLn 4 Тип линии, определяемый пользователем NormWidth 1 ThickWidth 3   ─────────────────────────────── Константы управления шрифтом. Используйте эти константы с GetTextSettings и SetTextStyle: ─────────────────────────────── Константа Значение   ─────────────────────────────── DefaultFont 0 8x8 битовый шрифт TriplexFont 1 Штриховые шрифты SmallFont 2 SansSerifFont 3 GothicFont 4 HorizDir 0 слева направо VertDir 1 снизу вверх UserCharSize 0 размер символа, определяемый пользователем   ─────────────────────────────── Константы выравнивания. Эти константы управляют горизонтальным и вертикальным выравниванием для SetTextJustify: ─────────────────────────────── Константа Значение   ─────────────────────────────── LeftText 0 CenterText 1 RightText 2 BottomText 0 CenterText 1 (уже определена выше) TopText 2   ─────────────────────────────── Константы отсечения. Используйте эти константы с SetViewPort для управления отсечением. При ClipOn графический вывод будет отсекаться по границе окна: ─────────────────────────────── Константа Значение   ─────────────────────────────── ClipOn True ClipOff False   ─────────────────────────────── Константы полосы. Эти константы используются с Bar3D, чтобы указать будет ли 3-х мерная вершина рисоваться на верху полосы: ─────────────────────────────── Константа Значение   ─────────────────────────────── TopOn True TopOff False   ─────────────────────────────── Константы шаблона заполнения. Эти шаблоны заполнения используются GetFillSettings и SetFillStyle. Используйте SetFillPattern для определения Вашего собственного стиля заполнения, затем вызовите SetFillStyle(UserFill, SomeColor) и сделайте свой шаблон активным: ────────────────────────────────────────────────────────────── Константа Значение ────────────────────────────────────────────────────────────── EmptyFill 0 заполняет цветом фона SolidFill 1 заполняет основным цветом LineFill 2 --- заполнение LtSlashFill 3 /// заполнение SlashFill 4 /// заполнение толстыми линиями BkSlashFill 5 \\\ заполнение толстыми линиями LtBkSlashFill 6 \\\ заполнение HatchFill 7 редкая штриховка XHatchFill 8 плотная штриховка InterleaveFill 9 пересекающиеся линии WideDotFill 10 редкие точки CloseDotFill 11 плотные точки UserFill 12 определенный пользователем стиль ────────────────────────────────────────────────────────────── Битовые операторы. Используйте эти битовые операторы с PutImage и SetWriteMode: ────────────────────────────────────── Константа Значение ────────────────────────────────────── CopyPut 0 { MOV } XORPut 1 { XOR } Используйте эти операции только с PutImage: OrPut 2 { OR } AndPut 3 { AND } NotPut 4 { NOT } ────────────────────────────────────── Константа палитры. Эта константа используется GetPalette, GetDefault, SetAllPalette и определяет запись PaletteType: ─────────────────────────────── Константа Значение   ─────────────────────────────── MaxColors 15   ─────────────────────────────── Типы Эта запись используется с GetPalette, GetDefaultPalette и SetAllPalette: type PaletteType = record Size : Byte; Colors : array (0.. MaxColors) of Shortint; end; Эта запись используется с GetLineSettings: type LineSettingsType = record LineStyle : Word; Pattern : Word; Thickness : Word; end; Эта запись используется с GetTextSettings: type TextSettingsType = record Font : Word; Direction : Word; CharSize : Word; Horiz : Word; Vert : Word; end; Эта запись используется с GetFillSettings: type FillSettingsType = record Pattern : Word; Color : Word; end; Эта запись используется с GetFillPattern и SetFillPattern: type FillPatternType = array [1..8] of Byte; { определяемый пользователем стиль } Этот тип определен для Вашего удобства. Заметим, что оба поля типа Integer: type PointType = record X,Y: Integer; end; Эта запись используется с GetViewSettings для получения данных о текущем окне: type ViemPortType = integer; X1, Y1, X2, Y2: Integer; Clip : Boolean; end; Эта запись используется с GetArcCoords и может быть использована для получения информации о последнем вызове Arc или Ellipse: type ArcCoordsType = record X, Y : Integer; Xstart, Ystart: Integer; Xend, Yend : Integer; end; Переменные. Эти переменные указывают на программы управления кучей модуля Graph. Если Ваша программа использует собственные программы управления памятью, присвойте адреса Ваших программ распределения и освобождения памяти переменным GraphGetMemPrt и GraphFreeMemPrt: ────────────────────────────────────────────────────────────── Переменная Значение ────────────────────────────────────────────────────────────── GraphGetMemPrt Pointer (распределение кучи) GraphFreeMemPrt Pointer (освобождение кучи) ────────────────────────────────────────────────────────────── Процедуры. Таблица 12.3. Процедуры модуля Graph. ─────────────────────────────────────────────────────────────────── Arc Рисует дугу от начального угла к конечному, используя (X,Y) как центр Bar Рисует полосу, используя текущий стиль и цвет. Bar3D Рисует 3-х мерную полосу, используя текущий стиль и цвет. Circle Рисует окружность, используя (X,Y) как центр. ClearDevice Очищает экран и устанавливает текущий указатель (CP) в начало. ClearViewPort Очищает окно. CloseGraph Закрывает графическую систему. DetectGraph Проверяет аппаратуру и определяет какой графический драйвер и в каком режиме используется. DrawPoly Рисует многоугольник текущим цветом и типом линии. Ellipse Рисует эллиптическую дугу от начального угла к конечному, используя (X,Y) как центр. FillEllipse Рисует заполненный эллипс, используя (X,Y) как центр и XRadius и YRadius как горизонтальные и вертикальные оси. FillPoly Заполняет многоугольник, используя сканирование. FloodFill Заполняет ограниченную область, используя текущий шаблон и цвет заполнения. GetArcCoords Позволяет запросить координаты команды Arc. GetAspectRatio Возвращает разрешение экрана из которого может быть вычислен относительный аспект (Xasp/Yasp). GetFillPattern Возвращает шаблон заполнения, установленный последним вызовом SetFillPattern. GetFillSettings Позволяет запросить текущий шаблон и цвет, установленные SetFillStyle или SetFillPattern. GetImage Сохраняет битовый образ указанной части экрана в буфере. GetLineSettings Возвращает текущие стиль, шаблон и толщину линии, установленные SetLineStyle. GetModeRange Возвращает минимальный и максимальный графические режимы для данного драйвера. GetPalette Возвращает текущую палитру и ее размер. GetTextSettings Возвращает текущий шрифт, направление, размер и выравнивание текста, установленные SetTextStyle и SetTextJustify. GetViewSettings Позволяет запросить текущие параметры окна и отсечения. GraphDefaults Устанавливает текущий указатель (CP) в начало и переустанавливает графическую систему. InitGraph Инициализирует графическую систему и устанавливает устройство в графический режим. Line Рисует линию от (X1,Y1) к (X2,Y2). LineRel Рисует линию от текущего указателя (CP) к точке, лежащей на заданном растоянии. LineTo Рисует линию от текущего указателя к (X,Y). MoveRel Передвигает текущий указатель (CP) на заданное расстояние от его текущей позиции. MoveTo Передвигает текущий указатель (CP) в (X,Y). OutText Выводит текст на экран от текущего указателя. OutTextXY Выводит текст на экран. PieSlice Рисует и заполняет сектор, используя (X,Y) как центр и рисуя от начального угла к конечному. PutImage Выводит битовый образ на экран. PutPixel Рисует точку (пиксел) в (X,Y). Rectangle Рисует прямоугольник, используя текущий цвет и тип линии. RestoreCRTMode Восстанавливает видеорежим, который был до инициализации графики. Sector Рисует и заполняет сектор эллипса. SetActivePage Устанавливает активную страницу для графического вывода. SetAllPalette Изменяет цвет палитры. SetAspectRatio Изменяет значение относительного аспекта. SetBkColor Устанавливает цвет фона. SetColor Устанавливает основной цвет, которым будет осуществляться рисование. SetFillPattern Выбирает шаблон заполнения, определенный пользователем. SetFillStyle Устанавливает шаблон заполнения и цвет. SetGraphBufSize Позволяет изменить размер буфера для функций заполнения. SetGraphMode Переводит систему в графический режим и очищает экран. SetLineStyle Устанавливает текущие толщину и стиль линии. SetPalette Изменяет один цвет палитры, указанный через ColorNum и Color. SetRGBPallete Позволяет модифицизовать палитру для IBM 8514 и VGA. SetTextJustify Устанавливает выравнивание текста, используемое OutText и OutTextXY. SetTextStyle Устанавливает текущий шрифт, стиль и размер текста. SetUserCharSize Позволяет изменить ширину и высоту символа для штрихового шрифта. SetViewPort Устанавливает текущее окно для графического вывода. SetVisualPage Устанавливает номер видимой графической страницы. SetWriteMode Устанавливает режим вывода (копирование или XOR) для линий, рисуемых с DrawPoly, Line, LineRel, LineTo, Rectangle. ─────────────────────────────────────────────────────────────────── Функции Таблица 12.4. Функции модуля Graph. ─────────────────────────────────────────────────────────────────── GetBkColor Возвращает текущий фоновый цвет. GetColor Возвращает текущий цвет. GetDefaultPalette Возвращает аппаратную палитру в записи PaletteType. GetDriverName Вoзвращает строку с именем текущего драйвера. GetGraphMode Возвращает текущий графический режим. SetMaxColor Возвращает максимальный цвет, который можно задать в SetColor. GetMaxMode Возвращает номер максимального режима текущего загруженного драйвера. GetMaxX Возврашает максимальный Х (разрешение по горизонтали) для текущего графического драйвера и режима. GetMaxY Возвращает максимальный Y (разрешение по вертикали) для текущего графического драйвера и режима. GetModeName Возвращает строку с именем указанного графического режимаю. GetPaletteSize Возвращает размер таблицы палитры. GetPixel Возвращает цвет точки в (X,Y). GetX Возвращает координату X текущей позиции (CP). GetY Возвращает координату Y текущей позиции (СР). GraphErrorMsg Возвращает строку сообщения об ошибке для заданного кода ErrorCode. GraphResult Возвращает код ошибки для последней графической операции. ImageSize Возвращает число байт, требуемое для заполнения прямоугольной области экрана. InstallUserDriver Устанавливает пользовательский драйвер устройства в BGI таблицу драйверов устройств. InstallUserFont Устанавливает новый шрифт, который не встроен в BGI систему. RegisterBGIdriver Регистрирует драйвер BGI для графической системы. RegisterBGIfont Регистрирует шрифт BGI для графической системы. TextHeight Возвращает высоту строки в пикселах. TextWidth Возвращает ширину строки в пикселах. ─────────────────────────────────────────────────────────────────── Для детального описания этих процедур и функций см. Справочное руководство по библиотеке.