| 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).
- 462 -
Код | Обозначение ошибки | Пояснения |
-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 матриц по восемь байтов, представля-
- 463 -
ющий новый матричный шрифт (размер файла должен равняться 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