19.2.4. Очистка экрана и переключение режимов

We use cookies. Read the Privacy and Cookie Policy

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; { инициализация }

| 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

- 419 -

| SetGraphMode(GetGraphMode); { восстановление графи- }

| { ческого режима }

| Line(0,0,GetMaxX,GetMaxY); { диагональ экрана }

| OutTextXY(0,100,graph_back); {вывод третьего сообщения }

| ReadLn; { пауза до нажатия ввода }

| CloseGraph { закрытие графики }

| END.

Рис. 19.7 (окончание)

Как видно из примера, обратное переключение осуществляется при помощи функции GetGraphMode, которая возвращает номер текущего графического режима. При работе RestoreCRTMode выгрузки графического драйвера не происходит, т.е. он остается в памяти активным. Это и есть основное преимущество процедуры RestoreCRTMode. Предупреждаем, что обратное включение графики устанавливает в исходное состояние все графические параметры модуля Graph. Кроме того, подобные переключения, к сожалению, сбрасывают изображение с экрана.