Процедуры и функции
Процедура 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 в виде пустой строки. Такая форма обращения будет корректна только в том случае, когда нужный файл графического драйвера находится в текущем каталоге. Для упрощения повторения примеров скопируйте файл, соответствующий адаптеру Вашего ПК, в текущий каталог.