Содержание
1. Теоретические сведения
1.1. Библиотечный модуль Graph.
Для решения графических задач в языке Turbo Pascal предназначен стандартный библиотечный модуль Graph. Модуль Graph представляет собой библиотеку подпрограмм, обеспечивающую полное управление графическими режимами различных адаптеров дисплеев. В нем содержится 79 графических процедур, функций, десятки стандартных констант и типов данных. Все они составляют единый комплекс средств, позволяющих разрабатывать профессиональные программные продукты. Подключение модуля Graph к пользовательской программе осуществляется стандартным способом - с помощью зарезервированного слова USES:
Пример:
USES GRAPH;
После чего все графические средства языка Turbo Pascal доступны пользователю.
Чтобы запустить программу, использующую процедуры модуля Graph, необходимо, чтобы в рабочем каталоге находились соответствующие графические драйверы (файлы с расширением BGI), а если программа использует еще и штриховые шрифты, то необходимо, чтобы там же находились файлы шрифтов (с расширением CHR). Кроме того, в системе программирования (компилятору) должен быть доступен модуль GRAPH.TPU. Файл BGI представляет собой графический интерфейс (Borland Graphic Interface) фирмы Borland. Он обеспечивает взаимодействие программ с графическими устройствами. Перед работой программы в графических режимах дисплея процедура InitGraph определяет тип видеоадаптера ПЭВМ, и загружает в память соответствующий BGI-драйвер, в котором определены возможные режимы работы. Процедура CloseGraph выгружает графический драйвер из памяти и восстанавливает текстовый режим работы видеоадаптера. Таким образом для работы в графическом режиме в рабочем каталоге должен находиться требуемый файл графического драйвера (обычно используют файл EGAVGA.BGI).
Все процедуры и функции модуля Graph по функциональному назначению можно разделить на следующие группы:
- Процедуры управления графическим режимом
CloseGraph |
Прекращение работы графического режима |
DetectGraph |
Проверка оборудования и режима |
GetModeRange |
Получение минимального и максимального номера графического режима |
GraphDefaults |
Сброс параметров графического режима |
InitGraph |
Инициализация графического режима |
RestoreCrtMode |
Возвращение в текстовый режим |
SetGraphBufSize |
Изменение размера графического буфера |
SetGraphMode |
Вход в графический режим и очистка экрана |
- Функции управления графическим режимом
GetGraphMode |
Получение номера текущего режима |
GetMaxMode |
Максимальное число режимов текущего драйвера |
GetModeName |
Получение имени заданного графического режима |
GraphErrorMsg |
Формирование сообщения об ошибке |
GraphResult |
Получение кода ошибки |
GetDriverName |
Получение имени текущего драйвера |
InstallUserDriver |
Размещение драйвера в таблице |
InstallUserFont |
Установка нового шрифта |
RegisterBGIdriver |
Регистрация драйвера |
RegisterBGIfont |
Регистрация шрифта |
- Процедуры управления экраном, окном, страницей
ClearDevice |
Очистка графического экрана |
ClearViewPort |
Очистка графического окна |
GetAspectRatio |
Получение относительного масштаба изображения по горизонтали и вертикали |
GetViewSettings |
Получение параметров текущего графического окна |
SetActivePage |
Задание активной страницы |
SetAspectRatio |
Изменение относительного масштаба изображения по горизонтали и вертикали |
SetViewPort |
Задание размеров окна |
SetVisualPage |
Задание отображаемой на экране страницы |
- Процедуры управления цветом и палитрой
GetDefaultPalette |
Получение исходных параметров палитры |
GetPalette |
Получение параметров палитры |
SetAllPalette |
Задание всех цветов палитры |
SetBkColor |
Задание цвета фона экрана |
SetColor |
Задание текущего цвета |
SetPalete |
Задание одного цвета палитры |
SetRGBPalette |
Задание палитры для адаптеров IBM - 8514 и VGA |
- Функции управления цветом и палитрой
GetBkColor |
Получение цвета фона |
GetColor |
Получение текущего цвета |
GetMaxColor |
Получение максимального кода цвета |
GetPaletteSize |
Получение количества цветов в палитре |
- Функции работы с точками
GetMaxX |
Получение максимального значения координаты X |
GetMaxY |
Получение максимального значения координаты Y |
GetPixel |
Получение цвета пиксела активной страницы |
GetX |
Получение координаты X текущей позиции на экране |
GetY |
Получение координаты Y текущей позиции на экране |
- Процедуры работы с точками
PutPixel |
Помещение пиксела в активную страницу |
- Процедуры работы с линиями
GetLineSettings |
Получение параметров линии |
Line |
Построение линии от одной точки до другой |
LineRel |
Построение линии с относительными координатами |
LineTo |
Построение линии с абсолютными координатами |
LineToMoveRel |
Перемещение указателя в точку с относительными координатами |
LineToMoveTo |
Перемещение указателя в точку с абсолютными координатами |
LineToSetLineStyle |
Задание характеристик линии |
LineToSetWriteMode |
Задание способа построения линии |
- Процедуры построения фигур из линий
LineToBar |
Построение закрашенного прямоугольника |
LineToBar3D |
Построение закрашенного параллепипеда |
LineToDrawPoly |
Построение многоугольника |
LineToFillPoly |
Построение закрашенного многоугольника |
LineToFloodFill |
Заполнение области текущим орнаментом |
LineToGetFillPattern |
Получение орнамента заполнения фигур |
LineToGetFillSettings |
Получение параметров заполнения фигур |
LineToRectangle |
Построение прямоугольника |
LineToSetFillPattern |
Задание произвольных параметров заполнения фигур |
LineToSetFillStyle |
Задание стандартных параметров заполнения фигур |
- Процедуры построения криволинейных фигур
LineToArc |
Построение дуги окружности |
LineToCircle |
Построение окружности |
LineToEllipse |
Построение дуги эллипса |
LineToFillEllipse |
Построение закрашенного эллипса |
LineToGetArcCoords |
Получение координат последней дуги |
LineToPieSlice |
Построение закрашенного сектора круга |
LineToSector |
Построение закрашенного сектора эллипса |
- Процедуры работы с текстом
LineToGetTextSettings |
Получение характеристик текста |
LineToOutText |
Вывод последовательности символов |
LineToOutTextXY |
Вывод последовательности символов, начиная с заданных координат |
LineToSetTextJustify |
Задание способа выравнивания текста |
LineToSetTextStyle |
Задание типа, начертания шрифта и коэффициента увеличения символов |
LineToSetUserCharSize |
Задание высоты и ширины символов |
- Функции работы с текстом
LineToTextHeight |
Получение высоты строки в пикселах |
LineToTextWidth |
Ширина строки в пикселах |
- Процедуры обмена с памятью
LineToGetImage |
Сохранение изображения в буфере |
LineToPutImage |
Вывод изображения из буфера на экран |
- Функции обмена с памятью
LineToImageSize |
Получение размера требуемой для изображения памяти |
Каждая графическая функция или процедура вызывается с соответ ствующими параметрами, информацию о которых можно получить по контекстно-зависимой помощи, либо из литературы [1].
1.2. Инициализация и закрытие графического режима.
Любая программа, работающая в графическом режиме, должна содержать вызовов процедуры инициализации графического режима, анализ ошибок инициализации, непосредственно работу с графикой и обращение к процедуре его закрытия после окончания работы. Приведем простой пример инициализации и закрытия графического режима.
USES Graph; {подключен модуль Graph}
PROCEDURE GrInit; {процедура инициализации режима графики}
VAR
GraphDriver: Integer; {для графического адаптера}
GraphMode : Integer; {для графического режима}
ErrorCode : Integer; {для кода ошибки}
BEGIN
GraphDriver :=Detect; {режим автоопределения}
InitGraph(GraphDriver ,GraphMode,''); {инициализация}
ErrorCode :=GraphResult; {результат инициализации}
if ErrorCode <> grOk then {если не успешно,то...}
begin
Writeln('Ошибка графики:',GraphErrorMsg(ErrorCode ));
Writeln('Программа остановлена.');
Halt(1)
end {if}
END;
BEGIN
GrInit; {вызов инициализации}
LINE(0,0,GetMaxX,GetMaxY); {работа с графикой}
Readln; {пауза до нажатия }
CloseGraph; {закрытие графического режима}
END.
В дальнейшем процедуру GrInit лучше записать в отдельный файл (например, INITGRAF.PAS) и использовать директиву включения этого файла при компиляции. Приведенный в примере блок всегда включает стандартный графический режим максимального разрешения.
При написании некоторых программ, использующих и графические, и текстовые режимы работы, является полезной процедура RestoreCRTMode, которая возвращает систему в текстовый режим, работавший до инициализации графики, без закрытия графики. Ее использование позволяет упростить возврат в графический режим, что демонстрируется следуюшим примером.
USES Graph; {подключение модуля}
{$I Initgraph.pas} {процедура инициализации}
CONST
graph_str ='Это графический режим';
text_str ='А это текстовый режим';
graph_bask='А это снова графический режим';
BEGIN
GrInit; {инициализация}
Line (0,0,GetMaxX,GetMaxY); {диагональ экрана}
OutTextXY(0,100,graph_str); {вывод первого сообщения}
Readln; {пауза}
RestoreCRTMode; {восстановление текстового режима}
Write(text_str); {вывод второго сообщения}
Readln;
SetGraphMode(GetGraphMode); {восстановление граф. режима}
Line (0,0,GetMaxX,GetMaxY);
OutTextXY(0,100,graph_bask);{вывод третьего сообщения}
Readln;
CloseGraph; {закрытие графики}
END.
содержание вперед на
главную
|