Основы современных компьютерных технологий

         

Инициализация графики


Перед началом работы с графикой необходимо установить режим работы монитора. Каждый из драйверов поддерживает от 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 :: Содержание


Содержание раздела