Функция RegisterBGIFont
Модуль Graph
Передает графической системе указатель на шрифт.
Объявление:
Function RegisterBGIFont(Font : Pointer) : Integer;
Режим:
Замечания:
Если происходит ошибка, функция возвращает значение меньшее нуля. Возможные
коды ошибок - grError, grInvalidFont и grInvalidFontNum. При отсутствии
ошибок, возвращается внутренний номер шрифта.
Эта функция дает возможность пользователю загрузить файл шрифта и
зарегистрировать его, передавая его расположение в памяти в RegisterBGIfont.
При вызове SetTextStyle, будет использоваться зарегистрированный шрифт,
вместо загружанмого с диска модулем Graph. Зарегистрированный пользователем
шрифт может быть загружен с диска в кучу (heap), или преобразован в *.OBJ
файл (с помощью BINOBJ.EXE) и прилинкован к *.EXE
Для загрузки и регистрации файла шрифта имеются несколько причин: Во-первых
Graph может хранить только один штриховой шрифт в памяти в определенный
момент времени. Если ваша программа должна быстро чередовать штриховые
шрифты, вы можете зарегистрировать нужные вам шрифты самостоятельно в начал
программы. При этом Graph уже не будет загружать и выгружать шрифты каждый
раз при обращении к SetTextStyle.
Во-вторых, при желании, вы можете включить файлы шрифта непосредственно в
ваш *.EXE файл. Таким образом, необходимые для работы вашей программы файлы
шрифта, будут встроены в нее.
Встроить файл шрифта в вашу программу можно так:
1. Запустить программу binobj.exe на файле шрифта.
2. Скомпоновать полученный *.OBJ файл с вашей программой.
3. Зарегистрировать файл шрифта перед вызовом InitGraph.
Для более детального объяснения и примера вышенаписанного, смотри
комментарии в программе BGILINK.PAS на дистрибутивном диске. Документация по
утилите BINOBJ доступна в файле UTIL.DOC (в архиве ONLINE.ZIP) на вашем
дистрибутивном диске.
Пример:
Uses Graph;
Var Driver, Mode : Integer;
FontF : File;
FontP : Pointer;
Begin
{ Открываем файл шрифта, регистрируем }
Assign(FontF, 'TRIP.CHR');
Reset(FontF, 1);
GetMem(FontP, FileSize(FontF));
BlockRead(FontF, FontP^, FileSize(FontF));
If RegisterBGIFont(FontP) < 0 Then
Begin
WriteLn('Ошибка регистрации шрифта: ', GraphErrorMsg(GraphResult));
Halt(1);
End;
{ Инициализируем графику }
Driver:=Detect;
InitGraph(Driver, Mode, 'C:\BP\BGI'); { Путь к BGI драйверам }
If GraphResult < 0 Then Halt(1);
ReadLn;
{ Выбираем установленый шрифт }
SetTextStyle(TriplexFont, HorizDir, 4);
OutText('Triplex loaded by user program');
MoveTo(0, TextHeight('a'));
ReadLn;
{ Выбираем шрифт, загружаемый с диска }
SetTextStyle(SansSerifFont, HorizDir, 4);
OutText('Your disk should be spinning..');
MoveTo(0, GetY + TextHeight('a'));
ReadLn;
{ Перевыбираем фонт, уже находящийся в памяти }
SetTextStyle(TriplexFont, HorizDir, 4);
OutText('Back To Triplex');
ReadLn;
CloseGraph;
End.