русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Предварительная загрузка и регистрация шрифтов


Дата добавления: 2015-06-12; просмотров: 703; Нарушение авторских прав


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

RegisterBGIFont( FontPtr : Pointer ) : Integer

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

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

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

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

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

PROCEDURE LoadFont(BGIFileName: String; VAR FPtr: Pointer; VAR Size: Word ); VAR FontFile : File; BEGIN Assign(FontFile,BGIFileName); { связь файла с диском } Reset( FontFile, 1 ); { чтение с начала, побайтно } Size:=FileSize(FontFile); { размер файла со шрифтом } GetMem( FPtr, Size ); { выделение участка памяти } BlockRead(FontFile,FPtr:,Size); { загрузка туда шрифта } Close( FontFile ); { закрытие файла } if RegisterBGIFont(FPtr) < grOK then begin { Если возникла ошибка, то } WriteLn( 'Ошибка загрузки шрифта: ', { выдать } GraphErrorMsg(GraphResult) ); {сообщение } ReadLn { пауза до нажатия ввода... } end {if} END;

Рис. 19.32

Регистрация может проводится до инициализации графики. Так, в примере на рис. 19.32 считается, что текущий режим — текстовый, и используется оператор WriteLn для выдачи аварийного сообщения. Функция RegisterBGIFont может возвращать значения ошибки (табл. 19.7). {461}



Код Обозначение ошибки Пояснения
-11 grError Может возникнуть, если таблица шрифтов уже заполнена. Всего можно зарегистрировать десять шрифтов. Так как в системе даны только четыре шрифта, то эта ошибка появляться не должна.
-13 grInvalidFont Заголовок файла шрифта — неправильный или испорченный.
-14 grInvalidFontNum Номер шрифта в заголовке файла шрифта — неправильный.

19.9.2.2. Регистрация новых штриховых шрифтов. Модуль Graph может поддерживать таблицу из десяти шрифтов. Однако в системе их представлено только четыре (не считая DefaultFont, который не требует загрузки), Возникает вопрос, как указать системе, что мы хотим использовать новые шрифты, не имеющие идентификаторов в системе (созданные самостоятельно или приобретенные дополнительно). Модуль Graph предоставляет и такую возможность — главное, чтобы файл шрифтов был в формате фирмы Borland. Пользуясь функцией

InstallUserFont( FontFileName : String ) : Integer;

можно установить соответствие между именем шрифтового файла (FontFileName) и его регистрационным номером в системе (возвращаемым функцией InstallUserFont). После этого можно выбрать этот шрифт процедурой SetTextStyle, указав первым параметром номер нового шрифта. Если таблица шрифтов уже вся заполнена, то функция возвращает значение 0 (DefaultFont). В общем случае, ошибка установки нового шрифта диагностируется функцией GraphResult. После установки можно обращаться с новым шрифтом как со стандартным, и в том числе загружать в память.

19.9.2.3. Загрузка матричных шрифтов 8x8. Часть матричного шрифта 8x8 (коды от 0 по 127) реализована в ПЭВМ аппаратно и всегда доступна. Другая часть (коды от 128 до 255) должна быть предварительно резидентно загружена в память ПЭВМ. Обычно это делается программами-русификаторами или утилитой MS-DOS GRAFTABL. Но можно это проделать самим, предварительно создав файл типа File of Byte из 128 матриц по восемь байтов, представля-{462}ющий новый матричный шрифт (размер файла должен равняться 1024 байт). Имея такой файл, легко установить его в качестве шрифта DefaultFont, как показано на рис. 19.33.

USES DOS, Graph; { необходим модуль DOS } VAR OldFont8x8 : Pointer; { адрес исходного шрифта 8x8 } PROCEDURE LoadFont8x8(FileName: String; VAR FPtr:Pointer); VAR FontFile : File; BEGIN Assign(FontFile,FileName); { связывание файла с диском } Reset( FontFile, 1024 ); { чтение с начала и целиком } GetMem( FPtr, 1024 ); { выделение участка памяти } BlockRead(FontFile,FPtr^,1); { загрузка в него шрифта } Close( FontFile ); { закрытие файла } GetIntVec($1F,OldFont8x8); { запоминание старого шрифта } SetIntVec( $1F, FPtr ) { установка нового шрифта } END;

Рис. 19.33

Важно предусмотреть, чтобы перед окончанием работы программа восстанавливала адрес исходного шрифта при помощи вызова процедуры модуля DOS SetIntVec( $1F, OldFont8x8).

Описанные способы подключения к системе шрифтов имеют один общий недостаток: для того чтобы программа, использующая их, нормально работала, необходимо наличие соответствующих шрифтов в текущем или известном программе каталоге файлов. Начичие дополнительных файлов в системе снижает ее надежность, поэтому в языке Турбо Паскаль предусмотрена возможность встраивания шрифтов прямо в ЕХЕ-файл. Этот вопрос рассматривается в разделе 19.10.



<== предыдущая лекция | следующая лекция ==>
Выбор шрифта и стиля | Непосредственный вывод строк


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.603 сек.