19.2.4.1. Очистка графического экрана. Две следующие процедуры выполняют почти одинаковые действия, только первая из них {416}
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). {417}
USES Graph; { подключен модуль Graph }
{$I initgraf.pas} { процедура инициализации }
VAR
mode, modeLo, modeHi : Integer; { номера режимов }
BEGIN
GrInit; { инициализация }
GetModeRange(CurrentDriver,modeLo,modeHi); { диапазон }
for mode:=modeLo to modeHi do begin { цикл по режимам }
SetGraphMode( mode ); { включение режима }
Line( 0, 0, 639, 479); { рисование линии }
ReadLn { ожидание ввода }
end; {for}
CloseGraph { закрытие графики }
END.
Рис. 19.6
19.2.4.3. Процедура RestoreCRTMode. При написании некоторых пакетов, использующих и графические, и текстовые режимы работы ПЭВМ, может оказаться полезной процедура RestoreCRTMode, которая возвращает систему в текстовый режим, работавший до инициализации графики. Казалось бы, уже есть процедура с подобным действием — CloseGraph. Однако после нее возврат в графический режим должен проводиться через процедуру InitGraph, что довольно сложно (см. рис. 19.1). Если же воспользоваться процедурой RestoreCRTMode, то возвращение в графику будет достаточно простым (рис. 19.7).
USES Graph; { подключен модуль Graph }
{$I initgraf.pas} { процедура инициализации }
CONST { константы-сообщения: }
graph_str = 'Это графический режим';
text_str = 'А это текстовый режим’;
graph_back = 'А это снова графический режим';
BEGIN
GrInit; { инициализация графики }
Line(0,0,GetMaxX,GetMaxY ); { диагональ экрана }
OutTextXY(0,100,graph_str); { вывод первого сообщения } ReadLn; { пауза до нажатия ввода }
RestoreCRTMode; { восстановление текстового режима } Write( text_str ); { вывод второго сообщения }
ReadLn; { пауза до нажатия ввода }
Рис. 19.7 {418}
SetGraphMode(GetGraphMode); { восстановление графи- }
{ ческого режима }
Line(0,0,GetMaxX,GetMaxY); { диагональ экрана } OutTextXY(0,100,graph_back); {вывод третьего сообщения } ReadLn; { пауза до нажатия ввода }
CloseGraph { закрытие графики }
END.
Рис. 19.7 (окончание)
Как видно из примера, обратное переключение осуществляется при помощи функции GetGraphMode, которая возвращает номер текущего графического режима. При работе RestoreCRTMode выгрузки графического драйвера не происходит, т.е. он остается в памяти активным. Это и есть основное преимущество процедуры RestoreCRTMode. Предупреждаем, что обратное включение графики устанавливает в исходное состояние все графические параметры модуля Graph. Кроме того, подобные переключения, к сожалению, сбрасывают изображение с экрана.