19.9.1. Выбор шрифта и стиля
В комплектах поставки пакета Турбо Паскаль, начиная с версии 4.0, есть файлы с расширением .CHR. Это набор штриховых шрифтов, которые могут быть использованы для вывода информации. Поскольку они построены не матричным способом (как сделаны стандартные шрифты для текстового режима), а векторным, становятся возможными манипуляции размерами шрифтов без потери качества их изображения.
- 459 -
Всего с пакетом Турбо Паскаль поставляется четыре шрифта (хотя можно, используя отдельный специальный пакет, самостоятельно расширить их набор). Кроме того, доступен системный матричный шрифт 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
Неправильный номер шрифта