22 Глава 1

от —64 до +63 (см. ниже). Таким образом, эти поля определяют максимальный вертикальный размер любого символа: поле UpperMargin задает высоту от базовой линии до верхнего края самого высокого символа шрифта, а поле LowerMargin обычно содержит отрицательное значение типа Shortint, показывающее, насколько ниже базовой линии может располагаться нижний край любого символа.

Остальные поля блока параметров не используются и содержат нули.

Сразу за блоком параметров начинается таблица смещений Offsets. Эта таблица содержит CharsCount двухбайтных слов — по одному слову на каждый символ. В ней указывается, на каком расстоянии от поля FirstData содержится начало векторных команд каждого символа. Самый первый элемент таблицы всегда содержит 0. Разница в смещениях между соседними элементами определяет длину векторных команд для очередного символа, например, разница между вторым и первым элементами — длину командной последовательности (в байтах) для первого символа, между третьим и вторым — для второго элемента и т.д. Для последнего символа эта длина определяется разницей между полями FileSize и последним элементом таблицы. Если Вы не загружаете весь файл в память, Вам понадобится построить свою таблицу значений длин командных последовательностей, чтобы, по мере н_адобности, динамически подкачивать эти данные с диска, как это сделано в процедуре OutString модуля F_GrText [см. п.1.3.4).

Поле Widths длиной CharsCount байт содержит таблицу ширин, в которой указывается ширина (длина по оси X) каждого символа. Обычно каждый символ выравнивается влево относительно локальных координат, поэтому его ширина в таблице должна задавать также небольшое меж— символьное расстояние справа от него, чтобы символы не сливались друг с другом.

Поле FirstData определяет начало векторных команд, используемых для вычерчивания первого символа. Каждая векторная команда занимает одно двухбайтное слово и содержит локальные координаты и собственно команду (см. рис. 1.3).

Поскольку локальные координаты определены в диапазоне от —64 до +63, для "их представления используется 7 младших разрядов каждого байта, в то время как старшие разряды А и В определяют код команды (табл. 1.2).

Таблица 1.2 _________Векторные команды________

А

В

Команда

0

о

Конец образа символа

1

о

Не используется

о

1

Поднять «перо» и перевести его в точку Х,У

1

1

Опустить «перо» и вести его до точки X,Y


Как правило, последовательность векторов начинается командой 01, по которой воображаемое «перо» в поднятом состоянии переводится к началу самого первого вычерчиваемого вектора. Заканчивается последователь—