Инициализация графики
Перед началом работы с графикой необходимо установить режим работы монитора. Каждый из драйверов поддерживает от 1 до 3 видеорежимов. Драйвер и режим могут быть заданы как число или как символическая константа, некоторые из которых приведены в табл. 27.2.
Таблица 27.2
Графические режимы монитора
ДРАЙВЕР |
РЕЖИМ |
РАЗРЕШЕНИЕ |
ФАЙЛ |
CGA(1) |
CGACO (CGAHI) |
320X200 (640X200) |
cga.bgi |
EGA (3) |
EGALo (EGAHI) |
640x200(640x350) |
egavga.bgi |
VGA (9) |
VGALo (VGAHI) |
640X200 (640X350) |
egavga.bgi |
HERC(8) |
HERCMONOHI |
720X348 |
herc.bgi |
380
Процедура, устанавливающая графический режим, имеет формат:
InitGraph(DriverVar, ModeVar, 'путь к файлу графического драйвера');
Целочисленные переменные DriverVar и ModeVar задают драйвер и режим. Первый параметр может задаваться как по имени, так и цифрой. На случай, если тип дисплея компьютера не известен, имеется стандартная константа Detect. Если соответствующее типу дисплея значение присвоено параметру DriverVar (DriverVar:=Detect;), то InitGRAPH автоматически инициирует нужный драйвер и устанавливает наиболее подходящий графический режим. Третий параметр в InitGRAPH - это путь к драйверу, если он находится в текущем каталоге, то вместо маршрута можно указать пустую строку, то есть два апострофа. Для различных манипуляций с видеорежимами в Turbo Pascal имеются следующие процедуры и функции:
GetDriveName: string;
функция возвращает имя установленного драйвера.
GetGraphMode: integer;
функция возвращает текущий графический режим.
GetModeRange(graphDriver: integer; VarloMode: integer);
процедура возвращает минимальный и максимальный графические режимы для данного драйвера.
DetectGraph(VarGraphDriver, GraphMode: integer);
процедура возвращает номера текущих драйвера и режима.
GetMaxMode:integer;
функция возвращает номер максимального режима установленного драйвера.
GetModeName(GraphMode: integer): string;
функция возвращает имя текущего драйвера.
GraphDefaults;
процедура устанавливает текущий указатель (СР) в начало и переустанавливает графическую систему.
SetGraphMode(Mode: integer);
процедура переводит систему в графический режим и очищает экран.
RestoreCRTMode;
процедура восстанавливает видеорежим, который был до инициализации графики.
Когда все работы для конструирования и показа графики выполнены, необходимо выйти из графического режима с помощью не имеющей параметров процедуры CloseGraph, то есть закрыть графический режим.
381
Память видеобуфера подразделяется на
видеостраницы. Их количество зависит от текущего режима и типа адаптера. Более одной страницы имеют видеокарты EGA, VGA, Hercules. Нумерация страниц начинается с нуля. В каждый момент времени на экране монитора может быть видимой одна страница. По умолчанию это страница с номером 0. Страница, на которой в данный момент формируется изображение, называется
активной.
Для работы со страницами предусмотрены две процедуры: SetActivPage(Page: word) - устанавливает активную страницу для построения изображения, при этом создаваемый рисунок не отображается на экране. После построения изображения можно визуализировать эту страницу при помощи процедуры SetVisualPage(Page: word).
Для предотвращения и нейтрализации ошибок в графическом режиме предусмотрены две функции GraphResult и GraphErrorMsg. GraphResult возвращает значение О (grOK), если последняя графическая операция выполнялась без ошибок. GraphError - возвращает строку сообщения об ошибке, соответствующую коду ошибки.
Приведем последовательность операторов, выполняющих
инициализацию графического режима:
Uses Graph;
Var DriverVar, ModeVar :integer;
ErrorCode : integer;
Begin
DriverVar:=Detect;
lnitGraph(DriverVar, Modevar,' ');
ErrorCode:=GraphResult;
IF ErrorCodeOgrOK Then
begin
writeln('Графическая системная ошибка: ',ErrorCode);
Halt(1);
end
End.
Иногда в процессе работы требуется периодически переходить из текстового режима в графический и наоборот. Ниже приводится пример подобных
переключений между режимами.
Uses Graph;
Var DriverVar, ModeVar: integer;
Begin
ClrScr;
Writeln(Текстовый режим');
...
DriverVar:=Detect;
InitGraph(DriverVar, Modevar,'');
OutTextXY(200,100, 'Графический режим');
...
RestoreCRTMode;
Writeln(Текстовый режим');
382
SetGraphMode(ModeVar);
OutTextXY(200,100,'Графический режим');
CloseGraph
End.
Следует иметь в виду, что при переходе из одного режима в другой выполняется очистка экрана. Поэтому при необходимости программист должен сам заботиться о сохранении и восстановлении содержимого экрана или его области.
383
380 :: 381 :: 382 :: 383 :: Содержание
Содержание раздела