19.2.2. Обработка ошибок инициализации

We use cookies. Read the Privacy and Cookie Policy

Процедура InitGraph возвращает также и результат своей работы в параметре GraphDriver. В случае ошибки он может принимать значения, приведенные в табл. 19.1.

таблица 19.1.

Значение

Объяснение

-2

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

-3

Не найден файл драйвера

-4

Ошибка в драйвере (в его коде)

- 409 -

-5

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

-10

Невозможный режим для выбранного драйвера.

-15

Нет такого драйвера

Если же ошибок при инициализации не обнаружено, то в параметре GraphDriver возвращается номер адаптера из приведенного в разд. 19.2.1.1 списка констант.

В модуле Graph реализован еще один способ проверки результата проведения графической операции. Он осуществляется с помощью функции

GraphResult : Integer

которая возвращает код результата последнего вызова одной из процедур или функций, указанных в табл. 19.2.

Таблица 19.2

Bar

Bar3D

ClearViewPort

CloseGraph

DetectGraph

DrawPoly

FillPoly

FloodFill

GetGraphMode

ImageSize

InitGraph

InstallUserDriver

InstallUserFont

PieSlice

RegisterBGIdriver

RegisterBGIfont

SetAllPalette

SetFillPattern

SetFillStyle

SetGraphBufSize

SetGraphMode

SetLineStyle

SetPalette

SetTextJustify

SetTextStyle

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

Для быстрой выдачи простого сообщения о типе ошибки графической системы используется функция, преобразующая результат вызова функции GraphResult в сообщение, которое можно вывести на экран процедурой Write. Эта функция объявлена как:

- 410 -

GraphErrorMsg(ErrorCode : Integer) : String;

Константы кодов ошибок, определенные в модуле Graph, и соответствующие им сообщения приведены в табл.19.3.

Таблица 19.3

Константа

Код

Сообщение об ошибке

Перевод и пояснения

grOk

No error

Ошибки нет

grNoInitGraph

-1

(BGI) Graphics not installed (use InitGraph)

Графика не инициализирована

grNotDetected

-2

Graphics hardware not detected

Графический адаптер не найден

grFileNotFound

-3

Device driver file not detected

BGI-файла нет в указанном каталоге

grInvalidDriver

-4

Invalid device driver file

BGI-файл содержит ошибочный код

grNoLoadMem

-5

Not enough memory to load driver

Нет места в ОЗУ для загрузки драйвера

grNoScanMem

-6

Out of memory in scan fill

При работе процедуры FillPoly не хватает рабочей памяти

grNoFloodMem

-7

Out of memory in flood fill

При работе процедуры FloodFill не хватает рабочей памяти

grFontNotFound

-8

Font file not found

CHR-файла нет в указанном каталоге

grNoFontMem

-9

Not enough memory to load font

Нет места в ОЗУ для загрузки шрифта

grInvalidMode

-10

Invalid Graphics mode for selected driver

Невозможный режим для выбранного драйвера

- 411 -

grError

-11

Graphics error

Ошибка графики

grIOError

-12

Graphics I/O error

Ошибка ввода-вывода графики

grInvalidFont

-13

Invalid font file

В файле шрифта неправильный код

grInvalidFontNum

-14

Invalid font number

Несуществующий номер шрифта

grInvalidDeviceNum

-15

Invalid device number

Несуществующий номер адаптера

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

| USES Graph; {подключен модуль Graph}

| PROCEDURE GrInit; {инициализация режима графики}

| VAR

| GraphDriver : Integer; {для графического адаптера}

| GraphMode : Integer; {для графического режима}

| ErrorCode : Integer; {для кода ошибки}

| BEGIN

| GraphDriver := Detect; {режим автоопределения}

| InitGraph(GraphDriver, GraphMode, ' '); {инициализация}

| ErrorCode := GraphResult, {результат инициализации}

| if ErrorCode <> grOk then {если неуспешно, то…}

| begin

| WriteLn('Ошибка графики:)', GraphErrorMsg(ErrorCode));

| WriteLn('Программа остановлена');

| Halt(1)

| end {if}

| END;

| {{==ПРИМЕР ИНИЦИАЛИЗАЦИИ}==}

| BEGIN

| GrInit; {вызов инициализации}

| Line(0, 0, GetMaxX,GetMaxY); {работа с графикой….}

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

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

| END.

Рис. 19.1

- 412 -

В дальнейшем процедуру GrInit лучше записать в отдельный файл (например, INITGRAF.PAS) и использовать директиву включения этого файла при компиляции (что и сделано во всех остальных примерах). Такой блок всегда включает стандартный графический режим максимального разрешения. Однако это не всегда необходимо. На адаптере CGA, например, уменьшение разрешения дает возможность использовать большее количество цветов, а на адаптерах EGA и VGA увеличивает количество видеостраниц. Ниже мы рассмотрим процедуры, позволяющие определять тип установленного графического адаптера и режимы, которые могут быть установлены для него.