Група процедур та функцій управління режимами роботи графічного адаптера 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Група процедур та функцій управління режимами роботи графічного адаптера



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 містить широкий набір процедур та функцій роботи з відеорежимами.

 

Побудови графічних об’єктів

Побудова геометричних фігур

Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, У починаються з 1 … max значення).

Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресуємих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється.

Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:

 

GetMax X: integer;

GetMax Y: integer.

 

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

Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображаємого на екрані курсору не має, але є скритий поточний показчик СР (current pointer), який виконує аналогічні функції курсору текстового режиму.

В графічному режимі для переміщення СР використовують процедури:

1) Move To (x, y: integer) – переміщує поточний показчик СР в точку з координатами x, y;

2) Move Rel (dx, dy: integer) – переміщує СР на dx точок по горизонталі і на dy точок по вертикалі відносно останнього положення поточного показчика. Якщо dx, dy більше 0, то координати СР збільшуються; якщо менше 0 - зменшуються.

Для визначення поточного розташування графічного курсору СР використовують функції:

 

GET X: integer;

GET Y: integer;

 

які повертають значення поточних координат показчика.

Приклад 1: позиціонування графічного курсору та визначення його координат:

 

Uses GRAPH;

Var Driver, Mode: integer;

Begin

Driver:= Detect;

InitGraph (Drive, Mode, ‘’);

If GraphResult <> 0 then

Begin

WriteLn (‘ошибка’);

Halt (1);

End;

Move To (GetMax X div 2, GetMax Y div);

OutTextXY (GET X, GET Y, ‘курсор по центру’);

MoveRel (-GET X div 2, -GET Y div 2);

OutTextXY (‘курсор переміщений’);

ReadLn;

CloseGraph;

End.

 

Установка кольору та стилю

1) процедура Set Color (Color: word); встановлює поточний колір для ліній та символів. Параметр Color позначає номер кольору від 0 до 15:

 

Таблиця 1

Black = 0 Light Gray = 7
Blue = 1 Darc Gray = 8
Green 2  Light Blue = 9
Cyan =3 Light Green = 10
Red = 4 Light Cyan = 11
Magente = 5 Light Red = 12
Brown = 6 Light Magente = 13 Yellow = 14 White = 15 Blink = 128

2)процедура SetBKColor (Color: word); встановлює колір фону, який визначається параметром Color.

3) процедура SetFillStyle (Fill, Color: word); встановлює стиль (тип і колір) заповнення фрагментів зображення.

Геометричні побудови.

1) Відображення точки:

В модулі Graph для відображення точки використовують процедуру:

PutPixel (x, y: integer);

x, y – координата точки;

Color – її колір (значення беруть зі встановленої палітри).

2) Відображення ліній:

а)Процедура:

Line (x1, y1, x2, y2: integer);

x1, y1, x2, y2 - координати початкової і кінцевої точок лінії. Лінія креслиться поточним стилем і поточним кольором.

б) процедура: LineTo (x, y: integer); будує лінію від точки поточного розміщення показчика до точки зкоординатами (x,y).

в) процедура: LineRel (dx, dy: integer); проводить відрізок від точки поточного розміщення на величину заданого приросту.

г) процедура: SetLineStyle (Type, Pattern, Thich: word); встановлює стиль відображення ліній, де параметри – це відповідно тип, шаблон і товщина лінії. Тип лінії задається константою з таблиці 3:

 

Таблиця 3

Const Значення Характеристика
SolidLn 0 Безперервна
PottedLn 1 Пунктирна
CenterLn 2 Штрих-пунктирна
DashedLn 3 Штрихова
UserBitLn 4 Задана

 

Параметр Pattern тільки для ліній типу UserBitLn і може приймати значення від 1..65536, тобто 2 байта кожен біт (із 16 біт слова) може приймати значення 0 або 1 (піксель не світиться або світиться).

Таким чином параметр Pattern задає відрізок ліній, довжиною 16 пікселів.

Цей шаблон періодично повторюється по всій довжині ліній.

Параметр Thich приймає 2 значення:


Norm Width = 1

Thick WidTh = 3

 



Поделиться:


Последнее изменение этой страницы: 2020-03-26; просмотров: 94; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.137.17 (0.02 с.)