Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование. Модуль GRAPH. Модульное и объектное программирование. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
841 Кб
Скачать

21

вычерчивается, в противном случае – не вычерчивается. Этот вариант используется для изображения поставленных друг на друга параллелепипедов.

Пример: Построить два параллелепипеда на фиолетовом фоне, один из которых заполнен кружками, другой – редкими точками.

Program MyNew; Uses

CRT, Graph;

Const

Pat1: FillPatternType= ($49, $92, $49, $92, $49, $92, $49, $92);

Var

GrDriver, GrMode: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI'); SetBkColor (Magenta);

SetColor (Green); SetFillStyle (UserFill, Red); SetFillPattern (Pat2, Blue);

Bar3d (10, 50, 150, 250, 45, TopOn); SetFillStyle (10, Blue);

Bar3d (250, 50, 450, 250, 45 TopOn); Readln;

CloseGraph;

End.

В качестве значения параметра Top может использоваться одна из следующих констант, определенных в модуле Graph.

Const

TopOn= True;

TopOff= False;

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

Program MyOwn; Uses

CRT, Graph;

Const

Pat2: FillPatternType= ($00, $18, $24, $42, $42, $24, $18, $00);

Var

GrDriver, GrMode: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI');

22

SetColor (Green);

SetFillStyle (UserFill, Red);

SetFillPattern (Pat2, Blue);

Bar3d (80, 100, 120, 180, 15, TopOn);

Bar3d (150, 150, 190, 180, 15, TopOff);

Bar3d (150, 50, 190, 150, 15, TopOn);

Bar3d (300, 150, 340, 180, 15 TopOn);

Readln;

CloseGraph;

End.

Результатом выполнения программы является:

Процедура FillPoly

Обводит линией и закрашивает замкнутый многоугольник.

Заголовок: Procedure FillPoly (N;Word, var Coords);

Здесь, N –количество вершин замкнутого многоугольника. Coords – переменная типа PointType, содержащая координаты вершин.

Координаты вершин задаются парой значений типаInteger: первое определяет горизонтальную, второе – вертикальную координату. Для них можно использовать следующий определенный в модуле тип:

Type:

PointType= Record x, y: Integer

End;

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

Пример: Изобразить в центре экрана пятиконечную звезду красного цвета со штрих пунктирной линией зеленого цвета.

(300, 70)

(150, 150)

(450, 150)

(200, 300)

(400, 300)

23

Program Zvezda; Uses

Graph;

Type

Cs= array [1..6, 1..2] of Integer;

Const

ass:cs= ((300, 70), (200, 300), (450, 150), (150, 150), (400, 300), (300, 70));

Var

GrDriver, GrMode: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI'); SetBkColor (Blue);

SetLineStyle (2, 2, 1); SetColor (Green); SetFillStyle (1, Red); FillPoly (6, ass); Readln; CloseGraph;

End.

Процедура FillEllipse

Обводит линией и заполняет эллипс.

Заголовок: Procedure FillEllipse (X, Y, RX, RY: integer);

Здесь, X и Y –координаты центра, RX и RY –горизонтальный и вертикальный радиусы эллипса в пикселах.

Эллипс обводится линией, заданной процедурами SetFillStyle, SetColor и заполняется с использованием параметров, установленных процедурой SetFillStyle.

Процедура Sector

Вычерчивает и заполняет эллипсный сектор.

Заголовок: Procedure Sector (X, Y: integer; BegA, EndA, RX, RY: Word);

Здесь, BegA и EndA – начальный конечный углы эллипсного сектора соответственно.

Остальные параметры обращения аналогичны параметрам процедуры FillEllipse.

24

Пример:

Program ZvezdaEllipse; Uses

Graph;

Type

Cs= array [1..6, 1..2] of Integer;

Const

ass:cs= ((300, 70), (200, 300), (450, 150), (150, 150), (400, 300), (300, 70));

Var

GrDriver, GrMode: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI'); SetBkColor (Blue);

SetLineStyle (1, 2, 3); SetColor (White); SetFillStyle (1, Green);

FillEllipse (300, 200, 180, 200); SetLineStyle (1, 2, 1);

SetColor (Magenta); SetFillStyle (2, Magenta);

Sector (300, 200, 50, 54, 180, 200); Sector (300, 200, 125, 129, 180, 200); Sector (300, 200, 184, 188, 180, 200); Sector (300, 200, 270, 274, 180, 200); Sector (300, 200, 352, 356, 180, 200); SetLineStyle (2, 2, 1);

SetColor (Yellow); SetFillStyle (1, Red); FillPoly (6, ass); Readln; CloseGraph;

End.

25

Результатом выполнения этой программы является рисунок:

Процедура PieSlice

Вычерчивает и заполняет сектор окружности.

Заголовок: Procedure PieSlice (X, Y: integer, BegA, EndA, R: Word);

В отличие от процедуры Sector, указывается только один горизонтальный радиус R, остальные параметры аналогичны параметрам процедуры Sector.

Сектор обводится линией, заданной процедурами SetLineStyle и SetColor, и заполняется с помощью параметров, определенных процедурой SetFillStyle. Процедура удобно использовать при построении круговых диаграмм.

Пример:

Program DemoPieSlice; Uses

Graph;

Var

GrDriver, GrMode: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI'); SetBkColor (Blue);

SetLineStyle (1, 2, 1); SetColor (White); SetFillStyle (2, Red);

PieSlice (300, 200, 0, 45, 100); SetFillStyle (5, Green);

PieSlice (300, 200, 46, 359, 100); Readln;

CloseGraph;

End.

26

1.7. Вывод текста

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

С другой стороны, процедуры Write и Writeln после загрузки в память второй половины таблицы знакогенератора способны выводить сообщения с использованием национального алфавита, но не обладают мощными возможностями специальных процедур.

Процедура OutText

Выводит текст.

Заголовок: OutText (Txt: string);

Здесь, Txt – выводимая строка.

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

Процедура OutTextXY

Выводит строку, начиная с заданного места.

Заголовок: OutTextXY (X, Y: integer; Txt: string);

Здесь, X и Y –координаты точки вывода; Txt – выводимая строка. Отличается от процедуры OutText только координатами вывода.

Указатель не меняет своего положения.

Процедура SetTextStyle

Устанавливает стиль текстового вывода на графический экран.

Заголовок: Procedure SetTextStyle (Font, Direct, Size: Word);

Здесь, Font – код (номер) шрифта; Direct – код направления; Size – код размера шрифта.

Для указания кода шрифта можно использовать следующие предварительно определенные константы:

const

DefaultFont =0, {точечный шрифт 8х8} TriplexFont =1; {утроенный шрифт TRIP.CHR} SmallFont =2; {уменьшенный шрифт TTT.CHR SansSerifFont =3; {прямой шрифт SANS.CHR}

27

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

Эти константы определяют все шрифты для версий 4.0, 5.0, 6.0. В версии 7.0 набор шрифтов значительно расширен, однако для шрифтов не предусмотрены мнемонические константы. При обращении к SetTextStyle можно использовать следующие номера шрифтов:

5 scri.shr рукописный шрифт

6simp.shr одноштриховой шрифт

7tscr.shr красивый наклонный шрифт типа TimesHalic

8lcom.shr шрифт типа Times New Roman

9curo.shr шрифт типа Courier увеличенного размера

10bold.shr крупный двухштриховой шрифт

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

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

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

const

HorizDir =0; {Слева направо} VertDir =1; {Снизу вверх}

Стандартные процедуры OutText и OutTextXY способны выводить сообщения лишь в двух возможных направлениях – слева направо или снизу вверх.

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

28

Пример: Написать программу, которая выводит различные шрифты в различных направлениях.

Program DemoShrift; Uses

Graph;

Var

GrDriver, GrMode, i, j: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI');

OutTextXY(250, 10,‘демонстрация типов шрифтов’); OutTextXY(250, 200, ‘шрифт по умолчанию’);

SetBkColor (Blue); For i: = 1 To 10 Do Begin

SetTextStyle (i, 0, 0);

OutTextXY(5, 35*i, ‘New text’);

End;

Readln;

ClearDevice; SetTextStyle (0, 0, 0);

OutTextXY(250,10,‘демонстрация ориентации шрифтов’); OutTextXY(50, 50, ‘исходный шрифт’);

SetTextStyle (0, 1, 0);

OutTextXY(50, 70, ‘наклонный шрифт’);

Readln;

For i: = 1 To 10 Do Begin

ClearDevice; SetTextStyle (0, 0, 0);

OutTextXY(250,10,‘демонстрация размеров шрифтов’); OutTextXY(250, 200, ‘шрифт по умолчанию’);

For i: = 1 To 10 Do Begin

SetTextStyle (i, 0, j);

OutTextXY(5, 35*j, ‘New text’);

End;

Readln;

End;

CloseGraph;

End.

29

Процедура SetTextGustify

Задает выравнивание выводимого по отношению к текущему положению указателя или к заданным координатам.

Заголовок: SetTextGustify (Horiz, Vert: Word);

Здесь, Horiz – горизонтальное, Vert – вертикальное выравнивание. Выравнивание определяет, как будет размещаться текст: левее или

правее указанного места, выше, ниже или по центру. Здесь можно использовать следующие константы:

Const

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

CenterText= 1; {симметрично слева и справа, сверху и снизу} RightText= 2; {указатель справа от текста}

BottomText= 0; {указатель снизу от текста} TopText= 2; {указатель сверху от текста}

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

Program DemoViravniv; Uses

Graph;

Var

GrDriver, GrMode: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI');

OutTextXY(150,10,'демонстрация выравнивания шрифтов'); line (0,250,500,250);

Line (250,50,250,450); SetTextStyle (1,0,1); SetTextJustify (0,0);

OutTextXY(250,250,'LeftText,BottomText '); SetTextJustify (2,0); OutTextXY(250,250,'RightText,BottomText'); SetTextJustify (0,1); OutTextXY(250,250,'LeftText,TopText'); SetTextJustify (2,1); OutTextXY(250,250,'RightText,TopText'); Readln;

ClearDevice;

line (0,250,500,250); Line (250,50,250,450); SetTextJustify (1,0);

OutTextXY(250,250,'CenterText,BottomText');

30

Readln;

ClearDevice;

Line (0,250,500,250);

Line (250,50,250,450); SetTextJustify (1,1);

OutTextXY(250,250,'CenterText,TopText');

Readln;

End.

Процедура SetUserCharSize

Изменяет размер выводимых символов в соответствии с заданными пропорциями.

Заголовок: Procedure SetUserCharSize (X1, X2, Y1, Y2, Word);

Здесь, X1, X2, Y1, Y2 – выражения типа Word, определяющие пропорции по горизонтали и вертикали.

Процедура применяется только по отношению к векторным шрифтам. Пропорции задают масштабный коэффициент, показывающий во сколько раз увеличивается ширина и высота выводимых символов по отношению к стандартно заданным значениям. Коэффициент по горизонтали находится как отношение X1 к X2, по вертикали – как отношение Y1 к Y2. Чтобы, например, удвоить ширину символов, необходимо задать X1 = 2 и X2 = 1. Стандартный размер симолов устанавливается процедурой SetTextStyle, которая отменяет предшествующее ей обращение к SetUserCharSize.

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

Program DemoViravniv; Uses

Graph;

Var

GrDriver, GrMode, i, j: Integer;

Begin

GrDriver:= Detect;

InitGraph (GrDriver, GrMode, 'C: \Bp\BGI'); OutTextXY(150,10,'демонстрация пропорций шрифтов'); SetTextStyle (4,0,5);

SetBkColor (Blue); For i: = 1 To 10 Do

For j: = 1 To 10 Do Begin

ClearDevice;

SetUserCharSize(j,1,i,1); OutTextXY(100,100, 'My Text'); Readln;

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