SetViewPort (Х1, Y 1, Х2, Y 2: Integer ; ClipMode : Boolean )
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

входные параметры соответствуют полям записи типа 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.