TURBO PASCAL |
Новости
|
Включение драйвера и шрифтов в тело программы
В Турбо Паскале имеется возможность включения графического драйвера и штриховых шрифтов непосредственно в тело программы. Такое включение делает программу независимой от местоположения и наличия на диске драйверов и шрифтов, а также ускоряет подготовку графических программ к работе (шрифты и драйвер загружаются вместе с программой). Включение драйвера и шрифтов осуществляется по следующей общей схеме. Сначала с помощью вспомогательной программы BINOBJ.EXE, входящей в комплект поставки Турбо Паскаля, драйвер и шрифты преобразуются в OBJ-файл (файл с расширением .OBJ). Для этого вне среды Турбо Паскаля необходимо вызвать утилиту BINOBJ с тремя параметрами: именем преобразуемого файла, именем получаемого OBJ-файла и глобальным именем процедуры. Эти имена, в принципе, могут быть произвольными, правильными для MS-DOS именами. Например: c:\tp\binobj cga.bgi cga cgadrv В результате такого обращения из каталога ТР на диске С будет вызвана программа BINOBJ и ей будут переданы следующие параметры: CGA.BGI - имя файла с преобразуемым драйвером; CGA - имя файла с расширением .OBJ, т.е. CGA.OBJ, который будет получен в результате исполнения программы BINOBJ; CGADRV- глобальное имя, под которым этот драйвер будет известен программе. После этого можно написать следующий фрагмент программы: Uses Graph; Procedure CGADRV; external; {$L CGA.OBJ} var d, r, e : Integer; begin if RegisterBGIDriver (@CGADRV) < 0 then begin WriteLn ('Ошибка при регистрации драйвера'); halt end; d := CGA; r := CGAHi; InitGraph (d, r, ''); ....... Как видно из этого примера, в программе объявляется внешняя процедура с именем CGADRV (глобальное имя, указанное при обращении к BINOBJ), причем дается директива компилятору отыскать в текущем каталоге и загрузить файл CGA.OBJ, в котором находится эта процедура. Затем осуществляется регистрация драйвера путем обращения к функции RegisterBGIDriver. Единственным параметром этой функции является адрес начала драйвера в памяти (@CGADRV). Функция возвращает значение типа Integer, которое служит для контроля правильности завершения процедуры регистрации драйвера: если это значение меньше нуля, обнаружена ошибка, в противном случае функция возвращает номер зарегистрированного драйвера. В примере контролируется правильность регистрации драйвера и, если ошибка не обнаружена, инициируется графический режим работы экрана. Аналогичным образом можно присоединить к программе стандартные штриховые шрифты (матричный шрифт 8x8 входит в состав модуля Graph и поэтому присоединять его не надо). Присоединение шрифта строится по описанной схеме за тем исключением, что для его регистрации вызывается функция RegisterBGIFont. Например, после преобразования c:\Pascal\binobj litt.chr litt litt можно использовать операторы Procedure Litt;External; {$L Litt.obj} ....... if RegisterBGIFont (@litt) < 0 then ... Обратите внимание: регистрация и драйвера, и шрифтов должна предшествовать инициации графического режима. Регистрировать можно также драйверы (шрифты), которые не компилируются вместе с программой, а загружаются в динамическую память. Например: Uses Graph; var р: Pointer; f: file; begin Assign(f,'Litt.chr'); {Открываем файл} Reset(f,1); {LITT.CHR для чтения} GetMem(p,FileSize(f)) ; {Резервируем для него область кучи нужного размера} BlockRead(f,pA,FileSize(f)){Читаем файл} WriteLn(RegisterBGIFont (p)){Регистрируем шрифт} end.
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |