Смекни!
smekni.com

Основні відомості про алгоритмічну мову Turbo Pascal Графіка Pascal (стр. 2 из 3)

Стандартний стан ПК після його вимикання, а також до запуску Паскаль - програм відповідає роботі у текстовому режимі. Для виконання графічних засобів потрібно ініціалізувати графічний режим роботи дисплейного адаптера. Настройка графічних процедур на роботу з графічним адаптером досягається шляхом підключення відповідного графічного драйвера. Таким чином графічний драйвер керує графічним адаптером в графічному режимі роботи.

Графічні можливості адаптерів визначаються загальною кількістю пікселів (роздільна здібність) та кількістю кольорів (відтінків) кожного пікселя.

Крім того деякі графічні адаптери мають можливість працювати з декількома графічними сторінками – це область ОЗП, яка використовується для створення "карти" екрана (тобто інформація про світимість кожного пікселя).

Графічні драйвери.

Представляють собою файли з розширенням 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.

Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.