p align="left"> Тип драйвера і режим можна задавати у вигляді числа або у вигляді символьної константи. Ці константи визначені у модулі GRAPH:
Таблиця 2 |
Detect = 0 | {автовизначення} | | CGA = 1; | EGAMONO = 5; | | MCGA = 2; | IBM8514 = 6; | | EGA = 3; | HercMONO = 7; | | EGA64 = 4; | ATT 400 = 8; VGA = 9; PC3270 = 10. | | |
Вказані в таблиці 2 константи типів драйверів та режими використовують як параметри процедур керування графічними режимами. Модуль GRAPH. Модуль GRAPH підключається стандартним способом: USES GRAPH; Модуль GRAPH представляє собою окремий файл GRAPH.TPU і містить набір процедур і функцій. Процедура ініціалізації графічного режиму: InitGraph (var Driver, Mode : integer; path : string);
Змінні Driver i Mode задають драйвер і режим роботи адаптера, path - визначає можливий шлях до файлу. Перші дві змінні задаються константами таблиці 2, іменем або числовим значенням. Приклад 1: Нехай драйвер EGAVGA.BGI знаходиться в каталозі TP\BGI диска С і встановлює режим VGAHI (640*480, 16 кольорів). Фрагмент використання процедури в програмі:
begin … Driver := VGA; Mode := VGAHI; InitGraph (Driver, Mode, `C:\TP\BGI'); … end. Якщо тип адаптера не відомий, або якщо програма розрахована на роботу з будь-яким адаптером, використовується звертання до процедури з параметром автоматичного визначення типу драйверу. Приклад 1а: ………………… Driver := Detect; InitGraph (Driver, Mode, `C:\TP\BGI'); ………………… Такий параметр рекомендують використовувати при роботі на різних комп'ютерах з різними відеоадаптерами. Особливості автовизначення типу драйвера: а) для адаптера вибирається максимальний режим; б) на час виконання програми всі драйвери знаходяться у пам'яті, або на диску; для великих програм це може привести до зменшення швидкості роботи програми; в) ТР автоматично не розпізнає адаптери IBM8514 i ATT400; їх необхідно вказувати в процедурі. Процедура завершення графічного режиму: CLOSEGRAPH; Процедура без параметрів. В процесі її виконання звільняється пам'ять (від драйверів, файлів, шрифтів, проміжних даних), відновлюється текстовий режим роботи екрану. Наступний перехід до графічного режиму виконується тільки шляхом повторної ініціалізації.
Структура графічної Паскаль-програми. Приклад 2: Program GraphicDemo; uses Graph; var Driver, Mode : integer; begin Driver := Detect; InitGraph (Driver, Mode, `C:\TP\BGI'); {графічні дії} ….. CloseGraph ; end. Помилки ініціалізації графічного режиму та їх обробка. При виконанні програми можуть виникати помилки. Тому в модулі GRAPH реалізований механізм визначення помилок та видачі повідомлень про них на екран за допомогою функції GraphResult i GraphErrorMsg. Функція GraphResult: integer; повертає 0, якщо остання графічна операція виконалась без помилок, або число від - 14..-1, при наявності помилок. Функція GraphErrorMsg (Code : integer): string; повертає значення типу STRING в якому відповідно коду помилки надається текстову повідомлення. CODE - код помилки, який повертається функцією GraphResult. Приклад 3: var Driver, Mode, Error : string; begin Driver := Detect; InitGraph (Driver, Mode, `'); Error := GraphResult; if Error <> 0 then writeln (GraphErrorMsg (Error)); ……………. {повідомлення помилки} CloseGraph; end.
5. Процедури та функції роботи з відеорежимами Процедура DetectGraph виконується для тестування графічного адаптера: DetectGraph (var Driver, Mode : integer); Ця процедура може бути викликана до ініціалізації графічного режиму. Параметри: Driver - повертає тип драйвера; Mode - повертає максимальне значення відповідного режиму. Ці значення і рекомендується підставляти як фактичні параметри процедури InitGraph. Група процедур та функцій управління режимами роботи графічного адаптера: а) функція GetGraphMode: integer повертає код установленого режиму роботи графічного адаптера. б) функція GetMaxMod: integer повертає максимальний номер коду режиму графічного адаптеру; в) функція GetModName (ModNum : integer): string повертає значення типу STRING, яке містить ім'я режиму роботи за його номером; г) функція GetDriveName: string повертає ім'я поточного графічного драйвера; д) процедура GetModeRange (Driver : integer; var LoMode, HyMode : integer); повертає діапазон можливих режимів роботи заданого графічного драйвера: Driver - тип адаптера; LoMode - мінімальне значення коду режиму адаптера; HiMode - мінімальне значення коду режиму адаптера. !Особливість!: якщо значення Drive задано невірно, то змінні отримують значення -1; перед звертанням до процедури можна не встановлювати графічний режим. Процедур установки текстового та графічного режимів: а) RestorCRTMode; повертає до текстового режиму. !Особливість!: На відміну від CloseGraph графічний драйвер залишається у пам'яті, а також залишаються установленими графічного режиму. б) процедура SetGraphMode (Mode : integer); установлює графічний режим за вказаним кодом - Mode. !Особливість!: Для повернення до попереднього графічного режиму на місце параметра мінімальне значення коду режиму адаптера Mode можна вставити функцію GetGraphMode. Розглянемо приклади використання процедур роботи з відеорежимами. Приклад 4: Перехід з графічного режиму до текстового і знову до графічного. Uses Graph; var Driver, Mode, Error : integer; begin Driver := Detect; InitGraph (Driver, Mode, `'); Error GraphResult; if Error <> 0 then writeln (GraphErrarMsg (Error)) else begin writeln (`Це графічний режим'); readln; ResultCRTMode; writeln (`Це текстовий режим'); readln; SetGraphMode (GetGraphMode); writeln (`Знову графічний режим'); readln; CloseGraph; end; end. Приклад 5: Після ініціалізації графічного режиму виводить на екран рядок з іменем завантаженого драйверу, а також всі режими його роботи. Uses GRAPH; var a, b : integer; begin a := Detect; InitGraph (a, b, `'); writeln (GetDriveName); for a := 0 to GetMaxMode do writeln (GetModeName (a) : 10); readln; CloseGraph; end;
Приклад 6: Вивести на екран назви всіх адаптерів і діапазон можливих номерів режимів їх роботи. Uses Graph; var D, L, H : integer; const N : array [1..11] of string [8] = (`CGA', `MCGA', `EGA'; `EGA64', `EGAMONO', `IBM8514'; `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.
Таким чином: а) керування графічним режимом забезпечується модулем GRAPH, який підключається стандартним способом: USES GRAPH; б) для ініціалізації графічного режиму використовують процедура InitGraph; в) завершує графічний режим процедура CloseGraph; г) структура графічної Паскаль-програми практично не відрізняється від стандартної структури; д) модуль GRAPH містить широкий набір процедур та функцій роботи з відеорежимами. 6. Побудова геометричних фігур. Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, У починаються з 1 … max значення). Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресуємих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється. Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:
GetMax X : integer; GetMax Y : integer. Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.
Страницы: 1, 2, 3
|