Процедура SetTextStyle

Устанавливает стиль текстового вывода на графический экран. Заголовок:

Procedure SetTextStyle(Font,Direct,Size: Word);

Здесь Font – код (номер) шрифта; Direct – код направления; Size – код размера шрифта.

Для указания кода шрифта можно использовать следующие предварительно определенные константы:

const

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

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

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

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

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

Заметим, что эти константы определяют все шрифты для версий 4.0, 5.0, 5.5 и 6.0. В версии 7,0 набор шрифтов значительно расширен, однако для новых шрифтов не предусмотрены соответствующие мнемонические константы. В этой версии помимо перечисленных вы можете при обращении к SetTextStyle использовать такие номера шрифтов:

Номер Файл Краткое описание
scri.chr «Рукописный» шрифт
simp.chr Одноштриховый шрифт типа Courier
tscr.chr Красивый наклонный шрифт типа Times Italic
Icom.chr Шрифт типа Times Roman
euro . chr Шрифт типа Courier увеличенного размера
bold.chr Крупный двухштриховый шрифт

Шрифт DefaultFont входит в модуль Graph и доступен в любой момент. Это – единственный матричный шрифт, т.е. его символы создаются из матриц 8x8 пикселей. Все остальные шрифты – векторные: их элементы формируются как совокупность векторов (штрихов), характеризующихся направлением и размером. Векторные шрифты отличаются более богатыми изобразительными возможностями, но главная их особенность заключается в легкости изменения размеров без существенного ухудшения качества изображения. Каждый из этих шрифтов размещается в отдельном дисковом файле. Если вы собираетесь использовать какой-либо векторный шрифт, соответствующий файл должен находиться в вашем каталоге, в противном случае вызов этого шрифта игнорируется и подключается стандартный.

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

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

const

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

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

Как видим, стандартные процедуры OutText и OutTextXY способны выводить сообщения лишь в двух возможных направлениях – слева направо или снизу вверх. Зная структуру векторных шрифтов, нетрудно построить собственные процедуры вывода, способные выводить сообщения в любом направлении.

Каждый шрифт способен десятикратно изменять свои размеры. Размер выводимых символов кодируется параметром Size, который может иметь значение в диапазоне от 1 до 10 (точечный шрифт – в диапазоне от 1 до 32). Если значение параметра равно 0. устанавливается размер 1, если больше 10 – размер 10. Минимальный размер шрифта. при котором еще отчетливо различаются все его детали, равен 4 (для точечного шрифта – 1).

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

Uses Graph, CRT;

const

FontNames: array [1..10] of String[4] =

( 'TRIP' , 'LITT'' SANS ' , ' GOTH ' , 'SCRI ' , ' SIMP ' ,'TSCR ' , ' LOOM ' , ' EURO',' BOLD ' );

Tabl = 50;

Tab2 = 150;

Tab3 =220;

var

d, r, Err,{Переменные для инициации графики}

Y,dY,{Ордината вывода и ее приращение}

Size,{Размер символов}

MaxFont,{Максимальный номер шрифта}

k: Integer;{Номер шрифта}

NT, SizeT, SynibT: String;{Строки вывода}

c: Char;

{-------------------}

Procedure OutTextWithTab ( S1, S2, S3, S4: String);

{Выводит строки S1..S4 с учетом позиций табуляции Таb1..ТаbЗ}

begin

MoveTo( (Tab1-TextWidth(Sl) ) div2,Y);

OutText (S1) ;

MoveTo(Tabl+(Tab2-Tabl-TextWidth(S2)) div2,Y);

OutText (S2) ;

MoveTo(Tab2+(Tab3-Tab2-TextWidth(S3)) div 2,Y);

OutText(S3);

if S4='Symbols' then {Заголовок колонки Symbols}

MoveTo((Tab3+GetMaxX-TextWidth(S4)) div 2,Y)

else {Остальные строки}

MoveTo(Tab3+3,Y);

OutText(S4)

end;

{------------}

begin

{Инициируем графику}

InitGraph(d,r, ' ');

Err := GraphResult; if ErrogrOk then

WriteLn(GraphErrorMsg(Err))

else

begin

{Определяем количество шрифтов:}

{$IFDEF VER70'}

MaxFont := 10; .

{$ELSE}

MaxFont := 4;

{$ENDIF}

SetTextStyle(l,0,4);

Y := 0;

OutTextWi thTab('N','Name',Size','Symbols');

{Определяем высоту Y линии заголовка}

Y := 4*TextHeight('Z') div3;

Line(0,Y,GetMaxX,Y) ;

{Определяем начало Y таблицы и высоту dY каждой строки}

Y := 3*TextHeight('Z') div 2;

dY := (GetMaxY-Y) div (MaxFont);

{Готовим строку символов}

SymbT := '';

for с := 'a' to 'z' do

SymbT := SymbT+c;

{Цикл вывода строк таблицы}

for k := 1 to MaxFont do

begin

Size := 0;

{Увеличиваем размер до тех пор, пока высота строки не станет приблизительно равна dY}

repeat

inc(Size);

SetTextStyle(k,0,Size+1);

until (TextHeight('Z')>=dY) or (Size=10)

or (Textwidth(FontNames[k])>(Tab2-Tab1));

{Готовим номер NT и размер SizeT шрифта}

Str(k,NT);

Str(Size,SizeT);

{Выводим строку таблицы}

SetTextStyle(k,HorizDir,Size);

OutTextWithTab(NT,FontNames[k],SizeT,SymbT);

inc(Y,dY)

end;

{Рисуем линии рамки}

Rectangle(0,0,GetMaxX,GetMaxY);

Line(Tab1,0,Tabl,GetMaxY);

Line(Tab2,0,Tab2,GetMaxY);

Line(Tab3,0,ТаЬЗ,GetMaxY);

{Ждем инициативы пользователя}

ReadLn;

CloseGraph

end

end.