–PAGE_BREAK–Мал.1 Ілюстрація процедури Arc
Процедура GetArcCoords.
Повертає координати трьох крапок: центру, початку і кінця дуги.
Заголовок:
Procedure GetArcCoords(var Coords: ArcCoordsType);
Тут Coords — змінна типа ArcCoordsType, в якій процедура повертає координати центру, початку і кінця дуги.
Тип ArcCoordsType визначений в модулі Graph таким чином:
type
ArcCoordsType = record
X,Y: Integer; {Координати центру}
Xstart,Ystart: Integer; {Початок дуги}
Xend,Yend: Integer; {Кінець дуги}
end;
Процедура Ellipse.
Викреслює еліпсну дугу.
Заголовок:
Procedure Ellipse(X,Y: Integer; BegA,EndA,RX,RY: Word);
Тут X, Y — координати центру; BegA, EndA — відповідно початковий і кінцевий кути дуги; RX, RY- горизонтальний і вертикальний радіуси еліпса в пікселях.
При викреслюванні дуги еліпса використовуються ті ж угоди щодо ліній, що і в процедурі Circle, і ті ж угоди щодо кутів, що і в процедурі Arc. Якщо радіуси погоджувати з урахуванням масштабного коефіцієнта GetAspectRatio, буде викреслено правильне коло.
· Фарби, палітри, заповнення
Процедура SetColor.
Встановлює поточний колір для ліній і символів, що виводяться. Заголовок:
Procedure SetColor(Color: Word);
Тут Color — поточний колір.
В модулі Graph визначені точно такі ж константи для завдання кольору, як і в модулі СИГ.
Функція GetColor. Повертає значення типа Word, що містить код поточного кольору.
Заголовок:
Function GetColor: Word;
Функція GetMaxColor.
Повертає значення типу Word, що містить максимальний доступний код кольору, який можна використовувати для звернення до SetColor.
Заголовок:
Function GetMaxColor: Word;
Процедура SetBkColor.
Встановлює колір фону.
Заголовок:
Procedure SetBkColor(Color: Word);
Тут Color — колір фону.
На відміну від текстового режиму, в якому колір фону може бути тільки темного відтінку, в графічному режимі він може бути будь-ким. Установка нового кольору фону негайно змінює колір графічного екрану. Це означає, що не можна створити зображення, дві ділянки якого мали б різний колір фону. Для CGA -адаптера в режимі високого розширення установка кольору фону змінює колір активних пікселів. Після заміни кольору фону на будь-який, відмінний від 0 (Black) колір, Ви не зможете більш використовувати колір 0 як чорний, він замінюватиметься на колір фону, оскільки процедури модуля Graph інтерпретують колір з номером 0 як колір фону. Це означає, зокрема, що Ви вже не зможете повернути фону чорний колір!
Функція GetBkColor.
Повертає значення типу Word, що містить поточний колір фону. Заголовок:
Function GetBkColor: Word;
Процедура SetPalette.
Замінює один з кольорів палітри на новий колір.
Заголовок:
Procedure SetPalette(N: Word; Color: Shortlnt);
Тут N — номер кольору в палітрі; Color — номер знов встановлюваного кольору.
Дана процедура може працювати тільки з адаптерами EGA або VGA. Вона не повинна використовуватися з IBM8514 або 256-кольоровим варіантом VGA — для цих адаптерів призначена особлива процедура SetRGBPalette (див. нижче). Первинне розміщення кольорів в палітрах EGA/VGA відповідає послідовності їх опису константами Black….White, тобто колір з індексом 0 — чорний, 1 — синій, 2 — зелений і т.д. Після звернення до процедури всі фрагменти зображення, виконані кольором з індексом N з палітри кольорів, одержать колір Color. Наприклад, якщо виконати оператор
SetPalette(2,White);
то колір з індексом 2 (первинно це — бірюзовий колір Cyan) буде замінений на білий. Колір з індексом 0 ототожнюється з кольором фону і може змінюватися разом з будь-яким іншим кольором.
Процедура GetPalette.
Повертає розмір і кольори поточної палітри.
Заголовок:
Procedure GetPalette(var Palettelnfo: PaletteType);
Тут Palettelnfo — змінна типа PaletteType, що повертає розмір і кольори палітри.
В модулі Graph визначена константа
const
MaxColors =15;
і тип
type
PaletteType = record
Size: Word; {Кількість кольорів в палітрі}
Colors: array [0..MaxColors] Shortlnt
{Номери вхідних в палітру кольорів}
end;
Процедура SetAllPalette.
Змінює одночасно декілька кольорів палітри.
Заголовок процедури:
Procedure SetAllPalette(var Palette);
Параметр Palette в заголовку процедури описаний як параметр, що не типізується. Перший байт цього параметра повинен містити довжину N палітри, решта N байтів — номери знов встановлюваних кольорів в діапазоні від -1 до MaxColors. Код -1 означає, що відповідний колір початкової палітри не міняється.
Функція GetPaletteSize.
Повертає значення типу Integer, що містить розмір палітри (максимальна кількість доступних кольорів).
Заголовок:
Function GetPaletteSize: Integer;
Процедура GetDefaultPalette.
Повертає структуру палітри, встановлювану за змовчуванням (в режимі автонастройки).
Заголовок:
Procedure GetDefaultPalette(var Palette: PaletteType);
Тут Palette — змінна типа PaletteType (див. процедуру GetPalette), в якій повертаються розмір і кольори палітри.
Процедура SetFillStyle.
Встановлює стиль (тип і колір) заповнення.
Заголовок:
Procedure SetFillStyle(Fill,Color: Word);
Тут Fill — тип заповнення; Color — колір заповнення.
За допомогою заповнення можна покривати які-небудь фрагменти зображення узором, що періодично повторюється. Для вказівки типу заповнення використовуються наступні заздалегідь певні константи:
const
EmptyFill = 0;{Заповнення фоном (узор відсутній)}
SolidFill = 1;{Суцільне заповнення}
LineFill = 2;{Заповнення ——-}
LtSlashFill = 3;{Заповнення ///////}
SlashFill = 4;{Заповнення потовщеними ///}
BkSlashFill = 5;{Заповнення потовщеними \\\}
LtBkSlashFill = 6;{Заповнення \\\\\\\}
HatchFill = 7;{Заповнення +++++++}
XHatchFill = 8;{Заповнення ххххххх}
InterleaveFill= 9;{Заповнення прямокутну клітинку}
WideDotFill = 10;{Заповнення рідкісними крапками}
CloseDotFill = 11;{Заповнення частими крапками}
UserFill = 12;{Узор визначається користувачем}
Процедура SetFillPattern.
Встановлює зразок малюнка і колір штрихування. Заголовок:
Procedure SetFillPattern(Pattern: FillPatternType;Color: Word);
Тут Pattern — вираз типу FillPatternType; встановлює зразок малюнка для Fill — UserFill в процедурі SetFillStyle; Color — колір заповнення.
Зразок малюнка задається у вигляді матриці з 8×8 пікселів і може бути представлений масивом з 8 байт наступного типу:
type
FillPatternType = array [1..8] Byte;
Кожний розряд будь-якого з цих байтів управляє світимістю пікселя, причому перший байт визначає 8 пікселів першого рядка на екрані, другий байт — 8 пікселів другого рядка і т.д.
Процедура GetFillPattern.
Повертає зразок заповнення, встановлений раніше процедурою SetFillPattern. Заголовок:
Procedure GetFillPattern(var Pattern: FillPatternType);
Тут Pattern — змінна типа FillPatternType, в якій повертається зразок заповнення.
Якщо програма не встановлювала зразок за допомогою процедури SetFillPattern, масив Pattern заповнюється байтами із значенням 255 ($FF).
Процедура GetFillSettings.
Повертає поточний стиль заповнення. Заголовок:
Procedure GetFillSettings(var Pattlnfo: FillSettingsType);
Тут Pattlnfo — змінна типа FillSettingsType, в якій повертається поточний стиль заповнення.
В модулі Graph визначений тип:
type
FillSettingsType = record
Pattern: Word; {Зразок}
Color: Word {Колір}
end;
Поля Pattern і Color в цьому, записі мають те ж призначення, що і аналогічні параметри при зверненні до процедури SetFillStyle.
Процедура SetRGBPalette.
Встановлює колірну гамму при роботі з дисплеєм IBM 8514 і адаптером VGA. Заголовок:
Procedure SetRGBPalette(ColNum,RedVal, GreenVal,BlueVal:Integer);
Тут ColNum — номер кольору; RedVal, GreenVal, BlueVal — вирази типу Integer, що встановлюють інтенсивність відповідно червоній, зеленій і сині складових кольору.
Ця процедура може працювати тільки з дисплеєм IBM 8514, а також з адаптером VGA, що використовує відеопам’ять об’ємом 256 Кбайт. В першому випадку параметр ColNum задається числом в діапазоні 0…255, в другому — в діапазоні 0…15. Для установки інтенсивності використовуються 6 старших розрядів молодшого байта будь-якого з параметрів RedVal, GreenVal, BlueVal.
Процедура FloodFill.
Заповнює довільну замкнуту фігуру, використовуючи поточний стиль заповнення (узор і колір). Заголовок:
Procedure FloodFill(X,Y: Integer; Border: Word);
Тут X, Y- координати будь-якої точки всередині замкнутої фігури; Border — колір граничної лінії.
Якщо фігура незамкнута, заповнення «розіллється» по всьому екрану.
Слід врахувати, що реалізований в процедурі алгоритм проглядання меж замкнутої фігури не відрізняється досконалістю. Зокрема, якщо виводяться підряд два порожні рядки, заповнення припиняється. Така ситуація звичайно виникає при заповненні невеликих фігур з використанням типу LtSlashFill. У фірмовому керівництві по Турбо Паскалю рекомендується, по можливості, замість процедури FloodFill використовувати FillPoly (заповнення прямокутника).
Процедура Bar.
Заповнює прямокутну область екрану.
Заголовок:
Procedure Bar(X1,Y1,X2,Y2: Integer);
Тут XJ…Y2 — координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів закрашуваної області.
Процедура закрашує (але не обводить) прямокутник поточним зразком узору і поточним кольором, які встановлюються процедурою SetFillStyle.
Процедура Ваr3D.
Викреслює тривимірне зображення паралелепіпеда і закрашує його передню грань. Заголовок:
Procedure Ваr3D (X1,Y1,X2,Y2,Depth: Integer; Top: Boolean);
Тут X1… Y2 — координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів передньої грані; Depth — третє вимірювання тривимірного зображення («глибина») в пікселях; Тор — спосіб зображення верхньої грані.
Якщо параметр Тор має значення True, верхня грань паралелепіпеда викреслюється, інакше — не викреслюється (цей варіант використовується для зображення поставлених один на одного паралелепіпедів). Як значення цього параметра може використовуватися одна з наступних констант, визначених в модулі Graph:
const
TopOn = True;
TopOff = False;
При викреслюванні використовується поточний стиль ліній (SetLineStyle) і поточний колір (SetColor). Передня грань заливається поточним стилем заповнення (SetFillStyle).
Процедура звичайно застосовується при побудові стовпчикових діаграм. Слід врахувати, що паралелепіпед «прозорий», тобто за його незакрашеними гранями можуть бути видні інші елементи зображення.
Процедура Fill Poly.
Обводить лінією і закрашує замкнутий багатокутник.
Заголовок:
Procedure FillPoly(N: Word; var Coords);
Тут N — кількість вершин замкнутого багатокутника; Coords — змінна типа PointType, що містить координати вершин.
Координати вершин задаються парою значень типа Integer: перше визначає горизонтальну, друге — вертикальну координати. Для них можна використовувати наступний певний в модулі тип:
type
PointType = record
х, у: Integer
end;
Стиль і колір лінії контура задаються процедурами SetLineStyle і SetColor, тип і колір заливки — процедурою SetFillStyle.
Процедура FillEllipse.
Обводить лінією і заповнює еліпс.
Заголовок:
Procedure FillEllipse(X,Y,RX,RY: Integer);
Тут X, У — координати центру; RX, RY- горизонтальний і вертикальний радіуси еліпса в пікселях.
Еліпс обводиться лінією, заданою процедурами SetLineStyle і SetColor, і заповнюється з використанням параметрів, встановлених процедурою SetFillStyle.
Процедура Sector.
Викреслює і заповнює еліпсний сектор.
Заголовок:
Procedure Sector(X,Y: Integer; BegA,EndA,RX,RY: Word);
Тут BegA, EndA — відповідно початковий і кінцевий кути еліпсного сектора. Решта параметрів обігу аналогічна параметрам процедури FillEllipse.
Процедура PieSlice.
Викреслює і заповнює сектор кола.
Заголовок:
Procedure PieSlice(X,Y: Integer; BegA,EndA,R: Word);
На відміну від процедури Sector, указується лише один горизонтальний радіус R, решта параметрів аналогічна параметрам процедури Sector.
· Збереження і видача зображень
Функція ImageSize.
Повертає розмір пам’яті в байтах, необхідний для розміщення прямокутного фрагмента зображення.
Заголовок:
Function ImageSize(X1,Y1,X2,Y2: Integer): Word;
Тут X1… Y2 — координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів фрагмента зображення.
Процедура Getlmage.
Поміщає в пам’ять копію прямокутного фрагмента зображення.
Заголовок:
Procedure Getlmage(X1,Y1,X2,Y2: Integer; var Buf)
Тут X1…Y2 — координати кутів фрагмента зображення; Buf — змінна або ділянка купи, куди буде поміщена копія відеопам’яті з фрагментом зображення.
Розмір Buf повинен бути не менше значення, що повертається функцією ImageSize з тими ж координатами X1….Y2.
Процедура Put Image.
Виводить в задане місце екрану копію фрагмента зображення, раніше поміщену в пам’ять процедурою Getlmage.
Заголовок:
Procedure Putlmage(X,Y: Integer; var Buf; Mode: Word);
Тут X,Y- координати лівого верхнього кута того місця на екрані, куди буде скопійований фрагмент зображення; Buf — змінна або ділянка купи, звідки береться зображення; Mode — спосіб копіювання.
Як бачимо, координати правого нижнього кута не указуються, оскільки вони повністю визначаються розмірами копії зображення, що знов виводиться на екран. Координати лівого верхнього кута можуть бути якими завгодно, тільки щоб копія, що виводиться, уміщалася в межах екрану (якщо копія не може розміститися на екрані, вона не виводиться і екран залишається без змін).
Параметр Mode визначає спосіб взаємодії знов розміщуваної копії із зображенням, що вже є на екрані. Взаємодія здійснюється шляхом вживання кодованих цим параметром логічних операцій до кожного біта копії і зображення. Для вказівки вживаної логічної операції можна використовувати одну з наступних заздалегідь визначених констант:
const
NormalPut= 0;{Заміна існуючого зображення на копію}
XorPut = 1;{Виняткове АБО}
OrPut = 2;{Об’єднувальне АБО}
AndPut = 3;{Логічне І}
NotPut = 4;{Інверсія зображення}
Найбільш часто використовуються операції NormalPut, XORPut і NotPut. Перша з них просто стирає частину екрану і на це місце поміщає копію з пам’яті в тому вигляді, як вона там зберігається. Операція NotPut робить те ж саме, але копія виводиться в інверсному вигляді. Для монохромного режиму це означає заміну пікселів, що світяться, на темні і навпаки. В кольоровому режимі операція NotPut застосовується до коду кольору кожного пікселя. Наприклад, для White (код 15 або в двійковому вигляді 1111) ця операція дасть код 0000 = 0 = Black, для Red = 4 = 0100 одержимо 1011 = 11 = LightCyan і т.д. Операція XORPut, застосована до того ж місця екрану, звідки була одержана копія, зітре цю частину екрану. Якщо операцію застосувати двічі до однієї і тієї ж ділянки, вид зображення на екрані не зміниться. У такий спосіб можна досить просто переміщати зображення по екрану, створюючи ілюзію руху.
· Виведення тексту
Описувані нижче стандартні процедури і функції підтримують виведення текстових повідомлень в графічному режимі. Це не одне і те ж, що використовування процедур Write або WriteLn. Річ у тому, що спеціально для графічного режиму розроблені процедури, що забезпечують виведення повідомлень різними шрифтами в горизонтальному або вертикальному напрямі, із зміною розмірів і т.д. Проте в стандартних шрифтах, розроблених для цих цілей фірмою Borland, відсутня кирилиця, що виключає виведення російськомовних повідомлень.
З другого боку, процедури Write і WriteLn після завантаження в пам’ять другої половини таблиці знакогенератора (а ця операція легко реалізується в адаптерах EGA і VGA) здатні виводити повідомлення з використанням національного алфавіту, але не володіють могутніми можливостями спеціальних процедур.
Нижче описуються стандартні засоби модуля Graph для виведення тексту.
Процедура OutText.
Виводить текстовий рядок, починаючи з поточним положенням покажчика. Заголовок:
Procedure OutText(Txt: String);
Тут Txt — рядок, що виводиться.
При горизонтальному напрямі висновку покажчик зміщується в кінець виведеного тексту, при вертикальному — не міняє свого положення. Рядок виводиться відповідно до встановленого стилю і вирівнювання. Якщо текст виходить за межі екрану, то при використовуванні штрихових шрифтів він відсікається, а у разі стандартного шрифту не виводиться.
продолжение
–PAGE_BREAK–