- •12 Графические возможности языка Паскаль
- •12.1 Управление графическим режимом
- •12.1.1 Процедуры управления графическим режимом
- •12.1.2 Функции управления графическим режимом
- •12.2 Процедуры управления экраном, окном, страницей
- •12.3 Управление цветом и палитрой
- •12.3.1 Процедуры управления цветом и палитрой
- •12.3.2 Функции управления цветом и палитрой
- •12.4 Работа с точками
- •12.4.1 Процедура работы с точками
- •12.4.2 Функции работы с точками
- •12.5 Процедуры работы с линиями
- •12.6 Процедуры построения фигур из линий
- •12.7 Процедуры построения криволинейных фигур
- •12.8 Работа с текстом в графическом режиме
- •12.8.1 Процедуры работы с текстом
- •12.8.2 Функции работы с текстом
- •12.9 Обмен с памятью
- •12.9.1 Процедуры обмена с памятью
- •12.9.2 Функция обмена с памятью
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могут работать только с одной графической страницей. Чтобы обеспечить работу с двумя страницами, следует уменьшить номер режима.