Важно предусмотреть, чтобы перед окончанием работы программа восстанавливала адрес исходного шрифта при помощи вызова процедуры модуля DOS SetIntVec( $1F, OldFont8x8).

Описанные способы подключения к системе шрифтов имеют один общий недостаток: для того чтобы программа, использующая их, нормально работала, необходимо наличие соответствующих шрифтов в текущем или известном программе каталоге файлов. Начичие дополнительных файлов в системе снижает ее надежность, поэтому в языке Турбо Паскаль предусмотрена возможность встраивания шрифтов прямо в ЕХЕ-файл. Этот вопрос рассматривается в разделе 19.10.

<p>19.9.3. Непосредственный вывод строк</p>

Итак, мы выбрали шрифт. Теперь перейдем к выводу текста. Для этого есть две процедуры. Первая —

OutText( TextString : String )

выводит на графический экран строку TextString, ориентированную относительно позиции текущего указателя, а вторая

OutTextXY( x, y : Integer; TextString : String )

- 464 -

выводит строку, ориентированную относительно координат (X, Y). Шрифт предварительно может быть установлен вызовом SetTextStyle (по умолчанию принимается DefaultFont). Рассмотрим ориентировку строки относительно стартовой точки. Существует несколько вариантов ориентировки. Они задаются процедурой

SetTextJustify( Horizontal, Vertical : Word )

параметры которой могут принимать одно из трех объявленных в модуле Graph значений:

CONST

{ — Для горизонтального ориентирования (Horizontal) — }

LeftText = 0; { координата X задает левый край строки }

CenterText = 1; { координата X задает середину строки }

RightText = 2; { координата X задает правый край строки }

{ — Для вертикального ориентирования (Vertical): — }

BottomText = 0; { координата Y задает нижний край строки }

CenterText = 1; { координата Y задает середину строки }

TopText = 2; { координата Y задает верхний край }

Эта процедура позволяет ориентировать выводимую строку относительно стартовой координаты по схеме, показанной на рис. 19.34, где знак ■ символизирует координаты (X,Y). По умолчанию параметры ориентировки соответствуют LeftText, TopText.

Рис. 19.34

Отметим, что текстовые процедуры GotoXY, Write/WriteLn и установка цвета текста в графическом режиме работают только, если переменная CRT.DirectVideo равна False (или модуль CRT не подключен). Ввод текста через Read/ReadLn действует всегда. При этом текст стирает фоновое изображение (см. также гл. 22).

<p>19.9.4. Размер букв и его масштабирование</p>

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

- 465 -

TextHeight( TextString : String ) : Word;

и

TextWidth( TextString : String ) : Word;

возвращают высоту и ширину строк TextString в пикселах, при условии, что они будут выведены текущим шрифтом и размером (т.е. заданными последним вызовом SetTextStyle или по умолчанию). Для штриховых шрифтов размеры букв различаются (их начертание неравномерное), и длина и высота строки в пикселах зависит не только от количества букв в ней, но и от их начертания. Пример анализа расположения строк показан на рис. 19.35, выводящем рекламную информацию.

| USES Graph; { подключен модуль Graph }

| {$I initgraf.pas) { процедура инициализации }

| CONST

| my_str = 'Turbo Pascal '; { выводимая строка текста }

| VAR

| maxx, maxy : Integer; { текущее разрешение экрана }

| tx, ty, i, j : Word; { временные переменные }

| BEGIN

| GrInit;

| maxx:=GetMaxX; maxy:=GetMaxY; { разрешение }

| SetTextJustify(CenterText, CenterText); { ориентация }

| SetTextStyle(SmallFont, HorizDir, 6); { стиль шрифта }

| tx := TextWidth(my_str); { ширина строки }

| ty := TextHeight(my_str); { высота строки }

| for j:=1 to (maxy div ty) do { цикл no оси Y }

| for i:=1 to (maxx div tx) do { цикл по оси X }

| OutTextXY( i*tx, j*ty, my_str ); { тело циклов }

| SetTextStyle(DefaultFont,HorizDir,6); { смена шрифта }

| tx := TextWidth ( 'W' ) div 6; { 1/6 ширины }

| ty := TextHeight( 'E' ) div 6; { 1/6 высоты } SetColor( LightRed );

| OutTextXY( maxx div 2 + tx, maxy div 2 + ty, my_str );

Перейти на страницу:

Поиск

Похожие книги