16.4. Модуль Graph
Модуль Graph содержит типы, константы, переменные и подпрограммы, позволяющие программисту создавать изображения с использованием широкого набора графических адаптеров (CGA, MCGA, EGA, VGA, Hercules, AT&T400, 3270РС, IBM8514).
При работе с этими адаптерами весь экран разбивается на отдельные "точки" - пиксели, которые можно закрасить в тот или иной цвет. Каждый пиксель имеет две координаты: X и Y. Координата X увеличивается по горизонтали слева направо, начиная от нуля, координата Y увеличивается по вертикали сверху вниз, также начиная от нуля. Таким образом левый верхний пиксель имеет координаты (0,0). Количество пикселей зависит от типа адаптера и режима его работы (см. табл. 17).
Для формирования изображений выделяется одна или несколько (до четырех) страниц видеопамяти. В каждый момент времени лишь одна из них является видимой, передающей изображение на экран дисплея, и одна является активной - на ней можно формировать изображение. Видимая и активная страницы могут совпадать и не совпадать, так что можно, например, сначала подготовить изображение на какой-либо странице, а затем вывести его на экран.
Так же как и в текстовом режиме при использовании модуля Crt, модуль Graph позволяет выделять окна на экране дисплея. Графические процедуры и функции в этом случае используют координаты в пределах окна, причем левый верхний угол окна получает координаты (0,0).
В отличие от текстового режима в графическом режиме курсор, определяющий место на экране, с которого начинается изображение фигуры или текста, невидим, однако его можно переместить в любую точку окна экрана, посмотреть значения координат курсора и т. д.
Стандартные типы, используемые в модуле, позволяют компактно представить информацию, необходимую для графических изображений. Эти типы приведены в табл. 16.
Таблица 16. Стандартные типы модуля Graph
Имя Определение
Цвета палитры
PaletteType record
Size: Byte; {Количество цветов}
Colors: array[0..MaxColors]
of Shortint {используемые цвета}
end;
Характеристики линии
LineSettingsType record
LineStyle: Word; {тип линии}
Pattern: Word; {шаблон линии}
Thickness: Word {толщина линии}
end;
Характеристики текста
TextSettingsType record
Font: Word; {тип шрифта}
Direction: Word; {направление текста}
CharSize: Word; {размер символов}
Horiz: Word; {гориз. выравнивание}
Vert: Word {вертик. выравнивание}
end;
Орнамент и цвет заполнения
FillSettingsType record
Pattern: Word; {шаблон}
Color: Word {цвет заполнения}
end;
Задаваемый пользователем орнамент заполнения
FillPatternType array [ 1. . 8 ] of Byte;
Координаты точки
PointType record
X,Y: Integer
end;
Окно вывода графической информации
ViewPortType record
X1,Y1,X2,Y2: Integer; {координаты окна}
Clip: Boolean. {признак усечения}
end;
Данные о дуге
ArcCoordsType record
X,Y: Integer; {центр дуги}
Xstart,Ystart: Integer; {начало дуги}
Xend,Yend: Integer {конец дуги}
end;
Тип PaletteType содержит количество цветов (Size) и сами цвета (Colors).
Тип LineSettingsType содержит тип линии (см. табл. 23), шаблон (задается пользователем, если выбран тип линии UserBitLn, - см. процедуру SetLineStyle) и толщину линии (см. табл. 24).
Тип TextSettingsType содержит тип шрифта (стандартные шрифты см. в табл. 29), направление размещения текста (по горизонтали или вертикали - см. там же), размер символов, а также выравнивание по горизонтали и вертикали (см. табл. 30).
Тип FillSettingsType содержит код орнамента заполнения фигур (см. табл. 27) и цвет заполнения.
Тип FillPatternType содержит кодировку задаваемого пользователем орнамента заполнения. Величина такого типа содержит информацию о заполнении участка экрана 8x8 пикселей (каждому пикселю отводится один бит информации). Если соответствующий бит содержит 1, пиксель закрашивается в цвет заполнения, в противном случае - в цвет фона.
Тип PointType содержит координаты точки экрана, отсчитываемые в пикселях, причем самая левая или верхняя координата имеет значение 0.
Тип ViewPortType содержит параметры окна экрана (координаты левого верхнего и правого нижнего углов, признак усекания изображаемых фигур - если он равен True, отсекаются участки фигур, не помещающиеся в текущем окне).
Тип ArcCoordsType содержит параметры дуги (центр дуги, начальную и конечную точки, лежащие на дуге).
Список констант модуля, определяющих графический режим, см. в табл. 17.
Таблица 17. Константы графических режимов модуля Graph
Имя |
Значение |
Размер поля |
Палитра |
Число страниц |
АТТ400С0
АТТ400С1
АТТ400С2
АТТ400СЗ
ATT400Med
ATT400Hi
CGAC0
CGAC1
CGAC2
CGAC3
CGAHi
EGALo
EGAHi
EGA64LO
EGA64Hi
EGAMonoHi
HercMonoHi
IBM8514LO
IBM8514Hi
MCGAC0
MCGAC1
MCGAC2
MCGAC3
MCGAMed
MCGAHi
РС3270Hi
VGALo
VGAMed
VGAHi |
0
1
2
3
4
5
0
1
2
3
4
0
1
0
1
0
0
0
0
0
1
2
3
4
5
0
0
1
2 |
320x200
320x200
320x200
320x200
640x200
640x400
320x200
320x200
320x200
320x200
640x200
640x200
640x350
640x200
640x350
640x350
720x348
640x480
1024x768
320x200
320x200
320x200
320x200
640x200
640x480
720x350
640x200
640x350
640x480 |
С0
С1
С2
СЗ
2 цвета
2 цвета
С0
C1
С2
С3
2 цвета
16 цветов
16 цветов
16 цветов
4 цвета
2 цвета
2 цвета
256 цветов
256 цветов
С0
С1
С2
С3
2 цвета
2 цвета
2 цвета
16 цветов
16 цветов
16 цветов |
1
1
1
1
1
1
1
1
1
1
1
4
2
1
1
1 или 2
2
1
1
1
1
1
1
1
4
2
1 |
В этой таблице палитра СО включает цвета: светло-зеленый, розовый и желтый, палитра С1 - цвета светло-голубой, светло-фиолетовый и белый, палитра С2 - цвета зеленый, красный и коричневый, палитра СЗ - голубой, фиолетовый и светло-серый. Остальные константы модуля приведены в табл. 18-30.
Таблица 18. Коды драйверов графических устройств
Имя |
Значение |
Назначение |
Detect
CGA
MCGA
EGA
EGA64
EGAMono
IBM8514
HercMono
АТТ400
VGA
PC3270
CurrentDriver |
0
1
2
3
4
5
6
7
8
9
10
-128 |
Автоматический выбор драйвера
Текущий драйвер |
Таблица 19. Коды ошибок, возвращаемые функцией GraphResult
Имя |
Значение |
Назначение |
grOk
grNoInitGraph
grNotDetected
grFileNotFound
grInvalidDriver
grNoLoadMem
grNoScanMem
grNoFloodMem
grFontNotFound
grNoFontMem
grInvalidMode
grError
grIOerror
grInvalidFont
grInvalidFontNum |
0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14 |
Успешное выполнение
Не установлен графический режим
Графический режим не предусмотрен
Нет драйвера устройства
Ошибка в драйвере
Нет памяти для загрузки драйвера
Нет памяти для сканирования
Нет памяти для закраски
Не найден файл со шрифтом
Нет памяти для загрузки шрифта
Недопустимый режим для выбранного драйвера
Ошибка графической системы
Ошибка ввода-вывода графической системы
Ошибка в файле со шрифтом
Неверный номер шрифта |
Таблица 20. Коды цветов (для процедур SetPalette и SetAllPalette)
Имя |
Значение |
Назначение |
Black
Blue
Green
Cyan
Red
Magenta
Brown
LightGray
DarkGray
UghtBlue
LightGreen
LightCyan
LightRed
LightMagenta
Yellow
White |
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
Черный
Синий
Зеленый
Голубой
Красный
Фиолетовый
Коричневый
Светло-серый
Темно-серый
Светло-синий
Светло-зеленый
Светло-голубой
Розовый
Светло-фиолетовый
Желтый
Белый |
Таблица 21. Коды цветов (для процедуры SetRGBPalette)
Имя |
Значение |
Назначение |
EGABlack
EGABlue
EGAGreen
EGACyan
EGARed
EGAMagenta
EGABrown
EGALightGray
EGADarkGray
EGALightBlue
EGALightGreen
EGALightCyan
EGALightRed
EGALightMagenta
EGAYellow
EGAWhite |
0
1
2
3
4
5
20
7
56
57
58
59
60
61
62
63 |
Черный
Синий
Зеленый
Голубой
Красный
Фиолетовый
Коричневый
Светло-серый
Темно-серый
Светло-синий
Светло-зеленый
Светло-голубой
Розовый
Светло-фиолетовый
Желтый
Белый |
Таблица 22. Максимальное количество цветов в палитре
Имя |
Значение |
MaxColors |
15 |
Таблица 23. Коды типов линий для процедур GetLineStyle, SetLineStyle и GetLineSettings
Имя |
Значение |
Назначение |
SolidLn
DottedLn
CenterLn
DashedLn
UserBitLn |
0
1
2
3
4 |
Сплошная
Пунктирная
Штрихпунктирная
Штриховая
Заданная пользователем |
Таблица 24. Толщины линий для процедур GetLineStyle, SetLineStyle и GetLineSettings
Имя |
Значение |
Назначение |
NormWidth
ThickWidth |
1
3 |
Нормальная
Толстая |
Таблица 25. Управление отсечением фигур для процедуры SetViewPort
Имя |
Значение |
Назначение |
ClipOn
ClipOff |
True
False |
Отсекаются не помещающиеся в окне части фигур
He отсекаются не помещающиеся в окне части фигур |
Таблица 26. Константы изображения параллелепипеда для процедуры Ваr3D
Имя |
Значение |
Назначение |
TopOn
TopOff |
True
False |
Закрашивается верхняя грань
He закрашивается верхняя грань |
Таблица 27. Константы орнамента заполнения для процедур GetFillStyle и SetFillStyle
Имя |
Значение |
Назначение |
EmptyFill
SolidFill
LineFill
LtSlashFill
SlashFill
BkSlashFill
LtBkSlashFill
HatchFill
XHatchFill
InterleaveFill
WideDotFill
CloseDotFill
UserFill |
0
1
2
3
4
5
6
7
8
9
10
11
12 |
Заполнение цветом фона
Однородное заполнение цветом
Заполнение ---
Заполнение ///
Заполнение /// толстыми линиями
Заполнение \\\ толстыми линиями
Заполнение \\\
Заполнение клеткой
Заполнение косой клеткой
Заполнение частой сеткой
Заполнение редкими точками
Заполнение частыми точками
Заполнение определяется пользователем |
Таблица 28. Константы битовых операций для процедур Putlmage и SetWriteMode
Имя |
Значение |
Назначение |
CopyPut
XORPut
OrPut
AndPut
NotPut |
0
1
2
3
4 |
MOV
XOR
OR только для PutImage
AND только для PutImage
NOT только для PutImage |
Константы битовых операций для процедур Putlmage и SetWriteMode означают, каким образом передается графическая информация из буфера на внешнее устройство. Информация передается отдельными байтами аналогично выполнению соответствующих команд ассемблера.
Таблица 29. Характеристики шрифтов для процедур SetTextStyle и GetTextStyle
Имя |
Значение |
Назначение |
DefaultFont
TriplexFont
SmallFont
Sans Serif Font
GothicFont
HorizDir
VertDir
UserCharSize |
0
1
2
3
4
0
1
0 |
Коды шрифтов
Горизонтальное расположение строк
Вертикальное расположение строк
Размер шрифта задается пользователем |
Таблица 30. Константы выравнивания текста для процедуры SetTextJustify
Имя |
Значение |
Назначение |
LeftText
CenterText
RightText
BottomText
TopText |
0
1
2
0
2 |
Левое выравнивание
Выравнивание по центру
Правое выравнивание
Нижнее выравнивание
Верхнее выравнивание |
Таблица 31. Переменные модуля Graph (указатели на динамически распределяемую память)
Имя |
Тип |
Назначение |
GraphGetMemPtr
GraphFreeMemPtr |
Pointer
Pointer |
Выделяемая область
Освобождаемая область |
Таблица 32. Процедуры и функции
Имя |
Назначение |
Процедуры управления графическим режимом |
CloseGraph
DetectGraph
GetModeRange
GraphDefaults
InitGraph
RestoreCrtMode
SetGraphBufSize
SetGraphMode |
Прекращение работы графического режима
Проверка оборудования и режима
Получение минимального и максимального номера графического режима
Сброс параметров графического режима
Инициализация графического режима
Возвращение в текстовый режим
Изменение размера графического буфера
Вход в графический режим и очистка экрана |
Функции управления графическим режимом |
GetGraphMode
GetMaxMode
GetModeName
GraphErrorMsg
GraphResult
GetDriverName
InstallUserDriver
InstallUserFont
RegisterBGIdriver
RegisterBGIfont |
Получение номера текущего графического режима
Максимальное число режимов текущего драйвера
Получение имени заданного графического режима
Формирование сообщения об ошибке
GraphResult Получение кода ошибки
Получение имени текущего драйвера
Размещение драйвера в таблице
Установка нового шрифта
Регистрация драйвера
Регистрация шрифта |
Процедуры управления экраном, окном, страницей |
ClearDevice
Clear ViewPort
GetAspectRatio
GetViewSettings
SetActivePage
SetAspectRatio
SetViewPort
SetVisualPage |
Очистка графического экрана
Очистка графического окна
Получение относительного масштаба изображения по горизонтали и вертикали
Получение параметров текущего графического окна
Задание активной страницы
Изменение относительного масштаба изображения по горизонтали и вертикали
Задание размеров окна
Задание отображаемой на экране страницы |
Процедуры управления цветом и палитрой |
GetDefaultPalette
GetPalette
SetAllPalette
SetBkColor
SetColor
SetPalette
SetRGBPalette |
Получение исходных параметров палитры
Получение параметров палитры
Задание всех цветов палитры
Задание цвета фона экрана
Задание текущего цвета
Задание одного цвета палитры
Задание палитры для адаптеров IBM-8514 и VGA |
Функции управления цветом и палитрой |
GetBKColor
GetColor
GetMaxColor
GetPaletteSize |
Получение цвета фона
Получение текущего цвета
Получение максимального кода цвета
Получение количества цветов в палитре |
Функции работы с точками |
GetMaxX
GetMaxY
GetPixel
GetX
GetY |
Получение максимального значения координаты X
Получение максимального значения координаты Y
Получение цвета пикселя активной страницы
Получение координаты X текущей позиции на экране
Получение координаты Y текущей позиции на экране |
Процедуры работы с точками |
PutPixel |
Помещение пикселя в активную страницу |
Процедуры работы с линиями |
GetLineSettings
Line
LineRel
LineTo
MoveRel
MoveTo
SetLineStyle
SetWriteMode |
Получение параметров линии
Построение линии от одной точки до другой
Построение линии с относительными координатами
Построение линии с абсолютными координатами
Перемещение указателя в точку с относительным координатами
Перемещение указателя в точку с абсолютными координатами
Задание характеристик линии
Задание способа построения линии |
Процедуры построения фигур из линий |
Ваr
Bar3D
DrawPoly
FillPoly
FloodFill
GetFillPattern
GetFillSettings
Rectangle
SetFillPattern
SetFillStyle |
Построение закрашенного прямоугольника
Построение закрашенного параллелепипеда
Построение многоугольника
Построение закрашенного многоугольника
Заполнение области текущим орнаментом
Получение орнамента заполнения фигур
Получение параметров заполнения фигур
Построение прямоугольника
Задание произвольных параметров заполнения фигур
Задание стандартных параметров заполнения фигур |
Процедуры построения криволинейных фигур |
Arc
Circle
Hllipse
FillEllips
GetArcCoords
PieSlice
Sector |
Построение дуги окружности
Построение окружности
Построение дуги эллипса
Построение закрашенного эллипса
Получение координат последней дуги
Построение закрашенного сектора круга
Построение закрашенного сектора эллипса |
Процедуры работы с текстом |
GetTextSettings
OutText
OutTextXY
SetTextJustify
SetTextStyle
SetUserCharSize |
Получение характеристик текста
Вывод последовательности символов
Вывод последовательности символов, начиная с заданных координат
Задание способа выравнивания текста
Задание типа, начертания шрифта и коэффициента увеличения символов
Задание высоты и ширины символов |
Функции работы с текстом |
TextHeight
TextWidth |
Получение высоты строки в пикселях
Ширина строки в пикселях |
Процедуры обмена с памятью |
Getlmage
Putlmage |
Сохранение изображения в буфере
Вывод изображения из буфера на экран |
Функции обмена с памятью |
ImageSize |
Получение размера требуемой для изображения памяти |
Подавляющее большинство процедур и функций этого модуля можно использовать только после задания графического режима процедурой InitGraph. Далее описаны в алфавитном порядке сначала процедуры, а затем функции модуля.
|