Главная » Free Pascal » Тексты на графическом экране Free Pascal

0

Сопровождение изображения пояснительными подписями на графическом экране расширяет возможности программы по представлению результатов работы. В BGI-графике для этой цели используются две процедуры:

OutText(msg); OutTextXY(x, y, msg);

В первом случае положение строкового сообщения msg зависит от позиции те- кущей точки (графического курсора). Во втором случае точка привязки текста за- висит от координат указанной точки (x, y). Любой шрифт, который можно исполь- зовать при формировании подписей, обладает такими характеристиками как высота и ширина заглавных символов. Если они одинаковы для любых символов алфавита, то шрифт принято называть моноширинным. Например, тексты программ в поле редактора FP набираются моноширинным шрифтом. Если ширины разных букв отличаются друг от друга, то такой шрифт называют пропорциональным. Приме- ром такого шрифта является Times New Roman, которым набрана эта книга. Высота строчных букв составляет примерно 2/3 от высоты прописных букв.

Выбор шрифта и высоты его прописных символов осуществляется с помощью процедуры SetTextStyle:

SetTextStyle(n_Font, n_Dir, kH);

Первый аргумент указывает номер шрифта из диапазона [0, 10]. Он может быть задан либо конкретным числом, либо мнемонической константой (табл. 15.9).

Таблица 15.9

Номер шрифта

Константа

Файл

Пояснение

0

DefaultFont

Шрифт по умолчанию, растровый (8  8)

1

TriplexFont

trip.chr

Трехобводный, прямой, с засечками

2

SmallFont

small.chr

Однообводный, прямой, моноширинный

3

SansSerifFont

sans.chr

Двухобводный, прямой, моноширинный

4

GothicFont

goth.chr

Готический

5

Script.chr

scri.chr

Рукописный, курсив

6

SimpleFont

simp.chr

Двухобводный, прямой, пропорциональный

7

TSGRFont

tscr.chr

Трехобводный, курсив, с засечками

Таблица 15.9 (окончание)

Номер шрифта

Константа

Файл

Пояснение

8

LCOMFont

lcom.chr

9

EuroFont

euro.chr

10

BoldFont

bold.chr

Полужирный, прямой

Второй аргумент регулирует направление воспроизведения подписи — по го- ризонтали (hDir=0 или константе HorizDir) или по вертикали (hDir=1 или констан- те VertrDir). Третий параметр соответствует высоте символов. Его приходится подбирать, т. к. для разных шрифтов физические размеры букв при одном и том же значении kH могут отличаться. В любом случае, при увеличении kH от 1 до 10 раз- меры букв увеличиваются.

Рис. 15.12. Шрифт по умолчанию

Рис. 15.13. Шрифт TiplexFont

Шрифт по умолчанию (рис. 15.12) встроен в системный модуль и не содержит русских букв. Однако для всех остальных шрифтов в каталоге \FPC\…\bin должны находиться файлы, указанные в табл. 15.9. В состав стандартной поставки они не входят, но их можно скопировать из любой ранней версии Turbo Pascal или Borland Pascal. Правда, при этом у вас не окажется полноценных шрифтов, дополненных русским алфавитом. Для поиска последних можно воспользоваться Интернетом, хотя качество многих "расширенных" шрифтов иногда оставляет желать лучше- го — в некоторых отсутствуют буквы "Ё" и "ѐ", не очень аккуратно подобраны пробелы после отдельных символов. Больше других повезло шрифту Triplex Font

(рис. 15.13). В рукописном шрифте (рис. 15.14) не оказалось букв "Ё" и "Ъ". Шрифт Simple Font (рис. 15.15) всем хорош, но подпадает под недавно принятый Государ- ственной думой закон "О государственном языке Российской Федерации" в части использования буквы "Ё".

Рис. 15.14. Рукописный шрифт

Рис. 15.15. Шрифт Simple Font

По умолчанию точкой привязки текста является левый верхний угол прямо- угольника, окаймляющего текст (рис. 15.16 — левый прямоугольник). Он чуть-чуть шире текста за счет пробела после последней буквы. Низ прямоугольника тоже на- ходится чуть ниже базовой линии расположения букв за счет того, что у некоторых символов имеются подстрочные фрагменты (например, у букв "g", "q", "p", "y"). Существует 9 вариантов расположения точки привязки текста относительно окаймляющего его прямоугольника. Эти позиции обозначены парой индексов, за- дающих условные смещения по горизонтали и вертикали относительно углов габа- ритного прямоугольника (см. правый прямоугольник на рис. 15.16). За счет задания смещения по вертикали текст может быть смещен вверх относительно габаритного прямоугольника на 0.5 h (второй индекс равен 1) или на h (второй индекс равен 2), где h — высота прописной буквы. Соответствующий сдвиг текста влево по гори- зонтали равен 0.5 w (первый индекс равен 1) или w (первый индекс равен 2), где w — ширина текста. Таким образом, точку привязки текста можно связывать с ле- вой границей, с его серединой или с правой границей текста.

Рис. 15.16. Выбор точки привязки текста

Установка горизонтальных и вертикальных смещений текста относительно габа- ритного прямоугольника осуществляется с помощью процедуры SetTextJustify: SetTextJustify(horiz, vert);

Горизонтальное смещение (horiz) может быть равно 0 (или константе LeftText), 1 (или константе CenterText) или 2 (или константе RightText). Для вер- тикального смещения (vert) заготовлены три аналогичные константы — Bottom- Text, CenterText, TopText.

Если целочисленный масштабный коэффициент kH, задаваемый в процедуре SetTextStyle, одновременно изменяет высоту и ширину символов, то с помощью процедуры SetUserCharSize можно задать два разных коэффициента, независимо друг от друга влияющих на каждую из этих характеристик. Каждый из таких коэф- фициентов задается парой целых чисел — множителя и делителя:

SetUserCharSize(Multx, Divx, Multy, Divy);

Такой способ позволяет устанавливать любой вещественный коэффициент из- менения размеров символов по той или иной координате, например равный 3.14 (Mult=314, Div=100).

Среди полезных функций по управлению текстами отметим две — TextWidth и

TextHeight, позволяющие определить ширину и высоту заданного сообщения. Эти значения могут помочь правильно разместить соответствующее сообщение на гра- фическом экране. В частности, с их помощью было получено изображение текста в габаритном прямоугольнике, приведенное на рис. 15.16 (листинг 15.10).

   Листинг 1 5 .1 0 .  Программа  text_1                                             

program text_1; uses Graph;  var

gd,gm: SmallInt;

h,w:  Word;

begin

gd:=D8bit; gm:=m800x600; InitGraph(gd,gm,”); SetTextStyle(0,0,10); h:=TextHeight(‘Angle’);

w:=TextWidth(‘Angle’); MoveTo(300,100); Circle(300,100,5);

Rectangle(300,100,300+w,100+h);

OutText(‘Angle’); readln; CloseGraph;

end.

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии