|
Процедуры и функции
Процедура InitGraph.
Инициирует графический режим работы адаптера. Заголовок
процедуры:
Procedure InitGraph(var Driver,Mode:
Integer; Path: String);
Здесь Driver - переменная типа Integer,
определяет тип графического драйвера; Mode - переменная
того же типа, задающая режим работы графического адаптера;
Path - выражение типа String, содержащее имя файла драйвера
и, возможно, маршрут его поиска.
К моменту вызова процедуры на одном
из дисковых носителей информации должен находиться файл,
содержащий нужный графический драйвер. Процедура загружает
этот драйвер в оперативную память и переводит адаптер
в графический режим работы. Тип драйвера должен соответствовать
типу графического адаптера. Для указания типа драйвера
в модуле предопределены следующие константы:
const
Detect=0;{Режим автоопределения типа}
CGA=1;
MCGA=2;
EGA=3;
EGA64=4;
EGAMono=5;
IBM8514=6;
HercMono=7;
ATT400=8;
VGA=9;
PC3270=10;
Большинство адаптеров могут работать
в различных режимах. Для того, чтобы указать адаптеру
требуемый режим работы, используется переменная Mode,
значением которой в момент обращения к процедуре могут
быть такие константы:
|
const
|
|
|
|
{ Адаптер CGA : }
|
|
|
|
CGACO = 0;
|
{Низкое разрешение, палитра
|
0}
|
|
CGAC1 = 1;
|
{Низкое разрешение, палитра
|
1}
|
|
CGAC2 = 2;
|
{Низкое разрешение, палитра
|
2}
|
|
CGAC3 = 3;
|
{Низкое разрешение, палитра
|
3}
|
|
CGAHi = 4;
|
{Высокое разрешение}
|
|
|
{Адаптер MCGA:}
|
|
|
|
MCGACO = 0;
|
{Эмуляция CGACO}
|
|
|
MCGAC1 = 1;
|
{Эмуляция CGAC1}
|
|
|
MCGAC2 = 2;
|
{Эмуляция CGAC2}
|
|
|
MCGAC3 = 3;
|
{Эмуляция CGAC3}
|
|
|
MCGAMed = 4;
|
{Эмуляция CGAHi}
|
|
|
MCGAHi = 5;
|
{640x480}
|
|
|
{Адаптер EGA :}
|
|
|
|
EGALo = 0;
|
{640x200, 16 цветов}
|
|
|
EGAHi = 1;
|
{640x350, 16 цветов}
|
|
|
EGAMonoHi = 3;
|
{640x350, 2 цвета}
|
|
|
{Адаптеры HGC и
|
HGC+:}
|
|
|
HercMonoHi = 0;
|
{720x348}
|
|
|
{АдаптерАТТ400:}
|
|
|
|
ATT400CO = 0;
|
{Аналог режима CGACO}
|
|
|
ATT400C1 = 1;
|
(Аналог режима CGAC1}
|
|
|
ATT400C2 = 2;
|
{Аналог режима CGAC2}
|
|
|
ATT400C3 = 3;
|
{Аналог режима CGAC3}
|
|
|
ATT400Med = 4;
|
{Аналог режима CGAHi}
|
|
|
ATT400H1 = 5;
|
{640x400, 2 цвета}
|
|
{Адаптер VGA:}
VGALo = 0;
{640x200}
VGAMed = 1;
{640x350}
VGAHi = 2;
{640x480}
PC3270H1 = 0;
{Аналог HercMonoHi}
{Адаптер 1ВМ8514}
IBM8514LO =0;
{640x480, 256 цветов}
IBM8514H1 = 1;
{1024x768, 256 цветов}
Пусть, например, драйвер CGA.BGI находится
в каталоге TP\BGI на диске С и устанавливается режим
работы 320x200 с палитрой 2. Тогда обращение к процедуре
будет таким:
Uses Graph;
var
Driver, Mode : Integer;
begin
Driver := CGA;{Драйвер}
Mode := CGAC2;{Режим работы}
InitGraph(Driver, Mode,' С:\TP\BGI')
;
.......
Если тип адаптера ПК неизвестен или
если программа рассчитана на работу с любым адаптером,
используется обращение к процедуре с требованием автоматического
определения типа драйвера:
Driver := Detect;
InitGraph(Driver, Mode, 'C:\TP\BGI');
После такого обращения устанавливается
графический режим работы экрана, а при выходе из процедуры
переменные Driver и Mode содержат целочисленные значения,
определяющие тип драйвера и режим его работы. При этом
для адаптеров, способных работать в нескольких режимах,
выбирается старший режим, т.е. тот, что закодирован
максимальной цифрой. Так, при работе с CGA -адаптером
обращение к процедуре со значением Driver = Detect вернет
в переменной Driver значение 1 (CGA) и в Mode -значение
4 (CGAHi), а такое же обращение к адаптеру VGA вернет
Driver = 9 (VGA) и Mode = 2 (VGAHi).
Функция GraphResult. Возвращает значение
типа Integer, в котором закодирован результат последнего
обращения к графическим процедурам. Если ошибка не обнаружена,
значением функции будет ноль, в противном случае - отрицательное
число, имеющее следующий смысл:
const
grOk = 0;{Нет ошибок}
grlnitGraph =-1;{He инициирован графический
режим}
grNotDetected =-2;{Не определен тип
драйвера}
grFileNotFind =-3;{Не найден графический
драйвер}
grlnvalidDriver =-4;{Неправильный тип
драйвера}
grNoLoadMem =- 5;{Нет памяти для размещения
драйвера}
grNoScanMem = - 6;{Нет памяти для просмотра
областей}
grNoFloodMem =- 7;{Нет памяти для закраски
областей}
grFontNotFound = -8;{Не найден файл
со шрифтом}
grNoFontMem =- 9;{Нет памяти для размещения
шрифта}
grlnvalidMode =-10;{Неправильный графический
режим}
grError =-11;{Общая ошибка}
grIOError =-12;{Ошибка ввода-вывода}
grlnvalidFont =-13;{Неправильный формат
шрифта}
grInvalidFontNum=-14; {Неправильный
номер шрифта}
После обращения к функции GraphResult
признак ошибки сбрасывается, поэтому повторное обращение
к ней вернет ноль.
Функция GraphErrorMsg.
Возвращает значение типа String, в котором
по указанному коду ошибки дается соответствующее текстовое
сообщение. Заголовок функции:
Function GraphErrorMsg(Code: Integer):
String;
Здесь Code - код ошибки, возвращаемый
функцией GraphResult.
Например, типичная последовательность
операторов для инициации графического режима с автоматическим
определением типа драйвера и установкой максимального
разрешения имеет следующий вид:
var
Driver, Mode, Error:Integer;
begin
Driver := Detect;{Автоопределение драйвера}
InitGraph(Driver, Mode,' ');{Инициируем
графику}
Error := GraphResult;{Получаем результат}
if Error <> grOk then{Проверяем
ошибку}
begin{Ошибка в процедуре инициации}
WriteLn(GraphErrorMsg(Error));{Выводим
сообщение}
.......
end
else{Нет ошибки}
.......
Чаще всего причиной возникновения ошибки
при обращении к процедуре InitGraph является неправильное
указание местоположения файла с драйвером графического
адаптера (например, файла CGA.BGI для адаптера CGA).
Настройка на местоположение драйвера осуществляется
заданием маршрута поиска нужного файла в имени драйвера
при вызове процедуры InitGraph. Если, например, драйвер
зарегистрирован в подкаталоге DRIVERS каталога PASCAL
на диске D, то нужно использовать вызов:
InitGraph(Driver, Mode, 'd:\Pascal\Drivers');
Замечание. Во всех следующих примерах
процедура InitGraph вызывается с параметром Driver в
виде пустой строки. Такая форма обращения будет корректна
только в том случае, когда нужный файл графического
драйвера находится в текущем каталоге. Для упрощения
повторения примеров скопируйте файл, соответствующий
адаптеру Вашего ПК, в текущий каталог.
Процедура CloseGraph.
Завершает работу адаптера в графическом
режиме и восстанавливает текстовый режим работы экрана.
Заголовок:
Procedure CloseGraph;
Процедура RestoreCRTMode.
Служит для кратковременного возврата
в текстовый режим. В отличие от процедуры CloseGraph
не сбрасываются установленные параметры графического
режима и не освобождается память, выделенная для размещения
графического драйвера. Заголовок:
Procedure RestoreCRTMode;
Функция GetGraphMode.
Возвращает значение типа Integer, в
котором содержится код установленного режима работы
графического адаптера. Заголовок:
Function GetGraphMode: Integer;
Процедура SetGraphMode.
Устанавливает новый графический режим
работы адаптера. Заголовок:
Procedure SetGraphMode(Mode: Integer);
Здесь Mode - код устанавливаемого режима.
Следующая программа иллюстрирует переход
из графического режима в текстовый и обратно:
Uses Graph;
var .
Driver, Mode, Error : Integer;
begin
{Инициируем графический режим}
Driver := Detect;
InitGraph(Driver, Mode, '');
Error := GraphResult; {Запоминаем результат}
i£ Error <> grOk then {Проверяем
ошибку}
WriteLn(GraphErrorMsg(Error)) {Есть
ошибка}
else
begin {Нет ошибки}
WriteLn ('Это графический режим');
WriteLn ('Нажмите "Enter"...':20);
ReadLn;
{Переходим в текстовый режим}
RestoreCRTMode;
WriteLn (' А это текстовый...');
ReadLn;
{Возвращаемся в графический режим}
SetGraphMode (GetGraphMode);
WriteLn ('Опять графический режим...');
ReadLn;
CloseGraph
end
end.
В этом примере для вывода сообщений
как в графическом, так и в текстовом режиме используется
стандартная процедура WriteLn. Если Ваш ПК оснащен нерусифицированным
адаптером CGA, вывод кириллицы в графическом режиме
таким способом невозможен, в этом случае замените соответствующие
сообщения так, чтобы использовать только латинские буквы.
Процедура DetectGraph.
Возвращает тип драйвера и режим его
работы. Заголовок:
Procedure DetectGraph(var Driver,Mode:
Integer);
Здесь Driver - тип драйвера; Mode -
режим работы.
В отличие от функции GetGraphMode описываемая
процедура возвращает в переменной Mode максимально возможный
для данного адаптера номер графического режима.
Функция GetDriverName.
Возвращает значение типа String, содержащее
имя загруженного графического драйвера. Заголовок:
Function GetDriverName: String;
Функция GetMaxMode.
Возвращает значение типа Integer, содержащее
количество возможных режимов работы адаптера. Заголовок:
Function GetMaxMode: Integer;
Функция GetModeName.
Возвращает значение типа String, содержащее
разрешение экрана и имя режима работы адаптера по его
номеру. Заголовок:
Function GetModName(ModNumber: Integer):
String;
Здесь ModNumber - номер режима.
Следующая программа после инициации
графического режима выводит на экран строку, содержащую
имя загруженного драйвера, а также все возможные режимы
его работы.
Uses Graph;
var
a,b: Integer;
begin
a := Detect;
InitGraph(a, b, '');
WriteLn(GetDriverName);
for a := 0 to GetMaxMode do
WriteLn(GetModeName(a):10);
ReadLn;
CloseGraph
end.
Процедура GetModeRange.
Возвращает диапазон возможных режимов
работы заданного графического адаптера. Заголовок:
Procedure GetModeRange(Drv: Integer;
var Min, Max: Integer);
Здесь Drv - тип адаптера; Min - переменная
типа Integer, в которой возвращается нижнее возможное
значение номера режима; Мах - переменная того же типа,
верхнее значение номера.
Если задано неправильное значение параметра
Drv, процедура вернет в обеих переменных значение -1.
Перед обращением к процедуре можно не устанавливать
графический режим работы экрана. Следующая программа
выводит на экран названия всех адаптеров и диапазоны
возможных номеров режимов их работы.
Uses Graph;
var
D,L,H: Integer;
const
N: array [1..11] of String [8] =
('CGA ', 'MCGA ', 'EGA ',
'EGA64 ', 'EGAMono ', ЧВМ8514 ',
'HercMono', 'ATT400 ', 'VGA ',
'PC3270 ', 'Ошибка ');
begin
WriteLn('Адаптер Мин. Макс.');
for D := 1 to 11 do
begin
GetModeRange(D, L, H);
WriteLn(N[D], L:7, H:10)
end
end.
|