| gMode := CGACO { работы CGA. }
| end; {if}
| InitGraph(gDriver,gMode, ); { режим CGA }
| Line( 0, 0, 319, 199 ); { работа как на CGA }
| CloseGraph { закрытие графики } END.
Рис. 19.3
Существует возможность манипуляции режимами работы графического адаптера — при помощи группы процедур и функций, работающих уже после инициализации графики. Но часто бывает важным сначала определить разрешенные значения режимов.
19.2.3.2. Диапазоны графических режимов. Номер текущего графического режима для установленного драйвера определяется функцией
GetGraphMode : Integer,
а функция
GetMaxMode : Word
возвращает номер максимального режима для графического адаптера; таким образом, каждый драйвер поддерживает диапазон режимов 0..GetMaxMode. Обычно этот же результат можно получить из процедуры
- 416 -
GetModeRange( GraphDriver : Integer;
VAR LoMode, HiMode : Integer ),
через параметры LoMode и HiMode возвращающей соответственно нижнюю и верхнюю границу режимов для драйвера GraphDriver. Но по ряду технических соображений предпочтительнее пользоваться функцией GetMaxMode, полагая минимальный номер режима равным нулю.
19.2.3.3. Функции GetModeName и GetDriverName. Есть еще одна функция, которая может быть полезна для организации диалогового управления графическими режимами:
GetModeName( GraphMode : Word ) : String
Она возвращает строку, в которой содержится последовательно через пробелы разрешение, имя константы и иногда название палитры из табл. 19.4, например, '640x200 CGA'. Представленный пример (рис. 19.4) поможет определить, в каких графических режимах может работать используемая ПЭВМ.
| USES Graph; { подключен модуль Graph }
| {$I initgraf.pas} { процедура инициализации }
| VAR
| mode : Integer;
| BEGIN
| GrInit; { инициализация }
| for mode := 0 to GetMaxMode do
| { показ всех режимов }
| OutTextXY( 10, 10+mode*10, GetModeName( mode ) );
| ReadLn; { пауза до нажатия... }
| CloseGraph { закрытие графики }
| END.
Рис. 19.4
Функция
GetDriverName : String
позволяет получить имя используемого драйвера. Ее применение обосновано только в том случае, если в процедуре InitGraph переменная GraphDriver определена, как Detect (рис. 19.5).
19.2.4. Очистка экрана и переключение режимов
19.2.4.1. Очистка графического экрана. Две следующие процедуры выполняют почти одинаковые действия, только первая из них
- 417 -
| USES Graph; { подключен модуль Graph }
| {$I initgraf.pas} { процедура инициализации }
| BEGIN
| GrInit; { инициализация графики }
| OutTextXY( 40, 40, { выводится имя драйвера: }
| 'У меня используется драйвер типа ' + GetDriverName );
| ReadLn; { пауза до нажатия ввода }
| CloseGraph { закрытие режима графики }
| END.
Рис. 19.5
является как бы подмножеством второй:
ClearDevice
очищает графический экран и устанавливает указатель позиции в положение (0, 0), а процедура
GraphDefaults
кроме очистки экрана, устанавливает ряд параметров графической системы:
1) графическое окно становится равным размеру экрана;
2) восстанавливается системная цветовая палитра;
3) переназначаются цвета основных линий и фона экрана;
4) толщина и стиль линий принимаются как по умолчанию;
5) цвет и шаблон заливки геометрических фигур и замкнутых ломаных принимается как по умолчанию;
6) переустанавливается активный шрифт и его стиль. Процедура GraphDefaults неявно вызывается при инициализации графики и выполняет, no-сути, все стартовые установки графических параметров.
19.2.4.2. Переключение режимов. Оно осуществляется процедурой
SetGraphMode(GraphMode : Integer),
которая переключает систему в указанный параметром GraphMode графический режим и очищает экран монитора. При этом все дополнительные характеристики устанавливаются по умолчанию. Чтобы предостеречь от ошибок, вызванных кажущейся простотой переключения, укажем, что такие переключения возможны только в рамках текущего драйвера — иначе необходимо реинициализировать систему (рис. 19.6).
- 418 -
| USES Graph; { подключен модуль Graph }
| {$I initgraf.pas} { процедура инициализации }
| VAR
| mode, modeLo, modeHi : Integer; { номера режимов }
| BEGIN
| GrInit; { инициализация }