Графічне та текстове виведення інформації на екран IBM-сумістимих ЕОМ передбачає різні режими роботи апаратури, що має бути в явному вигляді вказано програмістом. Для реалізації графічного виводу при програмуванні на мовою PASCAL застосовують процедури і функції що містяться в модулі GRAPH (файл GRAPH.TPU). Перед використанням цих процедур і функцій необхідно завантажити і проініціалізувати графічний драйвер. Підтримку моніторів IBM EGA та VGA забезпечує драйвер EGAVGA.BGI.
Наступний фрагмент програми забезпечує ініціалізацію графічного режиму з автодетектуванням – автоматичним вибором графічного драйвера та його режиму такими, що забезпечуватиме графічний вивід з найбільшою якістю.
Program LabGraph;
Uses Graph; { Використовує модуль GRAPH }
Var GraphDriver,GraphMode,ErrorCode:Integer;
{ Змінні, необхідні для реалізації графічного режиму }
Begin { Виконувана частина програми }
GraphDriver:=Detect;{Визначаємо тип драйвера}
InitGraph(GraphDriver,GraphMode,'D:\TP7\BGI');{Шлях до драйвера}
Writeln('Виконання програми припиняється ...'); Halt(1)
end;
{ Текст програми з використанням графічного виводу }
CloseGraph;
end.
Замість використаного в наведеному фрагменті режиму автодетектування (змінній GraphDriver присвоєно константу Detect) можна при виклику процедури ініціалізації графічного драйверу InitGraph явно задати код графічного драйвера і режиму (змінна GraphMode).
В наведеному фрагменті використані також функція повернення коду завершення графічної операції GraphResult:Integer i процедура CloseGraph, яка розвантажує графічний драйвер. Для тимчасового переходу в режим текстового виводу треба застосовувати виклик процедури RestoreCrtMode. Повернення в режим графічного виводу забезпечує виклик процедури SetGraphMode(GraphMode:Integer). При зміні режиму втрачаються зображення (текстові і графічні) і, при необхідності, програміст повинен передбачити їх збереження.
Вибраний графічний драйвер і режим визначають координатну систему графічного екрану. В режимі EGAHi (640x350 точок, 16 кольорів, 2 сторінки) екранні координати матимуть поданий на рис. 12.a вигляд. Точки графічного зображення часто називають пікселами ( від англійського Picture Element).
Рис. 12.A. Координатна система графічного екрану для режиму EGAHI.
Максімальну кількість пікселів по X та Y для встановленого режиму можна визначити за допомогою функцій GetMaxX,GetMaxY.
Процедура PutPixel(X, Y: Integer; Pixel: Word) виводить на екран точку заданного значенням змінної Pixel кольору.
Функція GetPixel(X,Y: Integer): Word повертає значення кольру заданої координатами X,Y точки екрану.
Ряд процедур і функцій працюють із наперед визначеними кольором переднього плану і фону, які встановлюються за допомогою процедур SetColor(Color: Word) i SetBkColor(ColorNum: Word) відповідно. Функції GetColor:Word і GetBkColor:Word дозволяють прочитати поточні значення кольору переднього плану і фону. Процедура ClearDevice очищає екран (заливає його кольором фону).
Відрізок прямої лінії будує процедура Line(x1, y1, x2, y2: Integer). Процедура Rectangle(x1, y1, x2, y2: Integer) будує незамальваний прямокутник. Замальований кольором переднього плану прямокутник будує процедура Bar(x1, y1, x2, y2: Integer). Коло із заданими центром і радіусом будує процедура Circle(X,Y: Integer; Radius: Word), дугу кола – процедура Arc(X,Y: Integer; StAngle, EndAngle, Radius: Word). Побудову дуги еліпса здійснює процедура Ellipse(X,Y:Integer; StAngle, EndAngle:Word; Xradius, YRadius:Word).
Ряд процедур і функцій використовують поточний вказівник СР(Current Pointer), який функціонально подібний до курсора текстового режиму, але, на відміну від останнього, – невидимий. Функції GetX: Integer, GetY: Integer повертають значення координат СР. Встановити координати СР дозволяє процедура MoveTo(X, Y: Integer). Процедура MoveRel(Dx, Dy: Integer) змінює координати СР на Dx,Dy. Процедура LineTo(X, Y: Integer) з’єднує лінією СР з точкою (X,Y), при цьому значення X i Y заміщують попередні значення координат СР. Процедура LineRel(Dx, Dy: Integer) з’єднує лінією точку на яку вказує СР з точкою, координати якої на Dx і Dy відрізняються від СР.
Вивід текстової інформації в графічному режимі здійснюється за допомогою процедур OutText і OutTextXY. В процедурі OutTextXY(X,Y:Integer; TextString: string) положення тексту, що виводиться задається явно. Процедура OutText(TextString: string) виводить текст починаючи з позиції на яку вказує СР. Номер шрифта, орієнтація тексту і розмір символів задаються при виклику процедури SetTextStyle(Font, Direction: Word; CharSize: Word).