Язык:
Русский
English
InstallUserDriver (функция) (модуль Graph)
Добавляет внешний графический драйвер к таблице BGI драйверов.
Объявление
Function InstallUserDriver(Name : String; AutoDetectPtr : Pointer) : Integer;
Режим
Real, Protected
Замечания
Функция InstallUserDriver позволяет вам использовать внешние нестандартные графические драйверы (например, SVGA32K.BGI, S3.BGI, VGA256.BGI и т.п.). Параметр Name - имя файла добавляемого драйвера. Рараметр AutoDetectPtr - указатель на необязательную функцию автоопределения, описание которой может находиться в комплекте поставки драйвера. Эта функция не требует параметров и возвращает целочисленное значение.
Если таблица драйверов заполнена, то InstallUserDriver возвращает значение -11 (grError), иначе InstallUserDriver регистрирует и возвращает номер нового графического драйвера.
Существует два способа использовать внешние драйверы. Предположим, что у вас есть новая видеокарта, называемая Spiffy Graphic Adapter (SGA) и что фирма-производитель SGA обеспечила вас BGI драйвером для этого устройства (SGA.BGI). Самый простой способ использовать этот драйвер состоит в том, чтобы установить это с помощью функции InstallUserDriver, а затем передать возвращаемое ею значение непосредственно в процедуру InitGraph:
Var Driver, Mode : Integer;
Begin
Driver:=InstallUserDriver('SGA', nil);
If Driver = grError Then Halt(1) { Таблица заполнена ? }
Mode:=0; { Каждый драйвер поддерживает }
{ режим = 0 }
InitGraph(Driver, Mode, ''); { Отключаем автоопределение }
... { Графика... }
End.
Значение NIL для параметра AutoDetectPtr при вызове InstallUserDriver указывает на то, что для SGA нет функции автоопределения.
Другой, более общий способ использовать этот драйвер состоит в том чтобы, использовать функцию автоопределения, которая будет вызываться процедурой InitGraph как часть его подпрограммы аппаратного обнаружения. Допустим, что фирма - изготовитель SGA дала вам функцию автоопределения, которая выглядит как-то так:
{$F+}
Function DetectSGA : Integer;
Var Found : Boolean;
Begin
DetectSGA:=grError; { Пусть это не SGA видеокарта }
Found:=... { Определяем оборудование }
If Not Found Then Exit; { Возвращает -11 }
DetectSGA:=3; { Возвращает рекомендованный видеорежим }
End;
{$F-}
Задача функции DetectSGA состоит в поиске видеокарты SGA во время выполнения программы. Если SGA не обнаружена, то DetectSGA возвращает значение -11 (grError), иначе, возвращаемое значение - заданный по умолчанию видеорежим для SGA (обычно, это режим с лучшими цветами и разрешением, доступными для данной видеокарты).
Эта функция не требует никакие параметров, возвращает знаковое, целочисленное значение и должна иметь дальний тип вызова. Когда вы устанавливаете драйвер (вызывая функцию InstallUserDriver), вы передаете адрес функции DetectSGA наряду с именем файла драйвера:
Var Driver, Mode : Integer;
Begin
Driver:=InstallUserDriver('SGA', @DetectSGA);
If Driver = grError Then Halt(1) { Таблица заполнена ? }
Driver:=Detect; { Доверяемся автоопределению }
InitGraph(Driver, Mode, '');
...
end.
После того, как вы задаете имя файла драйвера и его функцию автоопределения, вы вызываете процедуру InitGraph и позволяете ей провести стандартный процесс автоопределения. Прежде, чем процедура InitGraph вызывает встроенную функцию DetectGraph, она обращается к функции DetectSGA. Если DetectSGA не находит видеокарту SGA, то она возвращает значение -11 (grError) и InitGraph продолжает свою стандартную логику автоопределения (которая может включать в себя вызов любых других функций автоопределения в том порядке, в котором они были установлены).
Если, однако, функция DetectSGA определяет, что видеокарта SGA присутствует, то она возвращает номер режима, и InitGraph находит и загружает файл драйвера SGA.BGI, инициализирует графический режим, рекомендуемый функцией DetectSGA, и, наконец, возвращает управление вашей программе.
Смотри также
Пример
Язык:
Русский
English
{ Пример программы для функции InstallUserDriver }
var
Driver, Mode, TestDriver, ErrCode : Integer;
{$F+}
function TestDetect : Integer;
{ Функция автоопределения: Считаем, что нужная нам видеокарта
присутствует; возвращаемое значение = рекомендуемый режим }
begin
TestDetect := 1; { Режим = 1 }
end;
{$F-}
begin
{ Пытаемся установить драйвер }
TestDriver := InstallUserDriver('TEST', @TestDetect);
if GraphResult <> grOk then
begin
WriteLn('Ошибка установки драйвера.');
Halt(1);
end;
{ Инициализируем графику }
Driver := Detect;
InitGraph(Driver, Mode, 'X:\BP');
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
WriteLn('Ошибка установки драйвера: ', ErrCode);
Halt(2);
end;
OutText('Installable drivers supported...');
ReadLn;
CloseGraph;
end.