| SetColor( LightBlue );

| OutTextXY( maxx div 2, maxy div 2, my_str );

| ReadLn; { пауза до нажатия ввода }

| CloseGraph { закрытие режима графики }

| END.

Рис. 19.35

У процедуры OutTextXY есть одна особенность: выводимая текстовая строка всегда обрезается по границе графического окна. Более

- 466 -

того, если активным является матричный шрифт (DefaultFont), то «вылезающая» строка вообще не появляется на экране. Решать подобные проблемы можно, точно рассчитывая место выводимых в графике строк.

19.9.4.2. Масштабирование штриховых шрифтов. Размер букв (высота и ширина) штриховых шрифтов (и только их) может задаваться процедурой

SetUserCharSize( multX, divX, multY, divY : Word )

Она позволяет оперативно менять размер шрифта, установленный процедурой SetTextStyle. Отношение (multX/divX) задает масштабирование ширины начертания шрифта, а отношение (multY/divY) выражает масштаб изменения высоты шрифта. Например, задание параметров multX=3 и divX=1, говорит о том, что буквы выводимого шрифта будут в три раза шире нормы.

<p>19.9.5. Опрос стиля и ориентации шрифтов</p>

Полную информацию о текущем режиме вывода текста можно получить, используя процедуру

GetTextSettings(VAR Settings : TextSettingsType)

В параметре Settings она возвращает исчерпывающую информацию обо всем, что относится к выводу строк. Тип этого параметра предопределен в модуле Graph:

TYPE

 TextSettingsType = RECORD

Font : Word; {номер шрифта}

Direction : Word; {направление}

CharSize : Word; {размер шрифта}

Horiz : Word; {ориентация по X}

Yert : Word; {ориентация по Y}

END;

Текущим всегда является один шрифт, и при необходимости быстро переключаться с одного шрифта на другой удобно сохранять и восстанавливать их параметры через переменные описанного типа.

<p>19.10. Включение шрифтов и драйверов в ЕХЕ-файл</p>

Стандартный режим работы графики, при котором помимо основного ЕХЕ-файла необходимо присутствие еще одного или не-

- 467 -

скольких вспомогательных BGI- и CHR-файлов, не очень удобен. Устранение этого неудобства возможно включением содержимого этих файлов непосредственно в ЕХЕ-файл, получаемый из программы на Паскале, Для этого надо выбрать, какие драйверы и шрифты необходимы при автономной работе нашей программы (если она рассчитана на работу с одним адаптером, то достаточно одного соответствующего BGI-драйвера и шрифтов; если программа должна переноситься, то придется вставить в нее как минимум три драйвера: для CGA, EGA/VGA и Hercules).

Далее, нужно запустить утилиту BINOBJ.EXE для получения из ВGI- и (или) CHR-файла (файлов) OBJ-файла (файлов), что лучше сделать ВАТ-файлами:

drivers.bat

BINOBJ %1.BGI %1.OBJ %1DriverProc

fonts.bat

BINOBJ %1.CHR %1.OBJ %1FontProc

В этом случае можно обработать драйверы и шрифты следующим образом:

C:\TP\BGI>driver.bat CGA

C:\TP\BGI>driver.bat EGAVGA

C:\TP\BGI>driver.bat HERC

...

C:\TP\BGI>fonts.bat TRIP

C:\TP\BGI>fonts.bat SANS

...

Если желательно включить в файл и свою часть шрифта 8x8 (пусть он хранится в файле 8x8.FON), то надо выполнить команду

C:\TP\BGI>binobj 8x8.fon 8x8 Font8x8Proc

После этого можно подготовить полученные OBJ-файлы для компоновки в ЕХЕ-файл. Удобнее всего это сделать, организовав модуль, например BGI.TPU. Исходный текст его (с учетом наших предыдущих действий) приведен на рис. 19.36.

- 468 -

| UNIT BGI; { модуль с BGI-компонентами }

| INTERFACE { объявления псевдопроцедур }

| PROCEDURE CGADriverProc; { BGI-драйвер для CGA }

| PROCEDURE EGAVGADriverProc; { BGI-драйвер для EGA/VGA }

| PROCEDURE HERCDriverProc; { BGI-драйвер для Hercules }

| { ... }

| PROCEDURE TRIPFontProc; { CHR-шрифт TriplexFont }

| PROCEDURE SANSFontProc; { CHR-шрифт SansSerifFont }

| { ... }

| PROCEDURE Font8x8Proc; { матричный шрифт 8x8 }

| IMPLEMENTATION { подстыковка содержимого: }

| USES Graph, DOS;

| {$L cga.obj} PROCEDURE CGADriverProc; EXTERNAL;

| {$L egavga.obj} PROCEDURE EGAVGADriverProc; EXTERNAL;

| {$L herc.obj} PROCEDURE HERCDriverProc; EXTERNAL;

| { ... }

| {$L trip.obj} PROCEDURE TRIPFontProc; EXTERNAL;

| {$L sans.obj} PROCEDURE SANSFontProc; EXTERNAL;

| { ... }

| VAR

| OldFont8x8 : Pointer; { адрес старого шрифта 8x8 }

| {$L 8x8.obj} PROCEDURE Font8x8Proc; EXTERNAL;

| BEGIN

| if RegisterBGIDriver(@CGADriverProc)<0

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

Поиск

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