HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail |
|
|
Turbo Pascal Documentation | ||
Функция: Включает в таблицу драйверов устройств фирма BGI (Борланд) драйверы, поставляемый другими фирмами. Описание: InstallUserDriver(имя : string; AutoDetectPtr : pointer) Тип результата: слово (word). Примечания: Данная процедура позволяет вам использовать драйверы устройств, отличающиеся от драйверов фирмы Борланд. Параметр "имя" представляет собой имя нового драйвера уст- ройства. AutoDetectPrt - это указатель на необязательную функцию автоматического распознавания, которая может прила- гаться к новому драйверу. Эта функция автоматического рас- познавания не требует параметров и возвращает целое значе- ние. Если внутренняя таблица драйверов заполнена, то проце- дура InstallUserDriver возвращает значение -11 (grError). В противном случае данная процедура присваивает и возвращает для нового драйвера устройства номер этого драйвера. Драйвер пользователя можно использовать двумя способа- ми. Предполохим, у вас имеется новая видеоплата SGA и фирма, изготовливающая эту плату, поставляет для нее драйвер SGA.BGI. Наиболее простой способ использования этого драйве- ра состоит в его установке с помощью процедуры InstallUserDriver и передачи возвращаемого значения (присво- енного номера драйвера) непосредственно процедуре InitGraph: var Driver, Mode : integer; begin Driver := InstallUserDriver('SGA.BGI', 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; { предположим, плата отсутствует } Found := ... { поиск соответствующего аппарат- ного обеспечения } if not Found then Exit; { код возврата = -11 } DetectSGA := 3; { возвратить рекомендуемый и наз- начаемый по умолчанию видео- режим } end. {F-} Задача функции DetectSGA состоит в поиске во время ра- боты программы аппаратного обеспечения SGA. Если плата SGA не обнаружена, то данная функция возвращает значение -11 (grError). В противном случае возвращаемое значение предс- тавляет собой принятый по умолчанию видеорежим для платы SGA (обычно он обеспечивает наилучшее сочетание цвета и разреша- ющей сопсобности, которые можно достичь на данном аппаратном обеспечении). Заметим, что эта фукнция не требует параметров и возв- ращает целочисленное значение со знаком. Она должна иметь дальний тип обращения. При установке драйвера (путем обраще- ния к процедуре InstallUserDriver) вы передаете наряду с именем файла, содержащего драйвер устройства, адрес DetectSGA: var Driver, Mode : integer; begin Driver := InstallUserDriver('SGA.GBI', @DetectSGA); if Driver = grError then Halt(1); Driver := Detect; { не будем учитывать драйвер SGA, доверимся средствам автоматического распознавания } InitGraph(Driver, Mode, ''); ... end. После того, как вы установите драйвер устройства и функцию автоматического распознавания, можно вызвать проце- дуру InitGraph, которая выполнит обычный процесс автомати- ческого распознавания. Перед тем, как процедура InitGraph вызывает свою встроенную функцию автоматического распознава- ния (DetectGraph), она вызывает сначала функцию DetectSGA. Если DetectSGA не найдет аппаратных средств SGA, то возвра- щается значение -11 (grError), а процедура InitGraph продол- жит выполнение обычного процесса автоматического распознава- ния (который также может включать в себы вызов пользователь- ских функций автоматического распознавания в том порядке, в котором они были установлены). Если же функция DetectSGA оп- ределит наличие SGA, то она возвращает неотрицательное зна- чение режима, а InitGraph найдет и загрузит файл SGA.BGI, переведет аппаратное обеспечение в нужный режим (рекомендо- ванный функцией DetectSGA) и, наконец, передаст управление вашей программе. Аналогичная процедура имеется в версии 2.0 Турбо-Си. Прочее: См. также процедуры InitGraph и RegisterBGI- Driver. Пример: uses Graph; var Driver, Mode, TestDriver, ErrCode : integer; {F+} function TestDetect : integer; { фукнция автоматического распознавания: если имеются соответствующие аппаратные средства, она возвращает значение, равное соответствующему принимаемому по умолчанию режиму } begin TestDetect := 1; { по умолчанию режим = 1 } end; {F-} begin { установить драйвер } TestDriver := InstallDriver('TEST', @TestDetect); if GraphResult <> grOk then begin Writeln('Ошибка при установке драйвера'); Halt(1); end; Driver := Detect; { перейти в графический режим } InitGraph(Driver, Mode, ''); ErrCode := GraphResult; If ErrCode <> grOk then begin Writeln('Устанавливаемый драйвер поддерживается...'); Readln; CloseGraph; end. |
HOME |