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

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 );

| SetColor( LightBlue );

| OutTextXY( maxx div 2, maxy div 2, my_str );

| ReadLn; { пауза до нажатия ввода }

| CloseGraph { закрытие режима графики }

| END.

Рис. 19.35

У процедуры OutTextXY есть одна особенность: выводимая текстовая строка всегда обрезается по границе графического окна. Более

- 466 -

того, если активным является матричный шрифт (DefaultFont), то «вылезающая» строка вообще не появляется на экране. Решать подобные проблемы можно, точно рассчитывая место выводимых в графике строк.

19.9.4.2. Масштабирование штриховых шрифтов. Размер букв (высота и ширина) штриховых шрифтов (и только их) может задаваться процедурой

SetUserCharSize( multX, divX, multY, divY : Word )

Она позволяет оперативно менять размер шрифта, установленный процедурой SetTextStyle. Отношение (multX/divX) задает масштабирование ширины начертания шрифта, а отношение (multY/divY) выражает масштаб изменения высоты шрифта. Например, задание параметров multX=3 и divX=1, говорит о том, что буквы выводимого шрифта будут в три раза шире нормы.