Процедуры и функции работы с графикой
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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

InitGraph (драйвер, режим, путь) – процедура инициирует графический режим. Драйвер – переменная типа Integer, определяет тип графического драйвера. Режим – переменная типа Integer, задающая режим работы графического адаптера. Путь – выражение типа String, содержащее имя файла драйвера и, возможно, маршрут его поиска. Процедура загружает графический драйвер в оперативную память и переводит адаптер в графический режим работы. Тип драйвера должен соответствовать типу графического адаптера. Обычно при инициализации графики в качестве драйвера указывается значение Detect – режим автоопределения типа графического драйвера. В этом случае режим работы графического адаптера определяется по умолчанию.

 

Closegraph – процедура завершает работу адаптера в графическом режиме и восстанавливает текстовый режим работы экрана.

    Пример. Порядок перехода в графический режим.

Uses Graph;

Var

Driver, Mode: Integer;

Begin

Driver:=Detect;

{режим автоопределения типа графического драйвера}

InitGraph(Driver,Mode,’’);

{графический режим}

Repeat Until KeyPressed; {задержка экрана}

CloseGraph; {закрыли графический режим}

End.

 

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

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

    GraphErrorMsg (код_ошибки) – функция возвращает значение типа String, в котором по указанному коду ошибки дается соответствующее текстовое сообщене. Код ошибки – это значение, возвращаемое функцией GraphResult.

 

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

 

GetGraphMode – функция возвращает значение типа Integer, в котором содержится код установленного режима работы графического адаптера.

 

SetGraphMode (режим) – процедура устанавливает новый графический режим работы адаптера. Режим – число типа Integer, задающее режим работы адаптера.

 

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

Uses Graph;

Var

Driver, Mode, Error: Integer;

Begin

  {инициируем графический режим}

Driver:=Detect;

InitGraph(Driver,Mode,’’);

Error:=GraphResult;  {запоминаем результат}

If Error<>grOK then  {проверяем ошибку}

WriteLn(GraphErrorMsg(Error)) {есть ошибка}

else       {нет ошибки}

Begin

{это графический режим}

Repeat Until KeyPressed;

{переходим в текстовый режим}

RestoreCRTMode;

Repeat Until KeyPressed;

{возвращаемся в графический режим}

SetGraphMode(GetGraphMode);

Repeat Until KeyPressed;

CloseGraph; {закрыли графический режим}

end;

End.

 

DetectGraph (драйвер, режим_работы) – процедура возвращает тип драйвера и максимально возможный режим его работы.

 

GetDriverName – функция возвращает значение типа String, содержащее имя загруженного графического драйвера.

 

    GetMaxMode – функция возвращает значение типа Integer, содержащее количество возможных режимов работы адаптера.

 

    GetModeName (номер_режима) – функция возвращает значение типа String, содержащее разрешение экрана и имя режима работы адаптера по его номеру.

 

    GetModeRange (тип_адаптера, min, max) – процедура возвращает диапазон возможных режимов работы заданного графического адаптера. Тип адаптера – число типа Integer, min, max – переменные типа Integer, в которых возвращаются нижнее и верхнее возможные значения номера режима.

 

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

 

SetViewPort (x1,y1,x2,y2,ClipOn) – процедура устанавливает прямоугольное окно на графическом экране, (x1,y1) – координаты левого верхнего, (x2,y2) – координаты правого нижнего угла окна. Координаты окна всегда задаются относительно левого верхнего угла экрана. ClipOn – логическое выражение, определяющее «отсечку» не умещающихся в окне элементов изображения. Если параметр ClipOn=True, элементы изображения, не умещающиеся в переделах окна, отсекаются, в противном случае границы окна игнорируются. Для управления этим параметром можно использовать следующие определенные в модуле константы:

С onst

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

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

 

GetViewSettings (ViewInfo) – процедура возвращает координаты и признак отсечки текущего графического окна. Параметр ViewInfo – переменная типа ViewPortType, который определен в модуле Graph следующим образом:

Type

ViewPortType=record

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

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

end;

 

MoveTo (x,y) – процедура устанавливает новое положение указателя в позиции (x,y). Координаты определяются относительно левого верхнего угла окна или, если окно не установлено, экрана.

 

MoveRel (dx,dy) – процедура устанавливает новое положение указателя в относительных координатах (dx,dy). Здесь dx, dy – приращения новых координат указателя соответственно по горизонтали и вертикали. Приращения задаются относительно того положения, которое занимал указатель к моменту обращения к процедуре.

 

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

 

ClearViewPort – процедура очищает графическое окно, а если окно не определено к этому моменту – весь экран. Указатель перемещается в левый верхний угол окна.

 

GetAspectRatio (x,y) – процедура возвращает значения x,y, позволяющие оценить соотношение сторон графического экрана в пикселах. Найденный с их помощью коэффициент может использоваться для построения правильных геометрических фигур.

Пример. Для построения квадрата со стороной n пиксел по вертикали, нужно использовать операторы:

GetAspectRatio (Xasp,Yasp);

Rectangle(x1,y1,x1+n*round(Yasp/Xasp),y1+n);

Если же n определяет длину квадрата по горизонтали, используется оператор

Rectangle(x1,y1,x1+n,y1+n*round(Xasp/Yasp));

 

SetAspeсtRatio (x,y) – процедура устанавливает масштабный коэффициент отношения сторон графического экрана. Здесь x,y – устанавливаемые соотношения сторон.

 

GetMaxX – функция возвращает максимальную координату экрана по горизонтали в текущем режиме работы.

 

GetMaxY – функция возвращает максимальную координату экрана по вертикали в текущем режиме работы.

 

GetX – функция возвращает текущую координату указатели по горизонтали.

 

GetY – функция возвращает текущую координату указатели по вертикали.

 

SetActivePage (номер_страницы) – процедура делает активной указанную страницу видеопамяти. Фактически процедура просто переадресует графический вывод в другую область видеопамяти. Активная страница может быть невидимой. Нумерация страниц начинается с нуля.

 

SetVisualPage (номер_страницы) – процедура делает видимой страницу с указанным номером. Нумерация страниц начинается с нуля.

    Пример работы с видеостраницами. Программа сначала рисует квадрат в видимой странице и окружность – в невидимой. После нажатия 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.

 

    С помощью оператора

If Driver<>HercMono then SetGraphMode(Mode-1);

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

 

Линии и точки

 

PutPixel (x,y,цвет) – процедура выводит заданным цветом точку с координатами (x,y). Координаты задаются относительно левого верхнего угла окна или, если окно не установлено, относительно левого верхнего угла экрана.

 

GetPixel (x,y) –функция возвращает значение типа Word, содержащее цвет пиксела с указанными координатами.

 

Line (x1,y1,x2,y2) – процедура вычерчивает линию с координатами начала (x1,y1) и конца (x2,y2). Линия вычерчивается текущим стилем и текущим цветом.

 

LineTo (x,y) – процедура вычерчивает линию от текущего положения указателя до точки с заданными координатами (x,y). Линия вычерчивается текущим стилем и текущим цветом.

 

LineRel (dx,dy) – процедура вычерчивает линию от текущего положения указателя до положения, заданного приращениями координат (dx,dy). Линия вычерчивается текущим стилем и текущим цветом.

 

SetLineStyle (тип, образец, толщина_линии) – процедура устанавливает стиль вычерчиваемых линий.

Тип линии может быть задан с помощью одной из следующих констант:

Const

SolidLn=0; {Сплошная линия}

DottedLn=1; {Точечная линия}

CenterLn=2; {Штрих-пунктирная линия}

DashedLn=3; {Пунктирная линия}

UserBitLn=4; {Узор линии определяется пользователем}

Образец учитывается только для линий, вид которых определяется пользователем. При этом два байта параметра образец определяют образец линии: каждый установленный в единицу бит этого слова соответствует светящемуся пикселу в линии, нулевой бит – несветящемуся пикселу. Таким образом, параметр образец задает отрезок линии длиной в 16 пиксел. Этот образец периодически повторяется по всей длине линии.

Параметр толщина линии может принимать одно из двух значений:

Const

Norm   {Толщина в один пиксел}

Thick {Толщина в три пиксела}

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

 

    GetLineSettings (StyleInfo) – процедура возвращает текущий стиль линий. Параметр StyleInfo – переменная типа LineSettingsType, в которой возвращается текущий стиль линий. Тип LineSettingsType определен в модуле Graph следующим образом:

Type

LineSettingsType=record

LineStyle:Word; {тип линии}

Pattern:Word;      {образец}

Tickness:Word;   {толщина}

end;

 

    SetWriteMode (режим) – процедура устанавливает способ взаимодействия вновь выводимых линий с уже существующим на экране изображением. Режим – выражение типа Integer, задающее способ взаимодействия выводимых линий с изображением. Если параметр режим имеет значение 0, выводимые линии накладываются на существующее изображение обычным образом. Если значение 1, то это наложение осуществляется с применением логической операции Xor (исключающее или): в точках пересечения выводимой линии с имеющимся на экране изображением светимость пиксел инвертируется на обратную, так что два следующих друг за другом вывода одной и той же линии на экран не изменяет его вид. Режим, установленный процедурой SetWriteMode, распространяется на процедуры Drawpoly, Line, LineTo, Rectangle. Для задания параметра режим можно использовать следующие определенные в модуле константы:

Const

CopyPut=0;

XorPut=1;

 

Пример изменения стиля линии:

SetLineStyle(Solid,0,ThickWidth);

Line(1,1,640,350);

Многоугольники

 

Rectangle (x1,y1,x2,y2) – процедура вычерчивает прямоугольник с заданными координатами углов. Здесь (x1,y1) – координаты левого верхнего, (x2,y2) – правого нижнего углов прямоугольника. Прямоугольник вычерчивается с использованием текущего цвета и стиля линий.

 

DrawPoly (n,Points) – процедура вычерчивает произвольную ломаную линию, заданную координатами точек излома. Здесь n – количество точек излома, включая обе крайние точки, Points – переменная типа PointType, содержащая координаты точек излома. Координаты точек излома задаются парой значений типа Word: первое определяет горизонтальную, второе – вертикальную координаты. Для них можно использовать следующий определенный в модуле тип:

Type

PoitType=record

x,y:Word

end;

При вычерчивании используется текущий цвет и стиль линий.

Пример. С помощью ломаной линии нарисовать заданную фигуру.

Uses Graph,Crt; Type  Tmas=array [1..10]    of PointType; {определяем массив записей, содержащий координаты вершин фигуры} Const  mas:Tmas=((x:150;y:200),       (x:50;y:100),       (x:100;y:50),       (x:150;y:100),       (x:50;y:200),       (x:50;y:100),       (x:150;y:100),       (x:150;y:200),       (x:50;y:200),       (x:150;y:200)); Var Driver, Mode:Integer; Begin Driver:=Detect; InitGraph(Driver,Mode,''); SetLineStyle(0,0,3); {рисуем фигуру} DrawPoly(10,mas); ReadLn; CloseGraph; End.   Стрелками указан начальный порядок обхода вершин

 

Дуги, окружности, эллипсы

 

Circle (x,y,радиус) – процедура вычерчивает окружность с центром в точке (x,y) заданного радиуса.

 

Arc (x,y,начальный_угол,конечный_угол,радиус) – процедура чертит дугу окружности с центром в точке (x,y) от начального до конечного угла заданного радиуса. Углы отсчитываются против часовой стрелки и указываются в градусах. Нулевой угол соответствует горизонтальному направлению вектора слева направо.

 

GetArcCoords (Coords) – процедура возвращает координаты трех точек: центра, начала и конца дуги. Coords – переменная типа ArcCoordsType, которая определена в модуле Graph следующим образом:

Type

ArcCoordsType=record

x, y: Integer;                      {координаты центра}

Xstart, Ystart: Integer; {начало дуги}

Xend, Yend: Integer     {конец дуги}

end;

 

Ellipse (x,y,начальный_угол, конечный_угол, x_радиус, y_радиус) – процедура вычерчивает эллипсную дугу с центром в точке (x,y) от начального до конечного угла заданными горизонтальным x-радиусом и вертикальным y -радиусом.

 

Краски, палитра, заполнение

 

SetColor (цвет) – процедура устанавливает цвет выводимых линий и символов. Цвет определяется одной из следующих констант, находящихся в модуле Graph:

Const

Black=0;               {черный}

Blue=1;                  {синий}

Green=2;               {зеленый}

Cyan=3;                  {голубой}

Red=4;                    {красный}

Magenta=5;          {сиреневый}

Brown=6;               {коричневый}

LightGray=7;    {светло-серый}

DarkGray=8;       {темно-серый}

LightBlue=9;    {голубой}

LightGreen=10; {светло-зеленый}

LightCyan=11; {светло-голубой}

LightRed=12;    {светло-красный}

LightMagenta=13; {светло-сиреневый}

Yellow=14;          {желтый}

White=15;   {белый}

 

 

    GetColor – функция возвращает значение типа Word, содержащее код текущего цвета.

 

    GetMaxColor – функция возвращает значение типа Word, содержащее максимальный доступный код цвета, который можно использовать для обращения к SetColor.

 

SetBkColor (цвет) – процедура устанавливает цвет фона.

 

GetBkColor – функция возвращает значение типа Word, содержащее текущий цвет фона.

 

SetPalette (n, Color) – процедура заменяет один из цветов палитры на новый цвет. Здесь n – номер цвета в палитре, Color – номер вновь устанавливаемого цвета.

 

GetPalette (PaletteInfo) – процедура возвращает размер и цвета текущей палитры. Здесь PaletteInfo – переменная типа PaletteType, возвращающая размер и цвета палитры. В модуле Graph определена константа

Const

MaxColors=15;

и тип

Type

PaletteType=record

Size:Word; {количество цветов в палитре}

Colors: array [0..MaxColors] of ShortInt

                    {номера входящих в палитру цветов}

         end;

 

SetAllPalette (Palette) – процедура изменяет одновременно несколько цветов палитры. Параметр Palette в заголовке процедуры описан как нетипизированный. Первый байт этого параметра должен содержать длину n палитры, остальные n байт номера вновь устанавливаемых цветов в диапазоне от –1 до MaxColors. Код –1 означает, что соответствующий цвет исходной палитры не меняется.

 

GetPaletteSize – функция возвращает значение типа Integer, содержащее размер палитры (максимальное количество доступных цветов).

    GetDefaultPalette (Palette) – процедура возвращает структуру палитры, устанавливаемую по умолчанию. Здесь Palette – переменная типа PaletteType, в которой возвращаются размер и цвета палитры.

 

SetFillStyle (тип_заполнения, цвет) – устанавливает стиль заполнения фигур и цвет. Тип заполнения определяется одной из следующих констант, находящихся в модуле Graph:

С onst

EmptyFill=0;    {заполнение фоном (узор отсутствует)}

SolidFill=1;    {сплошное заполнение}

LineFill=2;       {заполнение - - - - }

LtSlashFill=3; {заполнение /////}

SlashFill=4;    {заполнение утолщенными //////}

BkSlashFill=5 {заполнение утолщенными \\\\\\}

LtBkSlashFill=6; {заполнение \\\\\\\\\}

HatchFill=7;    {заполнение ++++++++}

XHatchFill=8; {заполнение ххххххх}

InterleaveFill=9; {заполнение в прямоугольную клеточку}

WideDotFill=10; {заполнение редкими точками}

CloseDotFill=11; {заполнение частыми точками}

UserFill=12;    {узор определяется пользователем}

    Если тип заполнения имеет значение UserFill, то рисунок узора определяется программистом путем обращения к процедуре SetFillPattern.

 

SetFillPattern (Pattern,цвет) – процедура устанавливает образец рисунка и цвет штриховки. Здесь Pattern – выражение типа FillPatternType устанавливает образец рисунка для UserFill в процедуре SetFillStyle.

Образец рисунка задается в виде матрицы из 8´8 пиксел и может быть представлен массивом из 8 байт следующего типа:

Type

FillPatternType=array[1..8] of Byte;

    Каждый разряд любого из этих байтов управляет светимостью пиксела, причем первый байт определяет 8 пиксел первой строки на экране, второй байт – 8 пиксел второй строки и т.д.

    Пример двух образцов заполнения. Для каждых 8 пиксел приводится шестнадцатиричный код соответствующего байта.

 

Образец 1

Значение байта

Образец 2

Значение байта
                $49                 $00
                $92                 $18
                $49                 $24
                $92                 $42
                $49                 $42
                $92                 $24
                $49                 $18
                $92                 $00

    Закрашенный квадрат соответствует 1, незакрашенный – 0. Таким образом, получаем двоичное представление шестнадцатеричного числа, например первая строка первого образца: 01001001 – двоичное представление шестнадцатеричного числа 49.

    Пример использования процедуры SetFillPattern. Программа рисует на экране 2 прямоугольника и заполняет их указанными образцами.

Uses  

Graph,Crt;

Const

Patt1:FillPatternType=

($49,$92,$49,$92,$49,$92,$49,$92);

Patt2:FillPatternType=

($00,$18,$24,$42,$42,$24,$18,$00);

Var

Driver, Mode:Integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

SetFillStyle(UserFill,White);

{левый верхний квадрат}

SetFillPattern(Patt1,1);

Bar(0,0, GetMaxX div 2, GetMaxY div 2);

{правый нижний квадрат}

SetFillPattern(Patt2,2);

Bar(GetMaxX div 2,GetMaxY div 2,GetMaxX,GetMaxY);

ReadLn;

CloseGraph;

End.

 

    GetFillPattern (Pattern) – процедура возвращает образец заполнения, установленный ранее процедурой SetFillPattern. Pattern – переменная типа FillPatternType, в которой возвращается образец заполнения. Если программа не устанавливала образец с помощью процедуры SetFillPattern, массив Pattern заполняется байтами со значением 255 ($FF).

 

    GetFillSettings (PattInfo) – процедура возвращает текущий стиль заполнения. Здесь переменная PattInfo типа FillSettingsType, в которой возвращается текущий стиль заполнения. В модуле Graph определен тип:

Type

FillSettingsType=record

                Pattern :Word;    {образец}

                Color :Word       {цвет}

              end;

 

FloodFill (x,y,цвет_границы) – заполняет произвольную замкнутую фигуру, используя текущий стиль заполнения до границы заданного цвета, (x,y) – произвольная точка внутри фигуры. Если фигура незамкнута, заполнение «разольется» по всему экрану.

Пример. Демонстрируем заливку маленького прямоугольника:

SetFillStyle(LtSlashFill,GetMaxColor);

Rectangle(0,0,8,20);

FloodFill(1,1,GetMaxColor);

 

Bar (x1,y1,x2,y2) – процедура заполняет прямоугольную область экрана текущим заполнителем. Здесь (x1,y1) – координаты левого верхнего, (x2,y2) – правого нижнего углов закрашиваемой области.

 

Bar3d (x1,y1,x2,y2,Depth,Top) – процедура вычерчивает трехмерное изображение параллелепипеда и закрашивает его переднюю грань. Здесь (x1,y1) – координаты левого верхнего, (x2,y2) – правого нижнего углов передней грани, Depth – переменная типа Integer, третье измерение трехмерного изображения («глубина») в пикселах, Top – переменная типа Boolean, способ изображения верхней грани. Если параметр Top имеет значение True, верхняя грань параллелепипеда вычерчивается, в противном случае – не вычерчивается. В качестве значение этого параметра может использоваться одна из следующих определенных в модуле Graph констант:

Const

TopOn =True;

TopOff=False;

    При вычерчивании используется текущий стиль линий (SetLineStyle) и текущий цвет (SetColor). Передняя грань заливается текущим стилем заполнения (SetFillStyle).

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

 

    FillPoly (n,Coords) – процедура обводит линией и закрашивает замкнутый многоугольник. Здесь n – количество вершин замкнутого многоугольника, Coords – переменная типа PoinType, содержащая координаты вершин. Координаты вершин задаются парой значений типа Integer: первое определяет горизонтальную, второе – вертикальную координаты. Для них можно использовать следующий определенный в модуле тип:

Type

PointType=record

x,y:Integer

end;

Стиль и цвет линий контура задаются процедурами SetLineStyle и SetColor, тип и цвет заливки – процедурой SetFillStyle.

(200,50)
    Пример использования процедуры FillPoly. Рисуем и закрашиваем замкнутый многоугольник.

Uses Graph,Crt; Type Tmas=array [1..7]      of PointType; {определяем массив записей вершин фигуры} Const mas:Tmas=     ((x:200;y:50),      (x:250;y:100),      (x:250;y:200),      (x:200;y:250),      (x:150;y:200),      (x:150;y:100),      (x:200;y:50)); Var Driver, Mode:Integer; Begin Driver:=Detect; InitGraph(Driver,Mode,''); {стиль линии} SetLineStyle(SolidLn,0,          ThickWidth); {стиль заполнения, синий фон} SetFillStyle(SolidFill,Blue); {цвет границы – красный} SetColor(Red); FillPoly(7,mas); ReadLn; CloseGraph; End. Ã  

 

FillEllipse (x,y,x _радиус,y _радиус) – процедура обводит линией и заполняет эллипс. Здесь (x,y) – координаты центра, x _радиус,y _радиус – горизонтальный и вертикальный радиусы эллипса в пикселах. Эллипс обводится линией, заданной процедурами SetLineStyle и SetColor, и заполняется с использованием параметров, установленных процедурой SetFillStyle.

 

Sector (x,y, начальный_угол, конечный_угол, x _радиус, y _радиус) – вычерчивает и заполняет эллипсный сектор с центром в точке (x,y) от начального до конечного угла заданными x _радиусом по горизонтали и y -радиусом по вертикали.

 

PieSlice (x,y,начальный_угол,конечный_угол,радиус) – вычерчивает и заполняет сектор окружности с центром в точке (x,y) от начального до конечного угла заданным радиусом. Сектор обводится линией, заданной процедурами SetLineStyle и SetColor и заполняется с помощью параметров, определенных процедурой SetFillStyle. Процедуру удобно использовать при построении круговых диаграмм.

 

Вывод текста

 

OutText (текст) – процедура выводит текстовую строку, начиная с текущего положения указателя.

 

OutTextXY (x,y,текст) – процедура выводит строку, начиная с позиции (x,y).

 

SetTextStyle(шрифт,направление,размер) – процедура устанавливает стиль текстового вывода на графический экран. Здесь шрифт – код (номер) шрифта; направление – код направления; размер – код размера шрифта.

Код шрифта задается одной из следующих предварительно определенных констант:

Const

DefaultFont=0;    {Точечный шрифт 8x8}

TriplexFont=1;        {Утроенный шрифт TRIP.CHP}

SmallFont=2;              {Уменьшенный шрифт LITT.CHR}

SansSerifFont=3;   {Прямой шрифт SANS.CHR)

GothicFont=4;           {Готический шрифт GOTH.CHR}

Шрифт DefaultFont входит в модуль Graph и доступен в любой момент. Это – единственный матричный шрифт, т.е. его символы создаются из матриц 8x8 пиксел. Все остальные шрифты – векторные: их элементы формируются как совокупность векторов (штрихов), характеризующихся направлением и размером. Векторные шрифты отличаются более богатыми изобразительными возможностями, но главная их особенность заключается в легкости изменения размеров без существенного ухудшения качества изображения. Каждый из этих шрифтов размещается в отдельном дисковом файле. Если нужно использовать какой-либо векторный шрифт, соответствующий файл должен находиться в текущем каталоге, в противном случае вызов этого шрифта игнорируется и подключается стандартный шрифт.

Для задания направления выдачи текста можно использовать константы:

Const

HorizDir=0; {Слева направо}

VertDir=1; {Снизу вверх}

Каждый шрифт способен десятикратно изменять свои размеры. Размер выводимых символов может иметь значение в диапазоне от 1 до 10 (точечный шрифт – в диапазоне от 1 до 32). Если значение параметра равно 0, устанавливается размер 1, если больше 10 – размер 10.

SetTextJustify(горизонтальное_выравнивание, вертикальное_выравнивание) – процедура задает выравнивание выводимого текста по отношению к текущему положению указателя или к заданным координатам. Выравнивание определяет, как будет размещаться текст – левее или правее указанного места, выше, ниже или по центру. Здесь можно использовать константы:

Const

LeftText=0;     {Указатель слева от текста}

CenterText=1;  {Симметрично слева и справа, cверху и снизу}

RightText=2;        {Указатель справа от текста}

BottomText=0;  {Указатель снизу от текста}

TopText=2;     {Указатель сверху от текста}

 

SetUserCharSize(x1,х2,y1,y2) – процедура изменяет размер выводимых символов в соответствии с заданными пропорциями.  Здесь x1,x2,y1,y2 выражения типа Word, определяющие пропорции по горизонтали и вертикали. Процедура применяется только по отношению к векторным шрифтам. Пропорции задают масштабный коэффициент, показывающий во сколько раз увеличится ширина и высота выводимых символов по отношению к стандартно заданным значениям. Коэффициент по горизонтали находится как отношение x1 к x2, по вертикали – как отношение y1 к y2. Чтобы, например, удвоить ширину символов, необходимо задать x1=2 и x2=1. Стандартный размер символов устанавливается процедурой SetTextStyle, которая отменяет предшествующее ей обращение к SetUserCharSize.

 

TextWidth (текст) – функция возвращает длину в пикселах выводимой текстовой строки. Учитываются текущий стиль вывода и коэффициенты изменения размеров символов, заданные соответственно процедурами SetTextStyle и SetUserCharSize.

 

    TextHeight (текст) – функция возвращает высоту шрифта в пикселах.

 

GetTextSettings (TextInfo) – процедура возвращает текущий стиль и выравнивание текста. Здесь TextInfoпеременная типа TextSettingsType, который в модуле Graph определен следующим образом:

Type

TextSettingsType=record

Font :Word; {Номер шрифта}

Direction:Word; {Направление}

CharSize :Word; {Код размера}

Horiz    :Word; {Горизонтальное выравнивание}

Vert     :Word   {Вертикальное выравнивание)

end;

 

InstallUserFont (имя_файла) – функция позволяет программе использовать нестандартный векторный шрифт, который находится в указанном файле. Файл должен располагаться в текущем каталоге. Функция возвращает идентификационный номер нестандартного шрифта, который может использоваться при обращении к процедуре SetTextStyle.

 

    Пример работы со шрифтами и выравниванием текста следующего вида:

    Текст сверху справа
Текст слева снизу    

Uses Crt,Graph;

Var

Driver, Mode:Integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

{Выводим перекрестные линии в центре экрана}

Line(0,GetMaxY div 2, GetMaxX,GetMaxY div 2);

Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);

{Располагаем текст справа сверху от центра}

SetTextStyle(TriplexFont,HorizDir,3);

SetTextJustify(LeftText,BottomText);

OutTextXY(GetMaxX div 2,GetMaxY div 2,

       'Текст справа сверху');

{Располагаем текст слева и снизу от центра}

SetTextJustify(RightText,TopText);

OutTextXY(GetMaxX div 2,GetMaxY div 2,

       'Текст слева снизу');

Readln;

CloseGraph;

End.

Дата: 2018-11-18, просмотров: 274.