Глава 19. Использование графического интерфейса Borland
Модуль Graph реализует полную библиотеку из более чем 50
графических программ - от вызовов процедур и функций высокого
уровня, как, например, SetViewPort, Bаr3D, DrаwPoly, до программ,
ориентированных на работу с битами, таких, как GetImage или
РutImage. Поддерживается несколько видов закрашивания и типов ли-
ний, и имеется несколько шрифтов, которые можно изменять по вели-
чине, выравнивать и ориентировать горизонтально или вертикально.
Для компиляции программы, использующей модуль Grаph, вам не
потребуется никаких внешних файлов (кроме, конечно, исходного
текста вашей программы, компилятора и доступа к стандартным моду-
лям в библиотеке исполняющей системы).
Имена библиотек и модуля Graph Таблица 19.1
--------------------T---------------T------------------
¦ Тип программы ¦ Библиотека ¦ Имя модуля Graph ¦
+-------------------+---------------+------------------+
¦ Реальный режим ¦ TURBO.TPL ¦ GRAPH.TPU ¦
¦ Защищенный режим ¦ TPP.TPL ¦ GRAPH.TPP ¦
L-------------------+---------------+-------------------
Для запуска программы, использующей модуль Grарh, кроме ва-
шей программы с расширением .EXE вам потребуются один или более
графических драйверов (см. далее файлы .BGI). Кроме того вам пот-
ребуется также один или более файлов шрифтов (.CНR), если в вашей
программе используются какие-либо шрифты.
Примечание: В соответствии с лицензионными условиями
вы можете распространять файлы .CHR и .BGI наряду со своими
программами.
Драйверы
Для перечисленных ниже графических адаптеров и полностью
совместимых с ними предусмотрены следующие графические драйверы:
CGA Неrcules
МСGA AT&T 400
EGA 3270 PC
VGA IBM 8514
Каждый драйвер содержит выполняемый код и данные и хранится
в отдельном файле на диске. Во время работы процедура InitGraph
идентифицирует графическую аппаратуру и производит загрузку и
инициализацию соответствующего графического драйвера, переводит
систему в графический режим, а затем возвращает управление вызы-
вающей программе. Процедура CloseGraph выгружает драйвер из памя-
ти и восстанавливает предыдущий видеорежим. С помощью программ
RеstoreCrtMode и SetGraphMode вы можете переключаться между текс-
товым и графическим режимом. См. Главу 1 в "Справочном руководс-
тве программиста".
Модуль Grаph может также работать на компьютерах с двумя мо-
ниторами. При инициализации модуля Graph с помощью процедуры
InitGraph для графического драйвера и требуемого режима будет
выбран нужный монитор. При завершении работы графической програм-
мы предыдущий видеорежим будет восстановлен. Если для графической
аппаратуры с двумя мониторами требуется автоматическое распозна-
вание, то процедура InitGraph выберет монитор и графическую пла-
ту, при которой будет получаться наилучшее качество выводимой
графической информации.
---------------T------------------------------------------------
¦ Драйвер ¦ Аппаратура ¦
+--------------+------------------------------------------------+
¦ CGA.BGI ¦ Драйвер для адаптеров CGA, MCGA фирмы IBM. ¦
¦ EGAVGA.BGI ¦ Драйвер для адаптеров EGA, VGA фирмы IBM. ¦
¦ HERC.BGI ¦ Драйвер для монохромного адаптера Hercules фир-¦
¦ ¦ мы IBM. ¦
¦ ATT.BGI ¦ Драйвер для AT&T 6300 (400 строк). ¦
¦ PC3270.BGI ¦ Драйвер для IBM 3270 РС. ¦
¦ IBM8514.BGI ¦ Драйвер для IBM 8514. ¦
L--------------+-------------------------------------------------
Поддержка устройства IBM 8514
Borland Pascal поддерживает графическую плату IBM 8514, ко-
торая представляет собой новую графическую плату с высоким разре-
шением, позволяющую получить разрешающую способность до 1024х768
точек и палитру, содержащую 256 оттенков из 256 цветов. Файл
драйвера для этой графической платы называется IBM8514.BGI.
Графическая плата IBM 8514 не может правильно распознаваться
Borland Pascal при автоматическом обнаружении (она будет распоз-
наваться алгоритмами автообнаружения, как плата VGA). Таким обра-
зом, чтобы использовать плату IBM 8514, переменной GraphDriver
при вызове InitGraph нужно присвоить значение IBM8514 (которое
определено в модуле Graph). При работе с платой IBM 8514 не сле-
дует использовать с InitGraph DetectGraph или DETECT (если только
вы не хотите эмулировать режим VGA).
Для платы IBM 8514 поддерживаются следующие режимы: IBM8514LO
(640х480 элементов изображения) и IBM8514HI (1024х768 элементов
изображения). Обе константы режима определены в интерфейсной час-
ти GRAPH.TPU.
Для определения цветов в плате IBM 8514 используются три
6-битовых значения. Для каждого определяемого цвета имеются 6-би-
товые компоненты Red (красный), Green (зеленый) и Blue (голубой).
Для того, чтобы при работе с графической платой IBM 8514 пользо-
ватель мог задавать цвета, в библиотеку BGI добавлена новая прог-
рамма. Эта программа определяется в модуле GRAPH.TPU следующим
образом:
procedure SetRGBPalette(ColorNum, Red, Green, Blue: Word);
Аргумент ColorNum задает запись палитры, которую нужно загру-
зить. Этот аргумент представляет собой целое значение в диапазоне
от 0 до 255 (дес.). Аргументы Red, Green и Blue определяют компо-
ненты цветов в записи палитры. Используется только младший байт
этих значений и только 6 старших битов этого байта загружаются в
палитру.
Другие программы, модифицирующие палитру (SetAllPalette,
SetPalette, GetPalette), при работе с графической платой IBM 8514
использовать не следует.
Для совместимости с графическими адаптерами фирмы IBM драйве-
ры формата BGI определяют для первых 16 цветов палитры IBM 8514
значения цветов, принятые по умолчанию для адаптеров EGA/VGA. Эти
значения могут использоваться в неизмененном виде или модифициро-
ваться с помощью процедуры SetGRBPalette.
Система координат
По соглашению верхний левый угол экрана имеет координату
(0,0). У более правого столбца координата х больше, у более ниж-
ней строки больше координата y. То есть координата х увеличивает-
ся при перемещении вправо, а координата y - при перемещении вниз.
Таким образом координаты каждого из четырех углов и конкретной
точки (середины экрана) будут выглядеть следующим образом:
(0,0) (319,0)
------------------------
¦ ¦
¦ (159,99) ¦
¦ . ¦
¦ ¦
¦ ¦
¦ ¦
L------------------------
(0,199) (319,199)
Рис. 19.1 Экран с координатами xy.
Текущий указатель
Понятие текущего указателя используется во многих графичес-
ких системах. Понятие текущего указателя аналогично понятию кур-
сора для текстового режима, за исключением того, что текущий ука-
затель невидим.
Write('ABC');
В текстовом режиме предшествующий оператор Write оставит
курсор в колонке, непосредственно следующим за буквой C. Если
буква C была введена в колонке 80, то курсор перейдет на колонку
1 следующей строки. Если буква c была введена в позиции 80 строки
25, то произойдет пролистывание (прокрутка) экрана вверх на 1
строку и курсор будет находится в 1 позиции 25 строки.
MoveTo(0,0);
LineTo(20,20)
В графическом режиме данный оператор LinеТо оставит текущий
указатель в последней заданной точке (20,20). Если действует ре-
жим отсечения, то реально выводимая прямая будет отсечена до те-
кущей точки. Заметим, что текущий указатель никогда не отсекает-
ся.
Команда МоvеТо является эквивалентом команды GotoXY. Единс-
твенное ее назначение - это перемещение текущего указателя. Пере-
мещение текущего указателя может использоваться только в следую-
щих командах, использующих текущий указатель: MoveTo, InitGraph,
MoveRel, LineTo, LineRel, OutText, SetGraphMode, ClearDevice,
SetViewPort и ClearViewPort. Последние 5 из них перемещают теку-
щий указатель в точку (0,0).
Текст
В графическом режиме для вывода текста используется шрифт с
растром 8х8 и несколько векторных шрифтов. Растровый символ зада-
ется с помощью матрицы элементов изображения. Векторный шрифт за-
дается рядом векторов, которые указывают графической системе, как
рисовать шрифт.
Преимущество использования векторных шрифтов становится оче-
видным, когда вы начинаете рисовать большие символы. Поскольку
штриховой шрифт задается векторами, то при увеличении шрифта ка-
чество и разрешение остаются, тем не менее, хорошими.
Когда увеличивается растровый шрифт, то матрица умножается
на масштабный коэффициент, а когда этот масштабный коэффициент
увеличивается, разрешение у символов становится более грубым. Для
маленьких шрифтов растровый шрифт должен быть достаточно приемле-
мым, но для больших шрифтов вы, вероятно, захотите выбрать век-
торный шрифт.
Выравнивание графического текста управляется процедурой
SetTextJustify. Масштабирование и выбор шрифта осуществляется с
помощью процедуры SetTextStyle. Графический текст выводится с по-
мощью процедур ОutText или ОutTextХY. Запрос о текущих установ-
ленных для текста параметрах выполняется с помощью обращения к
процедуре GetTextSettings. Векторные шрифты хранятся каждый в от-
дельном файле на диске и должны присутствовать там во время рабо-
ты (при вызове процедуры SetTextStyle). Размер векторного шрифта
можно настроить с помощью процедуры SetUserCharSize. Файлы шриф-
тов (которые имеют расширение .CHR) могут загружаться с диска ав-
томатически модулем Graph, или их можно компоновать с программой
пользователя или загружать и "регистрировать" с помощью модуля
Graph.
Для преобразования файла шрифта (или любого другого предназ-
наченного для этой цели двоичного файла данных) в файл .OBJ, ко-
торый можно компоновать с модулем или программой с помощью дирек-
тивы компилятора $L в Borland Pascal предусмотрена специальная
утилита BINOBJ.EXE. При этом становится возможным поместить все
файлы шрифтов в выполняемый файл .EXE (см. комментарии в начале
примера программы BGILINK.PAS на дистрибутивном диске).
Графические изображения и их виды
Для вычерчивания и закрашивания графических изображения,
включая точки, прямые, окружности, дуги, эллипсы, прямоугольники,
многоугольники, штриховку, трехмерную штриховку и секторы, имеет-
ся целый ряд обеспечивающих программ. Для управления видом линии
- будет она тонкой или толстой, непрерывной или состоящей из то-
чек, или же построенной по вашему собственному образцу - можно
использовать процедуру SetLineStyle.
Для закрашивания области или многоугольника пересекающейся
штриховкой или чем-либо более сложным можно использовать процеду-
ры SetFillStyle, SetFloodPattern, FillPoly и FloodFill.
Области просмотра и двоичные образы
Процедура ViewPoint позволяет всем командам вывода работать
в прямоугольной области экрана. Графики, прямые и другие графи-
ческие изображения (весь графический вывод) связывается с об-
ластью просмотра, пока эта область не изменяется. Предусмотрены
программы для очистки области просмотра и считывания ее текущих
определений. Если задан режим отсечения, то весь графический вы-
вод отсечется до текущей точки. Заметим, что текущий указатель
никогда не отсекается.
Для считывания и вывода элементов изображения предусмотрены
процедуры GetPixel и Putpixel. Чтобы сохранить и восстановить на
экране прямоугольную область, можно использовать процедуры
GetImage и PutImage. Они обеспечивают полное выполнение операций
процедуры ВitВlt (нормальное, хоr, оr, аnd, nоt).
Поддержка страниц и цветов
Имеется много других поддерживающих программ, включая под-
держку для нескольких графических страниц (только для адаптеров
EGA, VGA и Неrcules; это особенно полезно при использовании в
мультипликации), палитры, цвета и так далее.
Обработка ошибок
Внутренние ошибки модуля Graph возвращаются функцией
GraphResult. Эта функция возвращает код ошибки, показывающий сос-
тояние последней графической операции. Коды возврата приведены
в разделе по GraphResult в Главе 1 ("Справочник по библиотеки")
"Справочного руководства программиста".
Значение кода возврата для функции GraphResult устанавлива-
ется следующими процедурами:
DetectGraph SetTextStile SetAllPalette
InitGraph SetGraphMode SetFillPattern
FloodFill CloseGraph SetFillStyle
FillPoly GetGraphMode SetGraphBufSize
DrawPoly ImageSize SetGraphMode
Bar InstallUserDriver SetLineStyle
Bаr3D InstallUserFont SetPalette
PieSlice RegisterBGIDriver SetTextJustify
ClearViewPort RegisterGBIFont
Заметим, что функция GraphResult после обращения к ней сбра-
сывает код ошибки в 0. Таким образом, пользователь должен сохра-
нить значение кода ошибки во временной переменной и затем прове-
рить его.
Начало работы
Приведем пример простой графической программы:
1 program GraphTest;
2 uses
3 Graph;
4 var
5 GraphDriver : integer;
6 GraphMode : integer;
7 ErrorCode : integer;
8 begin
9 GraphDriver := Detect; { Установить флаг: выполнить
распознавание }
10 InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS');
11 ErrorCode := GraphResult;
12 if ErrorCode <> grOk then { ошибка? }
13 begin
14 Writeln('Ошибка графики: ',GraphErrorMsg(ErrorCode);
15 Writeln('Программа аварийно завершила работу...');
16 Halt(1);
17 end;
18 Rectangle(0, 0, GetMaxX, GetMaxY); { нарисовать рамку
размером в экран }
19 SetTextJustify(CenterText, CenterText); { центрирова-
ние текста }
20 SetTextStyle(DefaultFont, HorizDir, 3);
21 OutTextXY(GetMaxX div 2, GetMaxY div 2, { центр экрана }
22 'Графический интерфейс фирмы Borland (BGI)');
23 Readln;
24 CloseGraph;
25 end. { GraphTest }
Программа начинается с обращения к процедуре InitGraph, ко-
торая автоматически проверяет наличие аппаратуры и загружает со-
ответствующий графический драйвер (находящийся в каталоге C:
DRIVERS). Если графическая аппаратура не распознана или в процес-
се инициализации произошла ошибка, то на экран выводится сообще-
ние об ошибке и программа прекращает работу. В противном случае
вдоль краев экрана рисуется прямоугольник и в центре экрана выво-
дится текст.
Плата AT&T 400 или IBM 8514 не распознается автоматически.
Тем не менее, вы можете пользоваться драйвером графики AT&T путем
отмены автоматической проверки, пересылки исполняемого кода драй-
вера AT&T процедуре InitGraph и установки допустимого графическо-
го режима. Замените 8 и 9 строку в предыдущем примере следующими
тремя строками:
GraphDriver := ATT400;
GraphMode := ATT400Hi;
InitGraph(GraphDriver, GraphMode, 'C:\BP\BGI');
Это укажет графической системе на необходимость загрузки
драйвера устройства AT&T400, расположенного в каталоге C:\BP\BGI,
и установит графический режим 640 на 400.
Приведем еще один пример, который показывает, как можно пе-
реключаться между графическим и текстовым режимами:
1 program GraphTest;
2 uses
3 Graph;
4 var
5 GraphDriver : integer;
6 GraphMode : integer;
7 ErrorCode : integer;
8 begin
9 GraphDriver := Detect; { Установить флаг: выполнить
распознавание }
10 InitGraph(GraphDriver, GraphMode, 'C:\DRIVERS');
11 ErrorCode := GraphResult;
12 if ErrorCode <> grOk then { ошибка? }
13 begin
14 Writeln('Ошибка графики: ',GraphErrorMsg(ErrorCode);
15 Writeln('Программа аварийно завершила работу...');
16 Helt(1);
17 end;
18 OutText('Графический режим. Нажмите <RETURN>');
19 Readln;
20 RestoreCrtMode;
21 Write('Текстовый режим. Нажмите <RETURN>');
22 Readln;
23 SetGraphMode(GraphMode);
24 OutText('Снова графический режим. Нажмите <RETURN>');
25 Readln;
26 CloseGraph;
27 end. { GraphTest }
Заметим, что вызов процедуры SetGraphMode на строке 23 сбра-
сывает все графические параметры (палитра, текущий указатель, ос-
новной и фоновый цвета и т.д.) и им присваиваются принятые по
умолчанию значения.
Вызов CloseGraph восстанавливает первоначально обнаруженный
видеорежим (InitGraph) и освобождает память, используемую графи-
ческим драйвером.
Пользовательские программы управления динамически распределяемой памятью
Для модуля Graph предусмотрены две программы управления ди-
намически распределяемой областью GraphFrееМем и GraphGetМем.
Первая из них освобождает память, распределенную для драйверов, а
вторая - распределяет память для драйверов графических устройств.
Стандартные программы имеют следующий вид:
procedure GraphGetMem(var P : Pointer; Size : word);
{ выделить память для драйверов графических устройств }
procedure GraphFreeMem(var P : Pointer; Size : word);
{ освободить память для драйверов графических устройств }
В модуле Graph имеются два указателя, которые по умолчанию
указывают на две описанные здесь стандартные подпрограммы. Эти
указатель определяются следующим образом:
var
GraphGetMemPtr : pointer;
{ указатель на программу распределения памяти }
GraphFreeMemPtr : pointer;
{ указатель на программу освобождения памяти }
Во время инициализации модуля Graph эти указатели ссылаются
на стандартные графические программы распределения/освобождения,
которые определяются в секции реализации модуля Graph. Память
распределятся в трех различных целях:
* для многоцелевых графических буферов, размер которых уста-
навливается вызовов SegGraphBufSize (по умолчанию это 4К);
* для драйвера устройства, загружаемого InitGraph (файлы
*.BGI);
* для файла векторного шрифта, загруженного SetTextStyle
(файлы *.CHR).
Графический буфер всегда выделяется в динамически распреде-
ляемой области памяти. Память для драйвера устройства выделяется
в динамической памяти, если программа не загружает его или не
компонуется с ним вызовом RegisterBGIdriver. При выборе векторно-
го шрифта с помощью SetTextStyle также выделяется память в дина-
мически распределяемой области (если ваша программа не компонует-
ся со шрифтом и не использует RegisterBGIfont).
Чтобы задать ваше собственное управление памятью, в модуле
Graph вы можете изменить значения этих указателей так, чтобы они
ссылались на ваши собственные программы. Программы, заданные
пользователем, должны иметь тот же список параметров, что и стан-
дартные программы, и должны иметь дальний тип вызова. Приведем
далее пример заданных пользователем программ распределения и ос-
вобождения памяти. Заметим, что при использовании процедуры Eхit
автоматически вызывается процедура CloseGraph.
program UserHeapManegement;
{ программа показывает, как пользователь может работать с
подпрограммами управления динамически распределяемой об-
ластью памяти, используемыми в модуле Graph }
uses
Graph;
var
GraphDriver, GraphMode : Integer;
ErrorCode : Integer; { используется для
сохранения кода возврата функции GraphResult }
PreGraphExitProc : Pointer { используется для сох-
ранения исходной процедуры выхода }
{ процедуры пользователя должны использовать дальний тип
обращения }
procedure MyGetMem(var P : Pointer; Size : word); far;
{ выделить память для драйверов графических устройств }
begin
Write('Была вызвана процедура ',
'MyGetMem, нажмите <Enter>:');
GetMem(P, Size);
end; { MyGetMem }
procedure MyFreeMem(ver P : Pointer; Size : word); far;
{ освободить память, занятую драйверами графических
устройств }
begin
RestoreCRTMode;
Write('Была вызвана процедура MyFreeMem, нажмите ',
'<Enter>:'); Readln;
if P <> Nil Then { не освобождать пустые указатели }
begin
FreeMem(P, Size);
P := Nil;
end; { MyFreeMem }
procedure MyExitProc; far;
{ процедура всегда получает вызов при прекращении работы
программы }
begin
ExitProc := PreGraphExitProc; { восстановить исходную
процедуру выхода }
CloseGraph; { очистить динамически распределяемую
область }
end; { MyExitProc }
begin
{ инициализировать программу очистки памяти }
PreGraphExitProc := ExitProc;
ExitProc := @MyExitProc;
GraphGetMemPtr := @MyGetMem ; { заменить распределение
памяти }
GraphFreeMemPtr := @MyFreeMem ; { заменить освобождение
памяти }
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, '');
ErrorCode := GraphResult;
if ErrorCode <> grOk then
begin
Writeln('Графическая ошибка: ' GraphErrorMsg(ErrorCode);
Readln;
Halt(1);
end;
Line(0, 0, GetMaxX, GetMaxY);
OutText(1, 1, 'Нажмите клавишу <Enter>:');
Readln;
end. { UserHeapManegement }
Если целевой платформой является защищенный режим DOS, то
при использовании подобных программ следует иметь в виду следую-
щее: вы должны обеспечить, что любой возвращаемый GetMem указа-
тель должен иметь нулевое смещение. Сделать это можно с помощью
функции GlobalAllocPtr:
procedure MyGetMem(var P: Pointer; Size: Word); far;
var
P: Pointer;
bagin
P:= GlobalAllocPtr(HeapAllocFlags, Size);
GetMem(P, 4096);
end; { MyGetMem }
Процедуры модуля Graph
Таблица 19.3
--------------------T-------------------------------------------
¦ Подпрограмма ¦ Описание ¦
+-------------------+-------------------------------------------+
¦ Arс ¦ Рисует дугу окружности от начального угла¦
¦ ¦ до конечного угла; точка (x,y) берется в¦
¦ ¦ качестве центра окружности. ¦
+-------------------+-------------------------------------------+
¦ Bаr ¦ Рисует столбец, используя текущий тип зак-¦
¦ ¦ раски. ¦
+-------------------+-------------------------------------------+
¦ Bаr3D ¦ Рисует трехмерный столбец, используя те-¦
¦ ¦ кущий тип закраски. ¦
+-------------------+-------------------------------------------+
¦ Circlе ¦ Рисует окружность с центром в точке (x,y).¦
+-------------------+-------------------------------------------+
¦ ClearDeviсе ¦ Сбрасывает текущие параметры, установлен-¦
¦ ¦ ные для устройства вывода, и подготавлива-¦
¦ ¦ ет его для вывода. ¦
+-------------------+-------------------------------------------+
¦ ClearViewPort ¦ Очищает текущую область просмотра (окно¦
¦ ¦ экрана). ¦
+-------------------+-------------------------------------------+
¦ CloseGraph ¦ Выполняет останов графической системы. ¦
+-------------------+-------------------------------------------+
¦ DetectGraph ¦ Распознает аппаратуру и определяет, какой¦
¦ ¦ графический драйвер и режим нужно исполь-¦
¦ ¦ зовать. ¦
+-------------------+-------------------------------------------+
¦ DrawPoly ¦ Рисует многоугольник, используя текущий¦
¦ ¦ тип линии и цвет. ¦
+-------------------+-------------------------------------------+
¦ Ellipse ¦ Рисует эллиптическую дугу от начального¦
¦ ¦ угла до конечного угла, использую (Х,Y),¦
¦ ¦ как точку центра. ¦
+-------------------+-------------------------------------------+
¦ FillPoly ¦ Закрашивает многоугольник, используя пре-¦
¦ ¦ образователь развертки. ¦
+-------------------+-------------------------------------------+
¦ FloodFill ¦ Закрашивает ограниченную область, исполь-¦
¦ ¦ зуя текущий образец закраски. ¦
+-------------------+-------------------------------------------+
¦ GetArcCoords ¦ Позволяет пользователю запрашивать коор-¦
¦ ¦ динаты последней команды Arс. ¦
+-------------------+-------------------------------------------+
¦ GetAspectRatio ¦ Возвращает действующее разрешение графи- ¦
¦ ¦ ческого экрана, на основе которого может¦
¦ ¦ быть вычислен коэффициент относительного¦
¦ ¦ удлинения (Хаsр,Yаsр). ¦
+-------------------+-------------------------------------------+
¦ GetBkСоlor ¦ Возвращает текущий фоновый цвет. ¦
+-------------------+-------------------------------------------+
¦ GetCоlor ¦ Возвращает текущий цвет рисунка. ¦
+-------------------+-------------------------------------------+
¦ GetDefaultPalette¦ В записи типа PaletteType возвращает ис-¦
¦ ¦ пользуемую по умолчанию палитру. ¦
+-------------------+-------------------------------------------+
¦ GetDriverName ¦ Возвращает строку, содержащую имя те-¦
¦ ¦ кущего драйвера. ¦
+-------------------+-------------------------------------------+
¦ GetFillPattern ¦ Возвращает последний образец заполнителя,¦
¦ ¦ установленный с помощью обращения к проце-¦
¦ ¦ дуре SetFillPattern. ¦
+-------------------+-------------------------------------------+
¦ GetFillSetting ¦ Позволяет пользователю выполнить запрос о¦
¦ ¦ текущем образце и цвете закраски, установ-¦
¦ ¦ ленными с помощью процедур SetFillStyle и¦
¦ ¦ SetFillPattern. ¦
+-------------------+-------------------------------------------+
¦ GetImage ¦ Сохраняет двоичный образ заданной области¦
¦ ¦ в буфере. ¦
+-------------------+-------------------------------------------+
¦ GetGraphMode ¦ Возвращает текущий графический режим. ¦
+-------------------+-------------------------------------------+
¦ GetLineSettings ¦ Возвращает текущий тип линии, образец ли-¦
¦ ¦ нии и толщину линии, заданные процедурой¦
¦ ¦ SetLineStyle. ¦
+-------------------+-------------------------------------------+
¦ GetMaxColor ¦ Возвращает максимальное значение цвета,¦
¦ ¦ которое можно передать процедуре SetColor.¦
+-------------------+-------------------------------------------+
¦ GetMAxMode ¦ Возвращает максимальный номер режима для¦
¦ ¦ текущего загруженного драйвера. ¦
+-------------------+-------------------------------------------+
¦ GetМахХ ¦ Возвращает для текущего графического драй-¦
¦ ¦ вера и режима самую правую колонку (разре-¦
¦ ¦ шение по х). ¦
+-------------------+-------------------------------------------+
¦ GetМахY ¦ Возвращает для текущего графического драй-¦
¦ ¦ вера и режима самую нижнюю строку (разре-¦
¦ ¦ шение по у). ¦
+-------------------+-------------------------------------------+
¦ GetPaletteSize ¦ Возвращает размер таблицы просмотра палит-¦
¦ ¦ ры. ¦
+-------------------+-------------------------------------------+
¦ GetPixel ¦ Возвращает значение элемента изображения в¦
¦ ¦ точке Х,Y. ¦
+-------------------+-------------------------------------------+
¦ GetPalette ¦ Возвращает текущую палитру и ее размер. ¦
+-------------------+-------------------------------------------+
¦ GetTextSettings ¦ Возвращает текущий текстовый шрифт, нап-¦
¦ ¦ равление, размер и выравнивание для него,¦
¦ ¦ установленные с помощью процедур¦
¦ ¦ SetTextStyle и SetTextJustify. ¦
+-------------------+-------------------------------------------+
¦ GetViewSettings ¦ Позволяет пользователю выдать запрос о те-¦
¦ ¦ кущей области изображения и параметрах от-¦
¦ ¦ сечения изображения. ¦
+-------------------+-------------------------------------------+
¦ GetХ ¦ Возвращает координату Х текущей позиции¦
¦ ¦ (текущего указателя). ¦
+-------------------+-------------------------------------------+
¦ GetY ¦ Возвращает координату Y текущей позиции¦
¦ ¦ (текущего указателя). ¦
+-------------------+-------------------------------------------+
¦ GraphErrorMsg ¦ Для заданного кода ошибки возвращает стро-¦
¦ ¦ ку сообщения об ошибке. ¦
+-------------------+-------------------------------------------+
¦ GraphResult ¦ Возвращает код ошибки для последней гра-¦
¦ ¦ фической операции. ¦
+-------------------+-------------------------------------------+
¦ InitGraph ¦ Инициализирует графическую систему и пе-¦
¦ ¦ реводит аппаратуру в графический режим. ¦
+-------------------+-------------------------------------------+
¦ ImageSize ¦ Возвращает число байт, которые требуют-¦
¦ ¦ ся для сохранения прямоугольной области¦
¦ ¦ экрана. ¦
+-------------------+-------------------------------------------+
¦ InstallUserDriver¦ Устанавливает добавленный пользователем¦
¦ ¦ драйвер в таблице драйверов устройств BGI.¦
+-------------------+-------------------------------------------+
¦ InstallUserFont ¦ Устанавливает новый файл шрифта, не встро-¦
¦ ¦ енный в графическую систему. ¦
+-------------------+-------------------------------------------+
¦ InitGraph ¦ Инициализирует графическую систему и пере-¦
¦ ¦ водит аппаратные средства в графический¦
¦ ¦ режим. ¦
+-------------------+-------------------------------------------+
¦ Line ¦ Рисует прямую линию из точки (x1,y1) в¦
¦ ¦ (x2,y2). ¦
+-------------------+-------------------------------------------+
¦ LineRel ¦ Рисует прямую линию до точки, представ-¦
¦ ¦ ляющей собой относительное расстояние от¦
¦ ¦ текущего указателя. ¦
+-------------------+-------------------------------------------+
¦ LinеTо ¦ Рисует линию из текущего положения в¦
¦ ¦ точку (x,y). ¦
+-------------------+-------------------------------------------+
¦ МоveRеl ¦ Перемещает текущий указатель на расстоя-¦
¦ ¦ ние, являющееся относительным расстоянием¦
¦ ¦ от текущей позиции. ¦
+-------------------+-------------------------------------------+
¦ МоvеТо ¦ Перемещает текущий указатель в точку¦
¦ ¦ (x,y). ¦
+-------------------+-------------------------------------------+
¦ ОutText ¦ Посылает строку на устройство вывода, на-¦
¦ ¦ чиная с текущего указателя. ¦
+-------------------+-------------------------------------------+
¦ ОutTextХY ¦ Посылает строку на устройство вывода. ¦
+-------------------+-------------------------------------------+
¦ PieSlice ¦ Рисует сектор. Точка (Х,Y) используется в¦
¦ ¦ качестве центра, а сектор рисуется от на-¦
¦ ¦ чального до конечного угла. ¦
+-------------------+-------------------------------------------+
¦ РutImagе ¦ Выводит на экран двоичный образ. ¦
+-------------------+-------------------------------------------+
¦ РutРiхеl ¦ Строит элемент изображения в точке x,y. ¦
+-------------------+-------------------------------------------+
¦ Rесtanglе ¦ Рисует прямоугольник, используя текущий¦
¦ ¦ тип линии и цвет. ¦
+-------------------+-------------------------------------------+
¦ RegisterBGIDriver¦ Регистрирует допустимый драйвер (формата¦
¦ ¦ BGI) в графической системе. ¦
+-------------------+-------------------------------------------+
¦ RegisterBGIFont ¦ Регистрирует в графической системе допус-¦
¦ ¦ тимый (формата BGI) шрифт. ¦
+-------------------+-------------------------------------------+
¦ RеstoreCRTМоdе ¦ Восстанавливает исходный режим экрана,¦
¦ ¦ который был установлен при инициализации¦
¦ ¦ графики. ¦
+-------------------+-------------------------------------------+
¦ SetActivePage ¦ Устанавливает для графического вывода ак-¦
¦ ¦ тивную страницу. ¦
+-------------------+-------------------------------------------+
¦ SetAllPalette ¦ Изменяет все цвета палитры, как было ука-¦
¦ ¦ зано. ¦
+-------------------+-------------------------------------------+
¦ SetAspectRatio ¦ Изменяет принятый по умолчанию коэффициент¦
¦ ¦ относительного удлинения. ¦
+-------------------+-------------------------------------------+
¦ SetBkСоlor ¦ Используя палитру, устанавливает текущий¦
¦ ¦ фоновый цвет. ¦
+-------------------+-------------------------------------------+
¦ SetColor ¦ Используя палитру, устанавливает текущий¦
¦ ¦ цвет рисунка. ¦
+-------------------+-------------------------------------------+
¦ SetFillPattern ¦ Выбирает образец закраски, заданный поль-¦
¦ ¦ зователем. ¦
+-------------------+-------------------------------------------+
¦ SetFillStyle ¦ Устанавливает образец закраски и ее цвет. ¦
+-------------------+-------------------------------------------+
¦ SetGraphBufSize ¦ Позволяет изменить размер буфера, исполь-¦
¦ ¦ зуемого для опроса и закраски. ¦
+-------------------+-------------------------------------------+
¦ SetGraphMode ¦ Переключает систему в графический режим¦
¦ ¦ и очищает экран. ¦
+-------------------+-------------------------------------------+
¦ SetLineStyle ¦ Устанавливает текущий тип линии и ее ши-¦
¦ ¦ рину. ¦
+-------------------+-------------------------------------------+
¦ SetPalette ¦ Изменяет один цвет палитры, заданный пе-¦
¦ ¦ ременными Colornum и Color. ¦
+-------------------+-------------------------------------------+
¦ SetGRBPalette ¦ Позволяет модифицировать записи палит-¦
¦ ¦ ры для драйверов IBM 8514 и VGA. ¦
+-------------------+-------------------------------------------+
¦ SetTextJustify ¦ С помощью ОutTеxt и ОutTехtХY уста-¦
¦ ¦ навливает значения для выравнивания текс-¦
¦ ¦ та. ¦
+-------------------+-------------------------------------------+
¦ SetTextStyle ¦ Задает текущий текстовый шрифт, его тип и¦
¦ ¦ коэффициент размера символа. ¦
+-------------------+-------------------------------------------+
¦ SetUserCharSize ¦ Позволяет вам для векторных шрифтов из-¦
¦ ¦ менить высоту и ширину символа. ¦
+-------------------+-------------------------------------------+
¦ SetViewPort ¦ Для графического вывода устанавливает¦
¦ ¦ текущую область вывода или окно. ¦
+-------------------+-------------------------------------------+
¦ SetVisualPage ¦ Задает визуальный номер графической стра-¦
¦ ¦ ницы. ¦
+-------------------+-------------------------------------------+
¦ SetWriteMode ¦ Устанавливает режим вывода на экран (ко-¦
¦ ¦ пирование или с помощью операции XOR) для¦
¦ ¦ линий, вычерчиваемых процедурами DrawPoly,¦
¦ ¦ Line, LineRel, LineTo, Rectangle. ¦
+-------------------+-------------------------------------------+
¦ TехtНеight ¦ Возвращает высоту страниц в элементах¦
¦ ¦ изображения. ¦
+-------------------+-------------------------------------------+
¦ TехtWidth ¦ Возвращает ширину строки в элементах¦
¦ ¦ изображения. ¦
L-------------------+--------------------------------------------
Подробное описание каждой процедуры и функции дано в Главе 1
("Справочник по библиотеке") "Справочного руководства программис-
та".
Константы, типы и переменные модуля Graph
В модуле Graph имеется много полезных описаний типов и конс-
тант, на которое вы можете ссылаться.
Константы
Константы модуля Graph можно сгруппировать по их назначению.
Подробное описание каждой константы дано в Главе 1 ("Справочник
по библиотеке") "Справочного руководства программиста".
Группы констант модуля Graph Таблица 19.4
--------------------------T-------------------------------------
¦ Группа констант ¦ Описание ¦
+-------------------------+-------------------------------------+
¦ Константы драйверов ¦ Константы, определяющие видеодрайве-¦
¦ и режимов ¦ ры и режимы; используются в подпрог-¦
¦ ¦ раммах InitGraph, DetectGraph и¦
¦ ¦ GetModeRange. ¦
+-------------------------+-------------------------------------+
¦ grXXXX ¦ Константы, идентифицирующие тип¦
¦ ¦ ошибки, возвращаемой GraphResult. ¦
+-------------------------+-------------------------------------+
¦ Константы цветов ¦ Константы, определяющие цвета. Ис-¦
¦ ¦ пользуются в подпрограммах¦
¦ ¦ SetPalette и SetAllPalette. ¦
+-------------------------+-------------------------------------+
¦ Константы цветов ¦ Константы, используемые в подпрог-¦
¦ для SetRGBPalette ¦ рамме SetGRBPalette для выбора на¦
¦ ¦ IBM 8514 стандартных цветов EGA. ¦
+-------------------------+-------------------------------------+
¦ Константы стиля ¦ Константы, используемые для опреде-¦
¦ линии ¦ ления стиля и толщины линии; исполь-¦
¦ ¦ зуются с GetLineSettings и¦
¦ ¦ SetLineStyle. ¦
+-------------------------+-------------------------------------+
¦ Константы шрифта ¦ Используются для идентификации шриф-¦
¦ ¦ тов в подпрограммах GetTextSettings¦
¦ ¦ и SetTextSetting. ¦
+-------------------------+-------------------------------------+
¦ Константы выравнивания¦ Константы, управляющие горизонталь-¦
¦ ¦ ным и вертикальным выравниванием.¦
¦ ¦ Используются в SetTextJustify. ¦
+-------------------------+-------------------------------------+
¦ Константы отсечений ¦ Константы, управляющие отсечением.¦
¦ ¦ Используются в SetViewPort. ¦
+-------------------------+-------------------------------------+
¦ Константы столбцов ¦ Управляют изображением "вершины"¦
¦ ¦ трехмерного столбца; используются в¦
¦ ¦ Bar3D. ¦
+-------------------------+-------------------------------------+
¦ Образцы закраски ¦ Определяют образец закраски области.¦
¦ ¦ Используются в GetFillSettings и¦
¦ ¦ SetFillStyle. ¦
+-------------------------+-------------------------------------+
¦ Операции BitBlt ¦ Операции (копирование, xor, or, and,¦
¦ ¦ not), которые используются в¦
¦ ¦ PutImage и SetWriteMode. ¦
+-------------------------+-------------------------------------+
¦ MaxColors ¦ Константы, определяющие максимальное¦
¦ ¦ число цветов в GetPalette,¦
¦ ¦ GetDefaultPalette и SetAllPalette. ¦
L-------------------------+--------------------------------------
Типы
В модуле Graph определены следующие типы:
Типы модуля Graph Таблица 19.5
-------------------------T--------------------------------------
¦ Тип ¦ Описание ¦
+------------------------+--------------------------------------+
¦ PaletteType ¦ Запись, определяющая размер и цвета¦
¦ ¦ палитры; используется в GetPalette,¦
¦ ¦ GetDefaultPalette и SetAllPalette. ¦
+------------------------+--------------------------------------+
¦ LineSettingsType ¦ Запись, определяющая стиль, образец и¦
¦ ¦ толщину линии; используетcя ¦
¦ ¦ GetLineSettings. ¦
+------------------------+--------------------------------------+
¦ FillSettingsType ¦ Запись, определяющая текст. Использу-¦
¦ ¦ ется в GetTextSettings. ¦
+------------------------+--------------------------------------+
¦ FillPatternType ¦ Запись, определяющая заданный поль-¦
¦ ¦ зователем образец закраски. Данная¦
¦ ¦ запись используется процедурами¦
¦ ¦ GetFillPattern и SetFillPattern. ¦
+------------------------+--------------------------------------+
¦ PointType ¦ Тип, определенный для вашего удобст-¦
¦ ¦ ва. ¦
+------------------------+--------------------------------------+
¦ ViewPortType ¦ Запись, сообщающая о состоянии теку-¦
¦ ¦ щей области просмотра; используется¦
¦ ¦ GetViewSettings. ¦
+------------------------+--------------------------------------+
¦ ArcCoordsType ¦ Запись для получения информации о¦
¦ ¦ последнем вызове Arc или Ellipse; ис-¦
¦ ¦ пользуется GetArcCoords. ¦
L------------------------+---------------------------------------
Переменные
Модуль Graph содержит две переменные, которые вы можете ис-
пользовать: GraphGetMemPtr и GraphFreeMemPtr. Они применяются в
подпрограммах управления динамически распределяемой областью па-
мяти. Прочитать о них можно в Главе 1 ("Справочник по библиоте-
ке") "Справочного руководства программиста".
Назад | Содержание | Вперед