| 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. Кроме того, подобные переключения, к сожалению, сбрасывают изображение с экрана.

<p>19.2.5. Управление режимом вывода отрезков на экран</p>

При рисовании отрезков на экране можно назначать режим поразрядного совмещения изображений. От него зависит, будет ли стерта при наложении двух точек «нижняя», и каким способом можно снять «верхнее» изображение с экрана. Управляя этим режимом, можно получать эффекты мультипликации. Сам режим задастся процедурой

SetWriteMode( WriteMode : Integer ).

Для задания параметра WriteMode в модуле Graph описаны пять констант, каждой из которых соответствует поразрядная операция (табл. 19.5).

Таблица 19.5

Имя константы

Значение

Логическая операция

Ее действие

CopyPut

MOV

Замещение

XORPut

XOR

Исключающее 'Или'

ORPut

OR

'Или'

ANDPut

AND

'И'

NOTPut

NOT

'НЕ'

- 420 -

Поскольку рисование на экране, по сути, является действием с битами, при прорисовке точек производятся логические операции между битами памяти монитора и битами изображения. Для описываемой процедуры разрешены только первые две операции: первая — замещение (очистка перед прорисовкой) и вторая (очень интересная) — XOR. Дело в том, что две последовательно проведенные логические операции XOR приведут биты памяти монитора в исходное состояние. Фактически это означает, что если есть какое-нибудь изображение на экране, то использовав его в качестве фона и нарисовав на нем картинку, можно восстановить его, прорисовав картинку еще раз (рис. 19.8). При инициализации и после смены режимов устанавливается режим CopyPut.

| Graph, CRT; { подключены Graph и CRT }

| {$I initgraf.pas} { процедура инициализации }

| VAR

Перейти на страницу:

Поиск

Похожие книги