б) функція 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
WriteLn (`Це графічний режим');
ReadLn;
ResultCRTMode;
WriteLn (`Це текстовий режим');
`ReadLn;
SetGraphMode (GetGraphMode);
WriteLn (`Знову графічний режим');
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);
Приклад 6:
Вивести на екран назви всіх адаптерів і діапазон можливих номерів режимів їх роботи.
D, L, H : integer;
Const
N : array [1..11] of string [8] =
(`CGA', `MCGA', `EGA';
`EGA64', `EGAMONO', `IBM8514';
`HercMONO', ` ATT400', `VGA';
`PC3270', `Помилка');
writeLn (` адаптер Мин. Макс.');
for D :=1 to 11 do
GetModeRange (D, L, H);
WriteLn (N [D], L : 7, H : 10);
Таким чином:
а) керування графічним режимом забезпечується модуль GRAPH, який підключається стандартним способом: USES GRAPH;
б) для ініціалізації графічного режиму використовують процедура InitGraph;
в) завершує графічний режим процедура CloseGraph;
г) структура графічної Паскаль-програми практично не відрізняється від стандартної структури;
д) модуль GRAPH містить широкий набір процедур та функцій роботи з відеорежимами.
6. Побудови графічних об'єктів
Побудова геометричних фігур
Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, У починаються з 1 …max значення).
Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресуємих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється.
Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:
GetMax X : integer;
GetMax Y : integer.
Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.
Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображаємого на екрані курсору не має, але є скритий поточний показчик СР (current pointer), який виконує аналогічні функції курсору текстового режиму.
В графічному режимі для переміщення СР використовують процедури:
Move To (x, y : integer) - переміщує поточний показчик СР в точку з координатами x, y;
Move Rel (dx, dy : integer) - переміщує СР на dx точок по горизонталі і на dy точок по вертикалі відносно останнього положення поточного показчика. Якщо dx, dy більше 0, то координати СР збільшуються; якщо менше 0 - зменшуються.
Для визначення поточного розташування графічного курсору СР використовують функції:
GET X : integer;
GET Y : integer;
які повертають значення поточних координат показчика.
Приклад 1: позиціонування графічного курсору та визначення його координат:
Var Driver, Mode : integer;
InitGraph (Drive, Mode, `');
If GraphResult <> 0 then
WriteLn (`ошибка');
Halt (1);
Move To (GetMax X div 2, GetMax Y div);
OutTextXY (GET X, GET Y, `курсор по центру');
MoveRel (-GET X div 2, -GET Y div 2);
OutTextXY (`курсор переміщений');
Установка кольору та стилю
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.
процедура SetFillStyle (Fill, Color : word); встановлює стиль (тип і колір) заповнення фрагментів зображення.
Геометричні побудови.
Відображення точки:
В модулі Graph для відображення точки використовують процедуру:
PutPixel (x, y : integer);
x, y - координата точки;
Color - її колір (значення беруть зі встановленої палітри).
Відображення ліній:
а) Процедура:
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
Значення
Характеристика
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
Побудова прямокутників та паралелепіпедів
Процедура Rectangle (x1, y1, x2, y2 : integer); створює прямокутник з координатами x1, y1 - лівого верхнього кута і x2, y2 - правого нижнього кута. Область середини прямокутника незафарбована і співпадає з кольором фону екрану. Для ліній прямокутника використовується поточний стиль ліній і колір (заданий).
Процедура Bar (x1, y1, x2, y2 : integer); утворює прямокутник, внутрішня область якого заповнюється поточним стилем (тип і колір). Параметри процедури - відповідні координати лівого верхнього та правого нижнього кутів. Використовують для побудови гістограм, діаграм і т.п.
Процедура Bar3D (x1, y1, x2, y2 : integer; D3 : word; Top : boolean); відображає паралелепіпед (трьохмірне зображення) і зафарбовує його передню грань поточним стилем. X1..Y2 - координати лівого верхнього та правого нижнього кута передньої грані; D3 - трьохмірне зображення "глибина" у пікселях; Top - задає режим відображення верхньої грані. В модулі GRAPH для режиму Top визначені 2 константи:
Top On = TRUE - верхня грань відображається;
Top Off = FALSE - верхня грань не відображається.
Будова многокутників.
Многокутники можна зображати декількома способами: наприклад, за допомогою процедур Line, LineTo.
Паскаль також містить процедури, які дозволяють будь-які многокутники.
процедура DrowPoly (n : word; var points); створює многокутник за допомогою ліній поточного кольору, стиля і товщини. Параметр n - кількість точок ламаної; points - змінна типу PointType, яка містить координати x, y точок ламаної.
В модуліGRAPH передбачений такий тип:
Type
PoinType = RECORD
x, y : integer;
end;
процедура FillPoly (n : word; var points); схожа з попередньою, але навідміну від неї - малює замкнутий многокутник і зафарбовує його. Стиль і колір лінії і контура задається процедурами SetLineStyle i SetColor, тип і колір заповнення - процедурою SetFillStyle.
Процедура FloodFill (x, y : integer; Border : word); служить для заповнення заданим стилем (SetFillStyle) області в середині або зовні замкненого контуру. Параметри: x, y - координати точки в середині або зовні контура; Border - задає колір контуру. Якщо контур незамкнений то буде заповнення всього екрану заданим стилем.
Побудова кола, дуги та еліпсу.
процедура Circle (x, y : integer; r : word); зображає коло поточного кольору, товщини і вид лінії. Параметри x, y - координати центру кола, r - радіус у пікселях.
Процедура Arc (x, y : integer; StAngle, EndAngle, r : word); креслить дугу кола. Задається координатами центру кола, початковим та кінцевим кутами ( у градусах), які відраховуються від горизонтальної вісі проти часової стрілки; радіус кола у пікселях.
процедура Ellipse (x, y : integer; StAngle, EndAngle, xr, yr, r : word); призначена для побудови еліптичних дуг. Параметри: координати центру, початковий та кінцевий кути, горизонтальний та вертикальний радіуси еліпсу у пікселях.
Процедура Sector (x, y : integer; StAngle, EndAngle, rx, ry, r : word); відображає сектор еліпсу, який заповнюється поточним стилем. Параметри аналогічні.
Процедура FillEllipse (x, y : integer; xr, yr : word); креслить контур еліпсу поточним кольором і заповнює поточним стилем. Параметри: координати центру, горизонтальний та вертикальний радіуси еліпсу.
Процедура PieSlice (x, y : integer; StAngle, EndAngle, r : word); зображає сектор кола і заповнює поточним стилем. Зручно використовувати для побудови кругових діаграм.
Програмування графіки в комбінації з текстом
Відображення тексту у графічному режимі має ряд особливостей:
всі дії виконуються тільки з рядковими константами і змінними, тому вся чисельна інформація повинна перетворюватись в символьну;
можливість використання різноманітних шрифтів.
Розглянемо основні засоби модуля GRAPH для виведення текстової інформації:
а) процедура OutText (text : string); виводить на екран рядок тексту, починаючи з поточного розміщення графічного курсору СР;
б) процедура OutTextXY ( x, y, text ); виводить рядок тексту починаючи з указаних координат;
в) процедура SetTextStyle (Font, Direct, size : word); встановлює стиль тексту. Параметри: код шрифту, код орієнтації символів, розмір символів.
Відображення цифрової інформації.
В модулі GRAPH засоби відсутні. Але можна використовувати наступний спосіб: спочатку перетворити число або цифру в рядок за допомогою процедури Str, а далі операцією конкатенації (+) поєднати її з рядком, який відображається процедурою OutTextXY.
Приклад:
Max := 3.14;
Str (Max : 4 : 2, Smax);
OutTextXY (400, 40, `Max=' + Smax);
Висновки: таким чином модуль GRAPH містить достатньо потужні засоби побудови і відображення різноманітної графічної інформації (геометричні фігури в комбінації з текстом і числами).
Страницы: 1, 2