Стандартний стан ПК після його вимикання, а також до запуску Паскаль - програм відповідає роботі у текстовому режимі. Для виконання графічних засобів потрібно ініціалізувати графічний режим роботи дисплейного адаптера. Настройка графічних процедур на роботу з графічним адаптером досягається шляхом підключення відповідного графічного драйвера. Таким чином графічний драйвер керує графічним адаптером в графічному режимі роботи.
Графічні можливості адаптерів визначаються загальною кількістю пікселів (роздільна здібність) та кількістю кольорів (відтінків) кожного пікселя.
Крім того деякі графічні адаптери мають можливість працювати з декількома графічними сторінками – це область ОЗП, яка використовується для створення "карти" екрана (тобто інформація про світимість кожного пікселя).
Графічні драйвери.
Представляють собою файли з розширенням BGI, які забезпечують взаємодію програм з графічними пристроями і містяться в окремому каталозі (BGI). {*BGI – Borland Graphics Interface – графічний інтерфейс фірми Borland}.
В процесі ініціалізації визначеного графічного режиму вмикається відповідний драйвер.
Таблиця 1
Драйвер | Апаратне забезпечення |
CGA.BGI | Адаптери CGA, MCGA |
EGAVGA.BGI | Адаптери EGA, VGA |
HERC.BGI | Адаптер Hercules |
ATT.BGI | AT&T 6300 (400 рядків) |
PC3270.BGI | IBM 3270 PC |
IBM8514.BGI | IBM 8514 |
Тип драйвера і режим можна задавати у вигляді числа або у вигляді символьної константи. Ці константи визначені у модулі 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 константи типів драйверів та режими використовують як параметри процедур керування графічними режимами.
1. Модуль 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; їх необхідно вказувати в процедурі.
1) Процедура завершенняграфічного режиму:CLOSEGRAPH;
Процедура без параметрів. В процесі її виконання звільняється пам’ять (від драйверів, файлів, шрифтів, проміжних даних), відновлюється текстовий режим роботи екрану.
Наступний перехід до графічного режиму виконується тільки шляхом повторної ініціалізації.
Структура графічної Паскаль-програми.
Приклад 2:
Program GraphicDemo;
uses Graph;
var Driver, Mode : integer;
begin
Driver := Detect;
InitGraph (Driver, Mode, ‘C:\TP\BGI’);
{графічні дії}
…..
CloseGraph ;
end.
2. Помилки ініціалізації графічного режиму та їх обробка.
При виконанні програми можуть виникати помилки. Тому в модулі 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. Процедури та функції роботи з відеорежимами
1) Процедура DetectGraph виконується для тестування графічного адаптера:
DetectGraph (var Driver, Mode : integer);
Ця процедура може бути викликана до ініціалізації графічного режиму. Параметри:
Driver – повертає тип драйвера;
Mode – повертає максимальне значення відповідного режиму.
Ці значення і рекомендується підставляти як фактичні параметри процедури InitGraph.
2) Група процедур та функцій управління режимами роботи графічного адаптера:
а) функція GetGraphMode: integer повертає код установленого режиму роботи графічного адаптера.
б) функція GetMaxMod: integer повертає максимальний номер коду режиму графічного адаптеру;
в) функція GetModName (ModNum : integer): string повертає значення типу STRING, яке містить ім’я режиму роботи за його номером;
г) функція GetDriveName: string повертає ім’я поточного графічного драйвера;
д) процедура GetModeRange (Driver : integer; var LoMode, HyMode : integer); повертає діапазон можливих режимів роботи заданого графічного драйвера:
Driver – тип адаптера;
LoMode – мінімальне значення коду режиму адаптера;
HiMode – мінімальне значення коду режиму адаптера.
!Особливість!:
- якщо значення Drive задано невірно, то змінні отримують значення –1;
- перед звертанням до процедури можна не встановлювати графічний режим.
3) Процедур установки текстового та графічного режимів:
а) 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.
Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.