Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
141.82 Кб
Скачать

5.2.8 Вывод текста

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

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

Формат вызова процедуры в программе:

OutText(Txt);

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

Процедура OutTextXY. Процедура OutTextXY выводит строку с заданного места.

Формат вызова процедуры в программе:

OutTextXY(X, Y ,Txt);

Переменные X,Y типа Integer - координаты точки начала вывода текста, Txt - переменная или костанта типа string (выводимая строка).

Замечание. В модуле Graph нет процедур, предназначенных для вывода численных данных. Для вывода данных такого типа нужно сначала преобразовать число в строку с помощью процедуры Str, а затем посредством операции конкатенации подключить ее к выводимой строке Txt в процедуре OutTextXY.

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

Формат вызова процедуры в программе:

SetTextStyle(Font, Direct, Size);

Переменные Font, Direct, Size типа Word. Font - код шрифта; Direct - код направления; Size - код размера шрифта. Для указания кода шрифта можно использовать следующие, предварительно определенные константы:

const

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

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

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

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

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

Шрифт DefaultFont создается графическим драйвером в момент инициации графики.

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

const

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

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

Процедура SetTextJustify. Процедура SetTextJustify задает вырав-нивание выводимого текста по отношению к текущему положению указателя или к заданным координатам.

Формат вызова процедуры в программе:

SetTextJustify(Horiz, Vert);

Переменные Horiz, Vert типа Word. Horiz горизонтальное , Vert - вертикальное выравнивание.

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

const

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

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

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

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

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

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

Формат вызова процедуры в программе:

SetUserCharSize(X1, X2, Y1, Y2);

Переменные X1..Y2 - выражения типа Word, определяющие пропорции по горизонтали и вертикали.

Функция TextWidth. Функция TextWidth возвращает длину выводимой текстовой строки в пикселях.

Формат обращения к функции в программе:

N:=TextWidth(Txt);

Переменная N типа Word, переменная Txt типа string.

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

Формат обращения к функции в программе:

N:=TextHeight(Txt);

Переменная N типа Word, переменная Txt типа string.

Пример 1. Программа выводит на экран разноцветные линии, выходящие из середины нижней границы экрана (веер).

program Ris_1;

uses Crt, Graph;

var

Driver, Mode: integer;

color: word;

x, y: integer;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

Randomize; color:=0;

repeat

x:=random(GetMaxX); y:=random(GetMaxY);

setcolor(color); line(320,480,x,y); inc(color);

if color=GetMaxColor then color:=0;

until keypressed;

closegraph

end.

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

program Ris_2;

uses Crt, Graph;

const n=1000;{количество звезд}

type

Pixel_type=record x,y:integer end;

var

Driver,Mode,e,k: integer;

color: word;

x1,y1,x2,y2: integer;

a: array[1..n] of Pixel_type;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

e:=GraphResult;

if e<>0 then writeln('ошибка инициализации – ',e)

else

begin

{создаем окно в центре экрана}

x1:=GetMaxX div 4; y1:=GetMaxY div 4;

x2:=3*x1; y2:=3*y1;

Rectangle(x1, y1, x2, y2);

SetViewPort(x1 + 1, y1 + 1, x2 – 2, y2 – 2, ClipOn);

{создаем и запоминаем звезды}

for k:=1 to n do

with a[k] do

begin x:=Random(x2 – x1); y:=Random(y2 – y1) end;

{Зажигаем и гасим звезды}

color:=0;

repeat

for k:=1 to n do

begin

inc(color);

if color=GetMaxColor then color:=0;

with a[k] do

PutPixel(x,y,color); delay(100)

end;

if not KeyPressed then

for k:=n downto 1 do

with a[k] do

PutPixel(x,y,black);

until KeyPressed;

CloseGraph

end

end.

Пример 3. Программа выводит на экран пятиугольник и закрашивает его голубым цветом (при нажатии клавиши ввода), красным в полоску.

program Ris_2;{мноугольник}

uses Crt, Graph;

type

point = record

x, y: integer

end;

const points: array[1..6] of point = ((x: 120; y: 20), (x: 220; y: 20),

(x: 320; y: 120), (x: 220; y: 320), (x: 120; y: 200), (x: 120; y: 20));

var

Driver, Mode: integer;

color: word;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

SetColor(4);

DrawPoly(6,points); readln;

SetFillStyle(1,11);

FloodFill(130,25,4); readln;

SetFillStyle(3,12);

FillPoly(6,points);

readln;

CloseGraph

end.

Пример 4. Программа выводит на экран окружность, эллипс, дугу и сектор.

program Ris_4;

uses Crt, Graph;

var

Driver, Mode: integer;

color: word;

x, y: integer;

xr,yr,r: word;

angl1,angl2: word;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

SetColor(4);

x:=100; y:=200; r:=50;

SetFillStyle(1,11);

Circle(x,y,r);

FloodFill(100,200,4); readln;

x:=250; xr:=50; yr:=100; r:=100;

SetFillStyle(1,12);

Ellipse(x,y,0,360,xr,yr);

FloodFill(250,200,4); readln;

SetFillStyle(3,12);

FillEllipse(530,140,60,90); readln;

Arc(500,300,0,100,50); readln;

SetColor(10); SetFillStyle(1,10);

PieSlice(430,400,10,100,70); readln;

CloseGraph

end.

Пример 5. Программа выводит на экран рисунок – паровозик.

program Ris_5;

uses Graph, crt;

var

Driver, Mode, e: integer;

color: word;

procedure paravoz;

begin {паравозик}

SetBkColor(7);

SetFillStyle(1,4); Rectangle(80,240,420,360);

FloodFill(90,245,15);

SetFillStyle(1,2); Bar(420,120,560,360);

SetFillStyle(1,15);Bar(450,150,530,230);

SetFillStyle(1,4); Bar(130,240,180,180);

end;

procedure kolesa;

var x: integer;

begin {колеса}

x:=180;

SetFillStyle(1,1);

While x<= 520 do

begin

circle(x,390,30);

FloodFill(x,390,15);

x:=x+70

end;

end;

procedure dim;

var x,y,r:integer;

begin {дым}

y:=120; x:=160; r:=25;

SetColor(15);

while y>=10 do

begin

circle(x,y,r);

x:=x+20; y:=y-20; r:=r-4;

end

end;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

e:=GraphResult;

if e<>0 then writeln('ошибка инициализации -', e);

Color:=15;

paravoz; kolesa;dim;

delay(30000){задержка изображения на экране}

end.

Пример 6. Программа выводит на экран пирамиду.

program Ris_6;{пирамида}

uses Crt, Graph;

var

Driver, Mode: integer;

color: word;

x,y: integer; z: string;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

Color:=15; z:='PIRAMIDA';

SetTextStyle(0, 0, 3);

OutTextXY(100, 10, z);

SetLineStyle(3, 0, 1);

Line(320, 40, 320, 335); {SO}

Line(200, 300, 450, 300); {AB}

SetLineStyle(0, 0, 1);

Line(320, 40, 200, 300); {SA}

Line(320, 40, 450, 300); {SB}

Line(320, 40, 360, 400); {SC}

Line(200, 300, 360, 400); {AC}

Line(360, 400, 450, 300); {BC}

SetTextStyle(1, 0, 2);

OutTextXY(325, 20, 'S');

OutTextXY(460, 300, 'B');

OutTextXY(360, 410, 'C');

OutTextXY(190, 300, 'A');

OutTextXY(300, 320, 'O');

Delay(50000)

end.

Пример 7. Программа выводит на экран график функции.

program Ris_7;

uses Crt, Graph;

var

Driver, Mode: integer;

color: word;

i,xg,yg: integer;

x: real;

begin

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

SetColor(15); SetBkColor(0);

Line(10,90,250,90); Line(10,20,10,160);

x:=0; SetLineStyle(0,0,3);

for i:=0 to 190 do

begin

xg:=10+round(95/pi*x); yg:=90-round(50*sin(x));

PutPixel(xg,yg,11);

x:=x+pi/95

end;

OutTextXY(15,25,'Y');

OutTextXY(255,90,'X');

OutTextXY(100,40,'y=sinx');

Readln;

CloseGraph

end.

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

program Ris_8;

uses Crt, Graph;

var Driver, Mode: integer; color: word;

x,y,n,r,r1: integer; k1,k2:real;

procedure Picture(x,y,r,r1,n:integer);

var x1,y1:integer; i:integer;

begin

if n>0 then

begin

circle(x,y,r);r1:=trunc(r*k2);

for i:=1 to 4 do

begin x1:=trunc(x+r1*cos(pi/2*i)); y1:=trunc(y+r1*sin(pi/2*i));

picture(x1,y1,trunc(r*k1),r1,n-1);

end;

end;

end;

begin

Write('Введите количество уровней n – '); Readln(n);

Write('Введите радиус первой окружности r – '); Readln(r);

x:=600 div 2; y:=400 div 2;

k1:=0.3; k2:=2;

Driver:= Detect;

InitGraph(Driver,Mode,'c:\bp\bgi');

Picture(x,y,r,r1,n);

readln;

CloseGraph

end.

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