входные параметры соответствуют полям записи типа ViewPortType. После выполнения этой процедуры все текущие установки станут относиться к окну. Текущий указатель (графический курсор) установится в его левый верхний угол, и туда же переносится начало системы координат дисплея. Другими словами, мы получим локальну систему координат устройства. Если параметры процедудуры заданы неправильно, то функция GraphResult возвратит ошибку grError (-11).
Назначение графического окна можно использовать для перемещения начала системы координат. Так, если задать окно вызовом
SetViewPort ( GetMaxX div 2, GetMaxY div 2, GetMaxX , GetMaxY , ClipOff );
то получим систему координат с началом в центре экрана. При этом станет «видимой» адресация отрицательных координат. Графическое окно не меняет масштаба системы координат, а лишь выбирает систему отсчета адресуемых пикселов. Для опроса текущих параметров графического окна служит процедура
GetViewSettings {VAR ViewSettings : ViewPortType )
Если воспользоваться ею сразу же после инициализации графического режима, то обнаружится, что графическим окном является весь экран. Это говорит о том, что для системы безразлично, какое графическое устройство отображает результат, поскольку графическое окно представляет собой некоторый универсальный интерфейс между графической программной системой и графическим устройством вывода.
Для очистки рабочего пространства графического окна в модуле Graph существует специальная процедура
ClearViewPort
Она работает следующим образом:
1. устанавливает цвет заполнения равный текущему цвету фона;
2. вызывает процедуру Ваг с теми же значениями координат; что и у процедуры SetViewPort, вызванной перед этим;
3. перемещает текущий указатель в точку (0,0) .
{ Иллюстрация дейсвия режима "отсечка" }
Program ClipOn_Off;
Uses Graph;
Var d,e,r:integer;
Const
x11=0; y11=40; x12=120; y12=85;
x21=200; y21=y11; x22=320; y22=y12;
Begin
d:=Detect; InitGraph(d,r,'');
e:=GraphResult;
if e<>grOk then
Writeln(GraphErrorMsg(e))
Else
Begin
writeln(' ClipOn: ClipOff');
Rectangle(x11,y11,x12,y12);
Rectangle(x21,y21,x22,y22);
SetViewPort(x11,y11,x12,y12,ClipOn);
Circle(20,20,60);
SetViewPort(x21,y21,x22,y22,ClipOff);
Circle(20,20,60);
readln;
CloseGraph;
End
End.
Вывод текста
Вывод текста в графическом режиме имеет ряд отличий от подобных действий в текстовом режиме. Основное отличие состоит в том, что все действия производятся только со строковыми константами и переменными. Вся числовая информация должна предварительно преобразовываться в строковую процедурой Str . Другое отличие - в том, что можно использовать различные шрифты.
Выбор шрифта и стиля
В комплектах поставки пакета Турбо Паскаль есть файлы с расширением .CHR. Это набор штриховых шрифтов, которые могут быть использованы для вывода информации. Поскольку они построены не матричным способом (как сделаны стандартные шрифты для текстового режима), а векторным, становятся возможными манипуляции размерами шрифтов без потери качества их изображения.
Всего с пакетом Турбо Паскаль поставляется четыре шрифта (хотя можно, используя отдельный специальный пакет, самостоятельно расширить их набор). Кроме того, доступен системный матричный шрифт 8x8 для графических режимов (всегда доступны символы с ASCII-кодами от 0 до 127 и символы с кодами от 128 до 255 при условии, что их матрицы загружены в память ПЭВМ). Для обозначения этих пяти шрифтов введены константы:
CONST
DefaultFont | = 0; | { матричный шрифт 8x8 (по умолчанию)} |
TriplexFont | = 1; | { полужирный шрифт} |
SmallFont | = 2; | { светлый шрифт (тонкое начертание)} |
SansSerifFont | = 3; | { книжная гарнитура (рубленый шрифт)} |
GothicFont | = 4; | { готический шрифт} |
DefaultFont - это матричный шрифт 8x8. Если не принимать никаких действий по смене шрифта, то будет принят именно он.
Активизация любого из названных шрифтов осуществляется процедурой
SetTextStyle (Font, Direction: Word; CharSize: Word)
Здесь параметр Font - номер шрифта (например, одна из описанных выше констант), Direction - расположение текста (по умолчанию принимается горизонтальное). Возможны лишь две ориентации текста, обозначенные константами:
CONST
HorizDir | = 0; | { горизонтальная, слева направо} |
VertDir | =1; | { вертикальная, снизу вверх} |
При значении Direction, равном VertDir, все символы будут повернуты против часовой стрелки на 90° и выводятся снизу вверх. Если задать Direction=2, то буквы будут повернуты так же, как и при Direction=VertDir, но вывод строки будет производиться горизонтально, слева направо.
Размер каждого символа устанавливается параметром CharSize, диапазон изменения которого составляет от 1 до 10. Стандартное значение CharSize для матричного шрифта 8x8 равно единице, а для штриховых шрифтов - четырем.
При каждом вызове процедурой SetTextStyle какого-либо шрифта он читается с диска и загружается в память.
Чтобы определить результат чтения файла шрифта с диска и загрузки его в память, можно проверить значение функции CraphResult. Перечень значений, возвращаемых ею в этом случае, приведен в таблице.
GraphResult | Смысл значения |
0 | Успешное выполнение операции |
-8 | Файл CHR не найден |
-9 | Не хватает памяти для загрузки выбранногошрифта |
-11 | Ошибка графики |
-12 | Ошибка ввода-вывода графики |
-13 | Неправильное содержимое файла шрифта |
-14 | Неправильный номер шрифта |
{Демонстрация шрифтов }
Program SetStDem;
Uses Graph;
Const
text : array[1..4] of string[14]=
('TripLexFont','SmallFont','SansSerifFont','GothicFont');
s4=', size 4';
s5=' and 5';
Var
d,r,e,i:integer;
Begin
d:=Detect;
InitGraph(d,r,'');
e:=GraphResult;
if e<>grOk then
Writeln(GraphErrorMsg(e))
Else
Begin
SetTextStyle(DefaultFont,HorizDir,1);
OutText('DefaultFont, size 1');
SetTextStyle(0,0,2);
OutText(' and 2');
for i:=1 to 4 do begin
SetTextStyle(i,0,4);
Moveto(10,i*40);
OutText(text[i]+s4);
SetTextStyle(i,0,5);
Outtext(s5);
end;
for i:=1 to 4 do begin
SetTextStyle(i,1,4);
Moveto(GetMaxX div 2+i*40-20,0);
OutText(text[i]);
end;
readln;
CloseGraph;
End
End.
Дата: 2019-05-29, просмотров: 194.