Если тип адаптера не известен или программа рассчитана на работу с любым адаптером, тогда используется следующее обращение к процедуре с автоматическим определением типа драйвера:
Driver, Mode : Integer;
Driver := Detect;
InitGraph(Driver,Mode,’C:\Lang\BP\BGI’);
…
После такого обращения устанавливается графический режим, а при выходе из процедуры параметры Driver и Mode будут содержать значения, которые определяют тип драйвера и режим его работы. При этом для адаптеров с возможностью работы в нескольких режимах выбирается режим с максимальным кодом.
Для определения результата инициализации графического режима необходимо использовать функцию GraphResult. Функция возвращает целое число, в котором закодирован результат последнего обращения к графическим процедурам. Если ошибка не обнаружена, то функция возвращает 0 (grOK=0), в противном случае – код ошибки.
Функция GraphErrorMsg возвращает текстовое сообщение, которое соответствует указанному коду ошибки:
Function GraphErrorMsg(Code : Integer) : String;
Например,
Driver, Mode, Error : Integer;
Driver := Detect;
InitGraph(Driver,Mode,’’);
Error := GraphResult;
If (Error <> grOK) then
Writeln(’Ошибка: ’,GraphErrorMsg(Error));
…
Процедура CloseGraph завершает работу адаптера в графическом режиме и восстанавливает текстовый режим работы экрана.
Процедура RestoreCRTMode служит для кратковременного возврата в текстовый режим. В отличие от процедуры CloseGraph не сбрасываются установленные параметры графического режима и не освобождается память, выделенная для размещения графического драйвера.
ФункцияGetGraphModeвозвращает код установленного режима работы графического адаптера:
Function GetGraphMode : Integer;
Процедура SetGraphModeустанавливает новый графический режим работы адаптера, который указывается в параметре Mode:
Procedure SetGraphMode (Mode : Integer);
Например,
Driver, Mode, Error : Integer;
Driver := Detect;
InitGraph(Driver,Mode,’’);
Error := GraphResult;
If (Error <> grOK) then
Writeln(’Ошибка: ’,GraphErrorMsg(Error));
Writeln(’Графический режим’);
Writeln(’Текстовый режим ’);
Writeln(’Графический режим’);
…
В растровой компьютерной графике экран представляет собой прямоугольный массив адресуемых точек и любое изображение на нем образуется как композиция светящихся или погашенных пикселей. Пиксел характеризуется координатами размещения (x,y) и цветом, которым он горит.
Многие графические процедуры и функции используют указатель текущей позиции на экране, который в отличие от текстового курсора, невидим.
Координаты этого указателя и любого пиксела задается относительно левого верхнего угла, который имеет координаты (0,0).
Таким образом, горизонтальная координата экрана увеличивается слева направо, а вертикальная сверху вниз.
Функции GetMaxX и GetMaxY возвращают максимальные координаты экрана в текущем режиме работы:
Function GetMaxX : word;
Function GetMaxY : word;
Функции GetX и GetY возвращают координаты указателя по горизонтали и вертикали. Координаты определяются относительно левого верхнего угла окна или, если окно не установлено, экрана:
Function GetX : Integer;
Function GetY : Integer;
Для перемещения курсора используются следующие процедуры:
MoveTo(x,y:Integer) – перемещает курсор в точку экрана с координатами (x,y);
MoveRel(dx,dy:Integer) – перемещает курсор на dx пикселов по горизонтали и соответственно на dy по вертикали относительно последнего положения курсора.
Для задания пикселу с координатами (x, y) цвета Color используется процедура PutPixel:
Procedure PutPixel (x, y : Integer; Color : Word);
Функция GetPixel возвращает цвет пиксела с координатами (x,y):
GetPixel (x, y : Integer) : Word;
Для рисования линий используются следующие процедуры:
1. Процедура Line рисует линию от точки с координатами (x1,y1) к точке (x2,y2).
Procedure Line(x1, y1, x2, y2 : Integer);
2. Процедура LineTo рисует отрезок из текущей точки к точке с координатами (x, y).
Procedure LineTo(x, y : Integer);
3. Процедура LineRel рисует отрезок относительно текущей точки. Положение текущего указателя принимается за начало «временных» координат (0, 0) и указывается местоположение конца отрезка.
Procedure LineRel(dx, dy : Integer);
Для установки стиля линий используется процедура SetLineStyle: