Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование - 12 - Графика.doc
Скачиваний:
10
Добавлен:
09.03.2016
Размер:
410.11 Кб
Скачать

12.1.2 Функции управления графическим режимом

Function ...

GraphResult : Integer;

возвращает код ошибки последней графической операции:

grOK = 0 —

успешное выполнение;

grNoInitGraph = -1 —

не установлен графический режим (InitGraph);

grNotDetected = -2—

нет графического адаптера;

grFileNotFound = -3 —

нет драйвера устройства;

grInvalidDriver = -4 —

ошибка в драйвере;

grNoLoadMem = -5 —

нет памяти для загрузки драйвера;

grNoScanMem = -6—

нет памяти для сканирования;

grNoFloodMem = -7—

нет памяти для закраски;

grFontNotFound = -8—

не найден файл со шрифтом;

grNoFontMem = -9—

нет памяти для загрузки шрифта;

grInvalidMode = -10 —

недопустимый режим для выбранного драйвера;

grError = -11—

ошибка графической системы;

grIOerrror = -12—

ошибка ввода-вывода графической системы;

grInvalidFont = -13—

ошибка в файле со шрифтом;

grInvalidFontNum = -14—

неверный номер шрифта.

После обращения к функции она сбрасывает свое значение на 0 — поэтому возвращенное значение лучше сохранить в переменной и потом использовать это сохраненное значение.

GraphErrorMsg ( ErrorCode : Integer ) : String ;

по заданному коду ошибки (например, который возвращает GraphResult) выдает текстовое сообщение об ошибке.

ErrorCode

заданный код ошибки.

GetGraphMode : Integer;

возвращает номер текущего графического режима работы графического адаптера.

Пример 12.3(иллюстрация некоторых упомянутых выше процедур и функций):

Uses Graph ;

Var

Driver, Mode, ErrCode : Integer ;

Begin

Driver := Detect ;

InitGraph ( Driver, Mode , ’’ ) ;

ErrCode := GraphResult ;

If ErrCode <> grOK then

WriteLn ( GraphErrorMsg ( ErrCode ) )

else

Begin

. . .

RestoreCRTMode ;

. . .

SetGraphMode ( GetGraphMode - 1 ) ;

. . .

CloseGraph ;

End

End.

GetDriverName: String;

возвращает строку, содержащую имя текущего графического драйвера.

GetMaxMode: Word;

возвращает число режимов текущего драйвера.

GetModeName ( ModeNumber : Integer ): String;

возвращает строку с именем заданного графического режима по его номеру.

ModeNumber

номер графического режима.

12.2 Процедуры управления экраном, окном, страницей

Procedure ...

ClearDevice;

очищает графический экран, закрашивает его в цвет фона, устанавливает текущий указатель в точку ( 0, 0 ) (цвет фона задается процедурой SetBkColor).

GetAspectRatio ( var Xasp, Yasp : Word ) ;

возвращает действующую разрешающую способность графического экрана — координаты относительного удлинения, позволяющие оценить соотношение сторон графического экрана в пикселях; найденный с их помощью коэффициент может использоваться для построения правильных геометрических фигур.

Xasp, Yasp

действующие координаты относительного удлинения.

Пример 12.4 (построение квадрата со сторонойnпикселей):

. . .

GetAspectRatio ( Xasp, Yasp ) ;

Rectangle ( x1, y1, x1 + n*round ( Yasp / Xasp ), y1 + n ) ; {  по вертикали }

Rectangle ( x1, y1, x1 + n, y1 + n*round ( Xasp / Yasp ) ) ; {  и по горизонтали }

. . .

SetAspeсtRatio ( Xasp, Yasp : Word );

изменяет принятое по умолчанию значение коэффициента относительного удлинения, т.е. устанавливает масштабный коэффициент отношения сторон графического экрана.

Xasp, Yasp

устанавливаемые координаты относительного удлинения.

SetViewPort ( x1, y1, x2, y2 : Integer ; Clip : Boolean ) ;

устанавливает для графического вывода текущую область — прямоугольное окно на графическом экране.

( x1, y1 ) —

координаты левого верхнего угла окна.

( x2, y2 ) —

координаты правого нижнего угла окна.

Clip

логическое выражение, определяющее «отсечку» не умещающихся в окне элементов изображения — будет ли изображение «отсекаться» (если Clip = True, элементы изображения, не умещающиеся в переделах окна, отсекаются, в противном случае границы окна игнорируются).

В модуле Graphопределены следующие константы:

Сonst

ClipOn = True ; { Включить отсечку }

ClipOff = False ; { Не включать отсечку }

Если не выполняются условия соотношения координат окна или заданы недопустимые координаты, окно не выделяется, и формируется код ошибки: -11.

GetViewSettings ( var ViewPort : ViewPortType );

возвращает параметры текущего окна.

ViewPort

переменная типа ViewPortType, определенного в модулеGraph:

Type

ViewPortType = Record

x1, y1, x2, y2 : Integer ; {координаты окна}

Clip : Boolean ; {признак отсечки}

end;

ClearViewPort;

очищает текущее графическое окно, закрашивает его в цвет фона, текущий указатель перемещается в левый верхний угол окна с координатами ( 0, 0 ) (цвет фона задается процедурой SetBkColor).

Если окно не определено к моменту вызова процедуры, она работает как процедура ClearDevice.

Если возникает ошибка, то GraphResultвозвращает значение -6.

Пример 12.5(здесь используются также процедуры, которые описываются ниже):

. . .

SetViewPort ( 10, 10, 100, 100 ; ClipOn ) ;

SetBKColor ( White ) ;

OutText ( Для очистки окна нажми <Enter> ) ;

Readln ;

ClearViewPort ;

. . .

SetActivePage ( Page : Word );

устанавливает для графического вывода номер активной страницы (страницы, в которую можно выводить информацию — активная страница может быть невидимой).

Page

номер страницы (нумерация начинается с 0).

SetVisualPage ( Page : Word );

устанавливает номер отображаемой на экране (видимой) графической страницы.

Page

номер страницы (нумерация начинается с 0).

Пример 12.6(программа рисует квадрат на видимой странице и окружность — на невидимой, при нажатии <Enter >происходит смена видимых страниц):

Uses

Graph, Crt ;

Var

Driver, Mode : Integer ;

Begin

Driver := Detect ;

InitGraph ( Driver, Mode, '' ) ;

If Driver <> HercMono then

SetGraphMode ( Mode – 1 ) ;

SetActivePage ( 0 ) ;

{ изображение на видимой странице: }

Rectangle ( 10, 10, GetMaxX div 2, GetMaxY div 2 ) ;

OutTextXY ( 0, 0, 'Page 0. Press < Enter >...' ) ;

{ изображение на невидимой странице: }

SetActivePage ( 1 ) ;

Circle ( GetMaxX div 2, GetMaxY div 2, 100 ) ;

OutTextXY ( 0, 0, 'Page 1. Press < Enter >...' ) ;

{ переключение между страницами: }

Readln ;

SetVisualPage ( 1 ) ;

ReadLn ;

SetVisualPage ( 0 ) ;

ReadLn ;

CloseGraph

End.

Замечание.После инициализации графики сDriver = Detectустанавливается режим работы с максимально возможным номером. В этом случае адаптерыEGA,MCGA,VGAмогут работать только с одной графической страницей. Чтобы обеспечить работу с двумя страницами, следует уменьшить номер режима.