
- •5.2. Модуль graph
- •5.2.1. Переход в графический режим и возврат в текстовый.
- •5.2.2. Инициализация графического режима
- •InitGraph (Driver, Mode, Path);
- •5.2.3. Экран и окно в графическом режиме
- •5.2.4. Рисование линий и точек.
- •5.2.5. Рисование многоугольников
- •5.2.6. Рисование дуг, окружностей, эллипсов
- •5.2.7. Краски, палитры, заполнения
- •5.2.8 Вывод текста
- •Задачи для самостоятельного решения.
- •Литература
5.2. Модуль graph
Начиная с версии 4.0 в состав Турбо Паскаля включена мощная библиотека графических подпрограмм Graph, остающаяся практически неизмененной во всех остальных версиях. Библиотека содержит в общей сложности более 50 процедур и функций, предоставляющих программисту самые разнообразные возможности управления графическим экраном.
5.2.1. Переход в графический режим и возврат в текстовый.
Стандартное состояние ПК после его включения, а также к моменту запуска программы из среды Турбо Паскаль, соответствует работе экрана в текстовом режиме, поэтому любая программа, использующая графические средства компьютера, должна инициировать графический режим работы дисплейного адаптера. После завершения работы программы ПК возвращается в текстовый режим.
Перед работой с графикой нужно установить наиболее подходящий для имеющегося монитора режим.
Настройка графических процедур на работу с конкретным адаптером достигается за счет подключения нужного графического драйвера. Драйвер -это специальная программа, осуществляющая управление техническими средствами ПК. Графические драйверы, разработанные фирмой Borland, существуют для всех типов адаптеров и обычно располагаются на диске в отдельном подкаталоге BGI в виде файлов с расширением BGI. Турбо Паскаль имеет фиксированное число драйверов, каждый из которых поддерживает от одного до трех видеорежимов.
5.2.2. Инициализация графического режима
Процедура InitGraph. Процедура InitGraph инициирует графический режим работы адаптера.
Формат вызова процедуры в программе:
InitGraph (Driver, Mode, Path);
Здесь Driver - переменная типа Integer, определяет тип графического драйвера; Mode - переменная того же типа, задающая режим работы графического адаптера; Path - выражение типа String, задает маршрут поиска файла драйвера; если он (драйвер) расположен в активном директории, то вместо маршрута ставят два апострофа.
К моменту вызова процедуры на одном из дисковых носителей информации должен находиться файл, содержащий нужный графический драйвер. Процедура загружает этот драйвер в оперативную память и переводит адаптер в графический режим работы.
Константы, определяющие видеорежим, приведены в таблице 1.2 вместе с информацией о выбираемом режиме и типе видеоадаптера, который может такой режим поддерживать.
Таблица 1.2
Драйвер |
Режим |
Разрешение |
Файл |
CGA(1) EGA(3) VGA(9) SVGA |
CGACo, CGAHi EGALo, EGAHi VGALo, VGAHi |
320200, (640200) 640200, (640350) 640200, (640350) 800600 и более |
CGA.BGI EGAVGA.BGI EGAVGA.BGI EGAVGA.BGI |
Если тип адаптера ПК неизвестен или программа рассчитана на работу с любым адаптером, используется обращение к процедуре InitGraph с требованием автоматического определения типа драйвера:
Driver:= Detect;
InitGraph (Driver, Mode, Path);
После такого обращения устанавливается графический режим работы экрана, а при выходе из процедуры переменные Driver и Mode содержат целочисленные значения, определяющие тип драйвера и режим его работы. При этом для адаптеров, способных работать в нескольких режимах, выбирается старший режим, т.е. тот, что закодирован максимальной цифрой. Например, при работе с CGA-адаптером, обращение к процедуре со значением Driver=Detect вернет переменной Driver значение 1 (CGA) и переменной Mode – значение 4 (CGAHi), а такое же обращение к адаптеру VGA вернет переменной Driver значение 9 (VGA) и переменной Mode –значение 2 (VGAHi).
Графическая программа, как и любая другая, может содержать ошибки. Для своевременного обнаружения и нейтрализации их предусмотрены две функции GraphResult и GraphErrorMsg.
Функция GraphResult. Функция GraphResult возвращает значение типа Integer (0), если последняя графическая операция выполнялась без ошибок, или число в диапазоне -14, ... , -1, если ошибка была.
Коды ошибок, допущенных при обращении к графическим процедурам, приведены в таблице 1.3.
Таблица 1.3
Константа |
Значение |
Описание |
GrOK GrNolnitGraph 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 |
Нет ошибок Графика не инициализирована Графическое устройство не обнаружено Файл драйвера устройства не найден Неправильный файл драйвера устройства Не хватает памяти для загрузки драйвера Выход за пределы памяти при заполнении (scan fill) Выход за пределы памяти при заполнении (flood fill) Файл шрифта не найден Недостаточно памяти для загрузки шрифта Неверный графический режим драйвера Графическая ошибка Ошибка графического ввода-вывода Неверный файл шрифта Неверный номер шрифта |
Функция GraphErrorMsg. Функция GraphErrorMsg возвращает значение типа String, в котором по указанному коду ошибки дается соответствующее текстовое сообщение.
Формат обращения к функции в программе:
T:= GraphErrorMsg (<код ошибки>);
T – переменная типа string.
Фрагмент программы, в которой инициализируется графический режим и выполняется проверка, допущены ли при этой инициализации ошибки (и какого характера ) или нет :
. . . . . . .
uses Crt, Graph;
var Driver, Mode, ErrorCode: integer;
begin ClrScr; Driver:=Detect;
InitGraph (Driver, Mode, ' '); ErrorCode:=GraphResult;
If ErrorCode < > 0 then
begin Writeln (' Графическая системная ошибка: ');
Writeln (GraphErrorMsg (ErrorCode)); Halt (1)
end
end.
Процедура CloseGraph. Процедура CloseGraph завершает работу адаптера в графическом режиме и восстанавливает текстовый режим работы экрана.
Формат вызова процедуры в программе:
CloseGraph ;
Процедура RestoreCRTMode. Процедура RestoreCRTMode служит для кратковременного возврата в текстовый режим. В отличие от процедуры CloseGraph установленные параметры графического режима не сбрасываются.
Формат вызова процедуры в программе:
RestoreCRTMode;
Функция GetGraphMode. Функция GetGraphMode возвращает значение типа Integer, в котором содержится код установленного режима работы графического адаптера.
Формат обращения к функции в программе:
T:= GetGraphMode ;
Переменная T типа integer.
Процедура SetGraphMode. Процедура SetGraphMode устанавливает новый графический режим работы адаптера.
Формат обращения к процедуре в программе:
SetGraphMode (< Mode>);
Переменная Mode - код устанавливаемого режима.
Процедура DetectGraph. Процедура DetectGraph возвращает тип драйвера и режим его работы.
Формат обращения к процедуре в программе:
DetectGraph(Driver, Mode);
В отличие от функции GetGraphMode, описываемая процедура возвращает переменной Mode максимально возможный для данного адаптера номер графического режима.
Функция GetDriverName. Функция GetDriverName возвращает значение типа String, содержащее имя загруженного графического драйвера.
Формат обращения к функции в программе:
S:= GetDriverName;
Переменная S типа string.