При инициализации графического режима функция контролирующая ошибки инициализации

Инициализация графического режима

Все объекты, которые
входят в модуль Graph, можно использовать
только после задания, инициализации
графического режима.

Инициализация
графического режима выполняется
процедурой InitGraph:

InitGraph
(<
драйвер>:integer;
<
режим>:integer;<путь
к
файлу>:string);.

Для
инициализации графического режима с
автоматическим распознаванием драйвера
и режима, достаточно присвоить переменной,
отвечающей за драйвер, константу Detect
или 0.
Присваивать какое-либо значение
переменной режима в этом случае не
требуется. Третий параметр указывает
путь к файлу (например, EGAVGA)
с расширением bgi.
Если этот файл находится в текущем
каталоге, то путь может быть пустым
(‘’).

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

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

Пример
1.
При
частой работе с графикой процесс
инициализации удобно оформить отдельной
процедурой.

Uses
Graph;

Var
Driver, Mode:integer;

Procedure
GrInit;

Begin

Driver:=Detect;
{ автораспознавание драйвера }

InitGraph
(Driver, Mode, ‘’);

If
GraphResult<>0
then

begin

Writeln
(‘Ошибка инициализации!’);

Writeln
(‘Работа программы прервана’);

Halt
(1) { остановить выполнение программы с
кодом завершения – 1 }

End

End;

Begin

GrInit;
{ графические
действия
}

Readln;

CloseGraph

End.

Управление экраном и окнами

В
графическом режиме поддерживается
концепция окон. Окно
представляет собой прямоугольную
область экрана со своей относительной
системой координат. По умолчанию окно
занимает весь экран, значения координат
его левого верхнего и правого нижнего
угла устанавливаются автоматически
процедурой инициализации (например
(0,0) и (640,480)).

Чтобы
стереть все изображение на экране, т.е.
очистить его, используется процедура
без параметров ClearDevice
или процедура GraphDefaults,
которая не только очищает экран, но и
выполняет все стартовые установки
графических параметров.

Процедура
SеtViewPort
(
X1,Y1,X2,Y2:integer;
Clip:boolean);
служит для организации окон. Здесь X1,Y1
– координаты левого верхнего угла,
X2,Y2
– координаты правого нижнего угла.
Параметр Clip
определяет, будут ли фрагменты изображения
отсекаться при попадании за пределы
окна (Clip=True
или Clip=ClipOn)
или нет (Clip=False
или Clip=ClipOff).
После создания окна началом координат
станет верхний левый угол окна, который
будет иметь координаты (0,0).

Процедура
ClearViewPort;
используется для очистки окна. Текущее
окно при этом заполняется фоновым
цветом, а текущий указатель устанавливается
в точку с координатами (0,0). Напомним,
что это координаты во внутренней системе
координат, связанной с данным окном, а
не в системе координат полного экрана.
Перейти к системе координат полного
экрана можно с помощью процедуры
ClearDevice,
или задав в процедуре установки окна
максимально возможные значения:
SetViewPort(0,0,GetMaxX,
GetMaxY,
True);.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Инициализация графического режима

Все объекты, которые
входят в модуль Graph, можно использовать
только после задания, инициализации
графического режима.

Инициализация
графического режима выполняется
процедурой InitGraph:

InitGraph
(<
драйвер>:integer;
<
режим>:integer;<путь
к
файлу>:string);.

Для
инициализации графического режима с
автоматическим распознаванием драйвера
и режима, достаточно присвоить переменной,
отвечающей за драйвер, константу Detect
или 0.
Присваивать какое-либо значение
переменной режима в этом случае не
требуется. Третий параметр указывает
путь к файлу (например, EGAVGA)
с расширением bgi.
Если этот файл находится в текущем
каталоге, то путь может быть пустым
(‘’).

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

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

Пример
1.
При
частой работе с графикой процесс
инициализации удобно оформить отдельной
процедурой.

Uses
Graph;

Var
Driver, Mode:integer;

Procedure
GrInit;

Begin

Driver:=Detect;
{ автораспознавание драйвера }

InitGraph
(Driver, Mode, ‘’);

If
GraphResult<>0
then

begin

Writeln
(‘Ошибка инициализации!’);

Writeln
(‘Работа программы прервана’);

Halt
(1) { остановить выполнение программы с
кодом завершения – 1 }

End

End;

Begin

GrInit;
{ графические
действия
}

Readln;

CloseGraph

End.

Управление экраном и окнами

В
графическом режиме поддерживается
концепция окон. Окно
представляет собой прямоугольную
область экрана со своей относительной
системой координат. По умолчанию окно
занимает весь экран, значения координат
его левого верхнего и правого нижнего
угла устанавливаются автоматически
процедурой инициализации (например
(0,0) и (640,480)).

Чтобы
стереть все изображение на экране, т.е.
очистить его, используется процедура
без параметров ClearDevice
или процедура GraphDefaults,
которая не только очищает экран, но и
выполняет все стартовые установки
графических параметров.

Процедура
SеtViewPort
(
X1,Y1,X2,Y2:integer;
Clip:boolean);
служит для организации окон. Здесь X1,Y1
– координаты левого верхнего угла,
X2,Y2
– координаты правого нижнего угла.
Параметр Clip
определяет, будут ли фрагменты изображения
отсекаться при попадании за пределы
окна (Clip=True
или Clip=ClipOn)
или нет (Clip=False
или Clip=ClipOff).
После создания окна началом координат
станет верхний левый угол окна, который
будет иметь координаты (0,0).

Процедура
ClearViewPort;
используется для очистки окна. Текущее
окно при этом заполняется фоновым
цветом, а текущий указатель устанавливается
в точку с координатами (0,0). Напомним,
что это координаты во внутренней системе
координат, связанной с данным окном, а
не в системе координат полного экрана.
Перейти к системе координат полного
экрана можно с помощью процедуры
ClearDevice,
или задав в процедуре установки окна
максимально возможные значения:
SetViewPort(0,0,GetMaxX,
GetMaxY,
True);.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

ПРОВЕРКА РЕЗУЛЬТАТА ИНИЦИАЛИЗАЦИИ ГРАФИЧЕСКОГО РЕЖИМА

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

·       
GrOk
=0; {нет ошибок} 

·       
GrInitGraph
=-1{не инициирован графический режим}

·       
GrNotDetect
=-2 {не определен тип драйвера} 

·       
GrFileNotFind
=-3 {не найден графический драйвер} 

·       
GrInvalidDriver
=-4 {неправильный тип драйвера} 

·       
GrNoLoadMem
=-5 {нет памяти для размещения драйвера} 

·       
GrNoScanMem
=-6 {нет памяти для просмотра областей}

·       
GrNoFloodMem
=-7 {нет памяти для закраски областей} 

·       
GrFontNotFound
=-8 {не найден файл со шрифтом} 

·       
GrNoFontMem
=-9 {нет памяти для размещения шрифта} 

·       
GrInvalidMode
=-10 {неправильный графический режим} 

·       
GrError
=-11 {общая ошибка} 

·       
GrIOError
=-12 {ошибка ввода-вывода} 

·       
GrInvalidFont
=-13 {неправильный формат шрифта}

·       
GrInvalidFontNum
=-14 {неправильный номер шрифта}

Процедура 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 увеличивает количество видеостраниц. Ниже мы рассмотрим процедуры, позволяющие определять тип установленного графического адаптера и режимы, которые могут быть установлены для него.


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]
 
[ДАЛЕЕ]

2. Инициализация и выход из графического режима.

   Любая графическая программа должна начинаться с инициализации
графического режима с помощью стандартной процедуры:

InitGraph(var GraphDriver: integer; var
GraphMode: integer; var DriverPath: string);

   При этом в переменной GraphDriver задается тип загружаемого драйвера.
После загрузки драйвера происходит его настройка на режим, записанный в
переменной GraphMode (возможные графические режимы описывают разрешение экрана,
например 640х480 точек растра, а также набор цветов).

   В переменной GraphPath задается путь к каталогу, где находится
соответствующий загружаемому драйверу BGI-файл. Если DriverPath = », то поиск
BGI-файла осуществляется в текущем каталоге.

   Ошибки, которые могут возникнуть при инициализации графического
режима, анализируют с помощью функции GraphResult.

   Пример инициализации графического режима:
Uses Graph;
Var Gd, Gm :
integer;
Begin
Gd := Detect; { Автоматическое определение }
InitGraph(Gd, Gm,
»);
if GraphResult <> grOk then Halt(1);
…………..
CloseGraph;
End.

   Для выхода из графического режима используется стандартная процедура
CloseGraph. Эта процедура восстанавливает режим, существовавший до инициализации
графики.

Пример: Программа — тест для инициализации графики.
[program GraphTest]

[НАЗАД]
 
[ДАЛЕЕ]

ПРОВЕРКА РЕЗУЛЬТАТА ИНИЦИАЛИЗАЦИИ ГРАФИЧЕСКОГО РЕЖИМА

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

·       
GrOk
=0; {нет ошибок} 

·       
GrInitGraph
=-1{не инициирован графический режим}

·       
GrNotDetect
=-2 {не определен тип драйвера} 

·       
GrFileNotFind
=-3 {не найден графический драйвер} 

·       
GrInvalidDriver
=-4 {неправильный тип драйвера} 

·       
GrNoLoadMem
=-5 {нет памяти для размещения драйвера} 

·       
GrNoScanMem
=-6 {нет памяти для просмотра областей}

·       
GrNoFloodMem
=-7 {нет памяти для закраски областей} 

·       
GrFontNotFound
=-8 {не найден файл со шрифтом} 

·       
GrNoFontMem
=-9 {нет памяти для размещения шрифта} 

·       
GrInvalidMode
=-10 {неправильный графический режим} 

·       
GrError
=-11 {общая ошибка} 

·       
GrIOError
=-12 {ошибка ввода-вывода} 

·       
GrInvalidFont
=-13 {неправильный формат шрифта}

·       
GrInvalidFontNum
=-14 {неправильный номер шрифта}

Лекция №16.

МОДУЛЬ GRAPH

      Модуль GRAPH содержит
большой  набор процедур (56) и функций (23), а так же констант, типов, и
переменных, которые используются для работы с графическими изображениями.

      При
работе в графическом режиме элементом экрана является точка (пик­сель) различно
светимости  и цвета. Координаты точки изменяются от левого верхнего угла (0,
0).

       Для
работы с графикой ПК должен содержать аппаратную (видеоадаптер) и программную
поддержку (графический драйвер).

      
Видеоадаптер представляет плату, на которой расположены: буферная ви­деопамять
(от 8 Мгб и выше) содержимое которой представляет карту экрана, контролер
(схемы управления) ЭЛТ, генератор символов и др. схемы.

     
Существует несколько типов адаптеров, каждый из которых может работать в режиме
с различной разрешающей способностью: 640х480; 800х600; 1024х768; 1200х1024;
1600х1200.

      
Наиболее широко используются видеоадаптеры VGA и SVGA
(Super Video Graphics Array).

    
Управление работой видеоадаптера осуществляется специальными систем­ными
программами, которые называются драйверами. Драйверы
располагаются на диске в каталоге BGI и имеют
расширение, имеют расширение  .bgi  (Borland Graphics Interface). Например: egavga.bgi.

Инициализация графического режима

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

Uses Crt, Graph;

Var   Gd, Gm, ErrCode     :integer;

Begin

    Gd:=Detect;                                            {Опр. типа драйвера}

    InitGraph(Gd,Gm,’D :\TP\BGI’);        {Путь к драйверу }

           
ErrCode:=GraphResult;

    If ErrCode<>grOK then

      Begin

           Writeln(‘Ошибка инициализации’,GraphErroMsg(ErroeCode));

            Halt(1);                                              
{
Режим не
удалось открыть }

        End;

***

End.

Процедуры и функции

инициализация графического режима

   
Процедура инициализация:

     InitGraph(<драйвер>,< режим>,< путь к
драйверу>);

    <драйвер> — переменная целого типа (Gd);

    < режим> — режим работы драйвера,
переменная целого типа (Gm);

    < путь к драйверу> — переменная строкового
типа (S).

     В
модуле каждому типу драйвера и режиму работы предопределены  константы.  Например: VGA=9; VGAHi=2.

     Если тип драйвера не
известен или программа рассчитана на работу с любым адаптером, то можно
использовать режим авто определения типа с помощью константы Detect (код
0).

Функция GraphResult:integer
– возвращает код ошибки при выполнении графической операции.

Функция
GraphErroMsg(<код>) —
возвращает текст соответствующий коду ошибки.

       Значения ошибок предопределены   константами

     Const

           gr_OK                         = 0;    {Нет
ошибок}

           grInitGraph               = -1;    {Графика не инициализирована}

           grNotDetected          
= -2;
   {Графическое устройство не обнаружено}

            grFileNotFound       
= -3;  
 {Файл драйвера не найден}

               . . .

            grIvalidDeviceNum   =
-15; {
Не правильный номер устройства}

Возврат в текстовый режим

    
Процедура ClosetGraph – восстанавливает
текстовый режим и выгружает драйвер из памяти.

    
Процедура RestoreCrtMode
кратковременный выход в текстовый режим.

     Процедура
SetGraphMode –
устанавливает  новый графический режим.

Координаты, окна, цвет 

     Функции:  
 GetMaxX — возвращает максимальную координату X.

                         GetMaxY
возвращает максимальную координату Y.

   GetX —
возвращает текущую координату X.

   GetX —
возвращает текущую координату X.

   
Процедуры: SetViewPort(X1,Y1, X2, Y2, <отсечка>) – устанавливает графическое окно.Где
<отсечка>-
логическая переменная если она равна false то
границы игнорируются в противном случае изображения за пределами границы
отсекается.

ClearDevice – очистка
экрана;

ClearViewPort– очистка
окна;

SetColor –
устанавливает цвет рисования;

SetBkColor
— устанавливает цвет фона;

Точки, Линии 

     Процедуры: PutPixel(X, Y,
<цвет>) –
определяет координату и цвет точки;

                          Line(X1,
Y1, X2, Y2) –
рисует линию между заданными коор- 

                                                                  
динатами;

Понравилась статья? Поделить с друзьями:
  • При запуске программ ошибка файловой системы
  • При инициализации базы данных произошла ошибка postgresql установка
  • При использовании интегрального метода ошибка вычислений
  • При запуске печати произошла ошибка outlook 2016
  • При инициализации системы secret net произошли ошибки