- •Введение
- •Управление экраном в текстовом режиме
- •Установка текстового режима
- •Установка цвета и фона
- •Управление курсором.
- •Управление строками.
- •Управление звуком.
- •Текстовые окна.
- •Использование клавиатуры.
- •Организация меню пользователя. Элементы псевдографики.
- •Виды меню
- •Использование буфера экрана.
- •Управление экраном в графическом режиме.
- •Стандартные подпрограммы для работы в графическом режиме
- •Установка графического режима.
- •InitGraph (var Driver,Mode:integer; DriverPath:string) -
- •Координаты, графические окна.
- •Выбор цвета, стиля заполнения.
- •Геометрия
- •Точки и линии.
- •Многоугольники
- •Дуги, окружности, эллипсы
- •Вывод текста
- •Сохранение и выдача изображений
- •Дополнительные стандартные подпрограммы для работы в графическом режиме. Анализ графического режима
- •Установки графических окон, страницы
- •Выбор палитры, заполнения
- •Геометрия
- •Установки вывода текста.
- •Организация библиотек пользователя
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Приложение 1. Кодировочная таблица пэвм.
- •Приложение 2. Константы графического режима.
Дуги, окружности, эллипсы
При использовании процедур Arc, Ellipse, PieSlice углы отсчитываются против часовой стрелки и указываются в градусах. Нулевой угол соответствует горизонтальному направлению вектора слева направо. Например, 0 градусов соответствует 3 часам, 90 градусов - 12 часам и т.д.
ARC(X,Y:integer;StAngle,EndAngle,R:word) процедура изображения дуги окружности текущего цвета, где
X,Y - координаты центра;
StAngle - начальный угол;
EndAngle - конечный угол;
R - радиус дуги.
Если начальный угол равен 0, а конечный 360 градусов, на экране будет нарисована окружность.
Информация о последнем вызове Arc может быть получена с помощью процедуры GetArcCoords см. раздел 3.2
Circle(X,Y:integer;R:word) - процедура изображения окружности с центром в точке X,Y радиуса R текущим цветом. Линия всегда сплошная. Процедура выводит правильную окружность ( с учетом коэффициента сжатия изображения ), поэтому параметр R определяет количество пикселей в горизонтальном направлении.
PieSlice(X,Y:integer; StAngle,EndAngle,R:word) - процедура вывода на экран заштрихованного сектора окружности, с центром X,Y. Сектор изображается от начального угла - StAngle, до конечного - EndAngle.
Ellipse(X,Y:integer; StAngle,EndAngle,RX,RY:word) - процедура изображения части эллипса от начального до конечного угла (StAngle) и (EndAngle). При этом центр эллипса находится в точке с координатами X,Y и горизонтальными вертикальными полуосями RX и RY соответственно. При начальном угле равном 0, а конечном 360 будет изображен полный эллипс.
FillEllipse(X,Y:integer;RX,RY:word) - процедура вывода заштрихованного эллипса с центром в точке X,Y, с горизонтальной RX и вертикальной RY полуосями.
Sector(X,Y:integer; StAngle,EndAngle,RX,RY:word) - процедура вывода заштрихованного эллипсного сектора. Все параметры аналогичны параметрам в процедуре Ellipse.
Пример. Вывод всех рассмотренных геометрических фигур.
Uses Graph,Crt;
var
x,y,Driver,Mode:Integer;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'c:\bin\tp');
SetColor(2);
x:=50; y:=50;
OutText(' Circle Ellipse Arc');
Circle(x,y,40);
SetColor(3);
Ellipse(x*3,y,0,360,30,20);
SetColor(1);
Arc(x*6,y,0,180,40);
MoveTo(0,y*2);
OutText(' PieSlice FillEllipse Sector');
PieSlice(x,y*3,0,270,40);
FillEllipse(x*3,y*3,30,20);
Sector(x*6,y*3,0,270,40,30);
readln;
CloseGraph
end.
Вывод текста
Графический модуль Graph имеет ряд процедур и функций,обеспечивающих вывод сообщений различными шрифтами, в горизонтальном и вертикальном направлении с учетом масштабированния, используя установленные процедурами SetTextStyle, SetTextJustify, SetUserCharSize параметры.
Все процедуры вывода текста работают только со строковыми переменными, поэтому вся числовая информация предварительно должна быть преобразована в строковую.
Вывод сообщений на русском языке не осуществляется, т.к. среди стандартных шрифтов отсутствует кириллица.
Стандартный шрифт доступен в модуле в любой момент, т.к. входит в Graph.tpu. Это единственный матричный шрифт, т.е. его символы создаются из матриц 8 * 8 пикселей. Остальные шрифты штриховые : их элементы формируются как совокупность векторов (штрихов), характеризующихся направлением и размером. Преимущество штрихового шрифта в сохранении хорошего качества изображения при изменении размеров выводимых символов.
Каждый из штриховых шрифтов размещается в отдельном файле на диске, поэтому , если в каталоге не найдется файла с соответствующим шрифтом, его вызов игнорируется и подключается
стандартный.
Процедуры Write и Writeln могут выводить сообщения на любом национальном языке после загрузки в память второй половины кодовой таблицы, разработанной заранее.
OutText( Text : string) -процедура вывода текста с текущей позиции. Параметры вывода текста устанавливаются процедурой SetTextJustify. Если текст выходит за границы окна, то при использовании штриховых шрифтов он отсекается, а при установке стандартного штрифта не выводится совсем. При горизонтальном направлении текущий указатель смещается в конец выведенного текста, а при вертикальном - не меняет своего положения.
OutTextXY (x,y:integer; Text:string) - процедура вывода текста, начиная с точки (x,y). Текущий указатель не меняет своего положения.
TextWidth(Text :string):word - функция определения ширины выводимой строки в пикселях. Используется для определения ширины поля вывода, при формировании заголовков в графиках.
TextHeigth(Text : string):word - функция определения высоты выводимой строки в пикселях равной высоте самого высокого символа. Данная процедура используется при вычислении интервала между строками, высоты поля вывода, определения размера заголовка для размещения его в прямоугольнике, на графике и т.д.
Пример.
Uses Graph,Crt;
var
Y,size,Driver,Mode:Integer;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
Y:=0;
for size:=1 to 5 do
begin
SetTextStyle(DefaulFont,HorizDir,Size);
OutTextXY(0,Y,' Turbo Graphics');
Inc(Y,TextHeight(' Turbo Graphics'))
end;
readln;
CloseGraph
End.
SetTextStyle(Font, Direction, CharSize : word) - процедура установки текущего шрифта, типа и коэффициента увеличения символов. Параметр Font, указывающий код шрифта,определяется константами:
const
DelaultFont = 0; { стантартный}
TriplexFont = 1; { шрифт тройной: Trip.chr}
SmallFont = 2; { уменьшенный: Litt.chr}
SansSerifFont = 3; { гротесковый: Sans.chr}
GothicFont = 4; { готический: Goth.chr}
Для указания направления вывода текста используются
константы:
const
HorizDir = 0; { слева направо }
VertDir = 1; { снизу вверх }
Параметр CharSize дает возможность изменять размер выво-
димых символов.
Если CharSize равен 1 (стандартный) шрифт представляется в виде матрицы 8 * 8 пикселов, если равен 2, то на экран отображается матрица 16 * 16 и т.д. для CharSize меньше 0, устанавливается размер равный 1, а если больше 10 - устанавливается 10. По умолчанию фиксируется нормальный размер, равный 4.
Пример. Вывод текста всеми видами шрифтов с расчетом интервала между строк.
Uses Graph,Crt;
var
X,Driver,Mode:Integer;
Font:word;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
X:=0;
for Font:=0 to 4 do
begin
SetTextStyle(Font,VertDir,2);
OutTextXY(X,0,' Turbo Graphics');
Inc(Y,TextWhidth(' Turbo Graphics'))
end;
readln;
CloseGraph
End.
SetUserCharSize(x1, x2, y1, y2 :word) - процедура установки размеров выводимых символов (ширины и высоты), в соответствии с указанными пропорциями x1, x2, y1, y2. Пропорции задают масштабный коэффициент, определяющий во сколько раз увеличивается ширина и высота выводимых символов по отношению к заданным.
Отношение x1 к x2 - коэффициент изменения символа по горизонтали, y1 к y2 - по вертикали.
Например, для увеличения ширины текста в 2 раза, необходимо задать x1 = 2, x2 = 1.
Процедура SetTextStyle отменяет установки шрифта SetUserCharSize.
Пример.
Uses
Graph,Crt;
var
Driver,Mode:Integer;
begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
{ пример изменения размера выводимых симолов }
SetTextStyle(TriplexFont,Horizdir,4);
OutText(' нормальный ');
SetUserCharSize(1,3,1,1);
OutText(' уменьшеный ');
SetUserCharSize(3,1,1,1);
OutText(' увеличенный ');
readln;
CloseGraph
end.
Выравнивание выводимого текста производится относительно
текущего указателя процедурой:
SetTextJustify(Horiz,Vert: word).
Для указания режима выравнивания определены константы:
const
{горизонтальное выравнивание}
LeftText = 0; { слева }
CenterText = 1; { по центру }
RighText = 2; { справа }
{вертикальное выравнивание}
BottomText = 0; { снизу }
CenterText = 1; { по центру }
TopText = 2; { сверху }
Пример обращения к процедуре при выравнивании относитель-
но центра экрана:
SetTextJustify(CenterText,CenterText);
OutText(GetMaxX div 2,GetMaxY div 2,' Hello !!!');