| 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. Далее описаны в алфавитном порядке сначала процедуры, а затем функции модуля. 
 
 |