InstallUserDriver (функция) (модуль Graph)

Язык:
Русский
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 }

uses Graph;

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.
Тэги: InstallUserDriver
| G+
Код для вставки: :: :: :: ::
Поделиться: // //