Всего с пакетом Турбо Паскаль поставляется четыре шрифта (хотя можно, используя отдельный специальный пакет, самостоятельно расширить их набор). Кроме того, доступен системный матричный шрифт 8x8 для графических режимов (всегда доступны символы с ASCII-кодами от 0 до 127 и символы с кодами от 128 до 255 при условии, что их матрицы загружены в память ПЭВМ). Для обозначения этих пяти шрифтов введены константы:

CONST

DefaultFont = 0; { матричный шрифт 8x8 (по умолчанию ) }

TriplexFont = 1; { полужирный шрифт }

SmallFont = 2; { светлый шрифт (тонкое начертание) }

SansSerifFont = 3; { книжная гарнитура (рубленый шрифт) }

GothicFont = 4; { готический шрифт }

DefaultFont — это уже упоминавшийся матричный шрифт 8x8. Если не принимать никаких действий по смене шрифта, то будет принят именно он.

Активизация любого из названных шрифтов осуществляется процедурой

SetTextStyle( Font, Direction : Word; CharSize : Word )

Здесь параметр Font — номер шрифта (например, одна из описанных выше констант), Direction — расположение текста (по умолчанию принимается горизонтальное). Возможны лишь две ориентации текста, обозначенные константами:

CONST

HorizDir = 0; { горизонтальная, слева направо }

VertDir = 1; { вертикальная, снизу вверх }

При значении Direction, равном VertDir, все символы будут повернуты против часовой стрелки на 90° и выводятся снизу вверх. Однако на самом деле есть еще один вариант регулирования направления шрифтов. Если задать Direction=2, то буквы будут повернуты так же, как и при Direction=VertDir, но вывод строки будет производиться горизонтально, слева направо.

Размер каждого символа устанавливается параметром CharSize, диапазон изменения которого составляет от 1 до 10. Стандартное значение CharSize для матричного шрифта 8x8 равно единице, а для штриховых шрифтов — четырем. Однако это можно не запоминать: достаточно передать в CharSize значение 0, и шрифт будет выводиться в стандартном размере. Чтобы продемонстрировать, как влияет этот параметр на размер изображения, можно задать CharSize=2 для

- 460 -

шрифта DefaultFont, и на экран будет выведен символ в матрице 16x16. Штриховые же шрифты задаются по-другому: в некоторой единичной системе координат описывается последовательное прохождение контура, образующего символ. Поскольку координаты каждой следующей точки контура заданы относительно предыдущей, то и модификация шрифта (увеличение, расширение и т.п.) производится простым умножением этих координат на соответствующее число.

При каждом вызове процедурой SetTexStyle какого-либо шрифта он читается с диска и загружается в память. Это обстоятельство вносит некоторые сложности. Во-первых, если программа использует штриховые шрифты, необходимо, чтобы файлы соответствующих шрифтов находились в известном каталоге совместно с BGI-файлами. В противном случае, не найдя их, система будет использовать DefaultFont, т.е. матричный шрифт 8x8. Во-вторых, при быстром переключении между несколькими штриховыми шрифтами будет происходить задержка программы на время, необходимое для считывания соответствующего шрифта с диска. Это случается потому, что в рабочей памяти может храниться только один штриховый шрифт. Чтобы определить результат чтения файла шрифта с диска и загрузки его в память, можно проверить значение функции GraphResult. Перечень значений, возвращаемых ею в этом случае, приведен в табл. 19.6.

Таблица 19.6

GraphResult

Смысл значения

0

Успешное выполнение операции

-8

Файл CHR не найден

-9

Не хватает памяти для загрузки выбранного шрифта

-11

Ошибка графики

-12

Ошибка ввода-вывода

-13

Неправильное содержимое файла шрифта

-14

Неправильный номер шрифта

<p>19.9.2. Предварительная загрузка и регистрация шрифтов</p>

19.9.2.1. Загрузка шрифтов из пакета Турбо Паскаль. Для хранения в памяти более одного шрифта одновременно необходимо предварительно разместить их в памяти и вызвать функцию

- 461 -

RegisterBGIFont( FontPtr : Pointer ) : Integer

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

1. В динамической памяти (куче) отводится область размером с файл шрифта.

2. Файл шрифта считывается с диска и помещается в эту область.

3. Указатель на шрифт в памяти регистрируется при помощи функции RegisterBGIDriver.

Пример процедуры загрузки шрифта в память приведен на рис. 19.32. В процедуру надо передать полное имя одного из CHR-файлов и сохранить возвращаемые ею указатель на место шрифта в памяти FPtr и размер Size (это может понадобиться при удалении шрифтов из кучи процедурой FreeMem(FPtr.Size)).

| PROCEDURE LoadFont(BGIFileName: String; VAR FPtr: Pointer;

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

Поиск

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