TURBO PASCAL |
Новости
|
Процедуры и функции
Процедура 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, значением которой в момент обращения к процедуре могут быть такие константы:
{Адаптер 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.
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |