p align="left">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. Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується. Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображаємого на екрані курсору не має, але є скритий поточний показчик СР (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: позиціонування графічного курсору та визначення його координат: 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. процедура 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 |
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 Побудова прямокутників та паралелепіпедів Процедура 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
|