Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по паскалю экзамен 26-50.docx
Скачиваний:
39
Добавлен:
23.09.2019
Размер:
3.23 Mб
Скачать

Вопрос 32. Процедуры и функции для работы с "графическими примитивами".

procedure SetPixel(x,y,color: integer);

Закрашивает один пиксел с координатами (x,y) цветом color.

function GetPixel(x,y): integer;

Возвращает текущее значение цвета для пиксела с координатами (x,y).

procedure MoveTo(x,y: integer);

Передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).

procedure LineTo(x,y: integer);

Рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).

procedure Line(x1,y1,x2,y2: integer);

Рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).

procedure Circle(x,y,r: integer);

Рисует окружность с центром в точке (x,y) и радиусом r.

procedure Ellipse(x1,y1,x2,y2: integer);

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

procedure Rectangle(x1,y1,x2,y2: integer);

Рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).

procedure RoundRect(x1,y1,x2,y2,w,h: integer);

Рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.

procedure Arc(x,y,r,a1,a2: integer);

Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).

procedure Pie(x,y,r,a1,a2: integer);

Рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

procedure Chord(x,y,r,a1,a2: integer);

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

procedure TextOut(x,y: integer; s: string);

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

procedure FloodFill(x,y,color: integer);

Заливает область одного цвета цветом color, начиная с точки (x,y).

procedure FillRect(x1,y1,x2,y2: integer);

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

procedure Polygon(var a; n: integer);

Строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

procedure Polyline(var a; n: integer);

Строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.

Вопрос 33. Процедуры для работы с текстом.

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

OutText(S); - вывод строки S (типа string) в текущей позиции курсора.

OutTextXY(x,y,S); - вывод строки S в позиции с координатами (x, y).

Строку S можно определять явно в виде символов, заключенных в апострофы, например, OutText('Sample 1');, или как переменную (константу) типа string. Если требуется вывести значение переменной числового типа, то необходимо приме-нить процедуру ее преобразования в строковый тип. Например: Str(x:10:5,S); - определяем переменную "S" (типа string), полученную преобразованием переменной "x" (вещественного типа) по указанному формату.

Перечислять несколько переменных через запятые (подобно параметрам функций write и writeln) в графических функциях вывода текста не допускается. При выводе нескольких строковых переменных они соединяются знаком "+" , например: OutText('x='+ S);

Для установки стиля вывода текста используется процедура

SetTextStyle(F, D, Z);

где F - номер шрифта, D - направление вывода надписи, Z - увеличение размера относительно базового варианта. Параметры F, D, Z - типа Word.

Шрифт в графическом режиме может создаваться двумя методами. В первом типе шрифта - матричном, берется стандартный шрифтовой набор BIOS ПК, где каждому символу соответствует матрица 8*8 пикселов. Матричный шрифт используется по умолчанию. Изменение размера матричного шрифта производится увеличением исходной матрицы в N-раз: 8N*8N пикселов. При увеличении размера явно проявляется "грубость" матричного шрифта.

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

В стандартном наборе BGI определено:

F = 0 (DefaultFont) - 8х8 пикселов - матричный шрифт,

векторные шрифты:

F = 1 (TriplexFont) - триплекс (полужирный),

F = 2 (SmallFont) - уменьшенный,

F = 3 (SansSerifFont) - прямой (книжный),

F = 4 (GothicFont) - готический.

Направление шрифта: D= 0 - по горизонтали слева направо,

D= 1 - по вертикали снизу вверх, символы повернуты на 900.

Увеличение размера Z варьируется от 1 до 31 для матричного шрифта и от 1 до 10 для векторных шрифтов. Причем базовый размер соответствует для матричного шрифта Z= 1, для векторного шрифта Z= 4. При Z= 0 базовый размер устанавливается по умолчанию.

Для векторного шрифта, можно изменить его пропорции относительно базового размера процедурой

SetUserCharSize(XN, X, YN, Y);

При этом (XN/X) - множитель для изменения ширины символов, (YN/Y) - множитель для изменения высоты символов. Параметры XN, X, YN, Y - типа Word.

Текст можно выравнивать относительно позиции его вывода с помощью процедуры

(0,2) (1,2) (2,2)

SetTextJustify(H, V); * * *

(0,1)*_ЦЕНТРИРУЕМЫЙ ТЕКСТ*(2,1)

* * *

Выравнивание по горизонтали: (0,0) (1,0) (2,0)

H = 0 - текст справа от позиции вывода, В скобках указаны значения H, V.

H = 1 - центрирование текста,

H = 2 - текст слева от позиции вывода.

Выравнивание по вертикали:

V = 0 - текст выше позиции вывода,

V = 1 - центрирование текста,

V = 2 - текст ниже позиции вывода.

По умолчанию установлено H= 0, V= 2.

Длину строки S (в пикселах) можно определить функцией TextWidth(S);

Высота строки S определяется функцией TextHeight(S);

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

Цвет текста в графике устанавливается процедурой SetColor(N); где N-номер цвета.

{ -------- Пример программы, демонстрирующей различные шрифты: --------- }

uses Graph;

var Gd, Gm, k, X, Y, Size: integer; S: string;

begin

Gd:= Detect; InitGraph(Gd, Gm, 'c:\tp7\bgi');

X:= 0; Y:= 0; { начальные координаты вывода текста }

for Size:= 1 to 10 do begin k:= 0; { перебор размеров шрифта }

SetTextStyle(k,0,Size); Str(Size,S);{ пишем матричным шрифтом }

OutTextXY(X, Y, 'Size=' + S);

Y:= Y + TextHeight('S') + 1 { смещение по "Y" на высоту буквы "S" }

end;

Readln; ClearDevice;

SetTextJustify(1,2); { выравнивание по центру }

for k:= 1 to 4 do begin { пишем векторными шрифтами }

Y:= 0; SetColor(k+8);

for Size:=1 to 10 do begin { перебор размеров шрифта }

SetTextStyle(k, 0, Size); Str(Size, S);

OutTextXY( GetmaxX div 2, Y, 'Size='+S);

Y:= Y + TextHeight('S') + 1;

end;

Readln; ClearDevice

end; CloseGraph

end.