6.2. Координатная система. Текущий указатель.
Верхний левый угол графического экрана определен как (0,0). Значение Х или колонки увеличиваются направо. Значение Y или строки увеличиваются вниз.
Функция GetМахХ Возвращает для текущего графического режима и драйвера самый правый столбец (разрешение по х).
Описание: GetMaxX
Тип результата: Целый (integer).
Примечания: Возвращает для текущего графического режима и драйвера максимальное значение х. В режиме 320х200 СGА, например, данная процедура будет возвращать значение 319. Процедуры GetМахХ и GetМахY чрезвычайно полезны для центрирования, определения границ области экрана и т.д.
Функция GetМахY Возвращает для текущего графического режима и драйвера самую нижнюю строку (разрешение по y).
Описание: GetMaxY
Тип результата: Целый (integer).
Пример:
uses Graph;
var Driver, Mode : integer;
i: integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
Rectangle(0,0,GetMaxX,GetMexY); { нарисовать полную рамку экрана }
Readln;
CloseGraph;
end.
Многие графические системы поддерживают понятие текущего указателя (CP – Current Pointer). CP подобен понятию курсора в текстовом режиме, но в отличие от курсора CP не виден.
Write('ABC');
В текстовом режиме оператор Write будет помещать курсор в колонку непосредственно после символа C. Если C помещен в колонку 80, то курсор передвинется в первую колонку следующей строки. Если C помещен в колонку 80 25-ой строки, то весь экран сдвинется на одну строку вверх и курсор будет в первой колонке 25 строки.
Следующие команды перемещают CP: InitGraph, MoveTo, MoveRel, LineTo, LineRel, OutText, SetGraphMode, GraphDefaults, ClearDevice, SetViewPort, ClearViewPort. Последние 5 команд перемещают CP в (0,0).
Процедура MoveTo Перемещает текущий графический указатель(СР) в точку (x,y).
Описание: MoveTo(x, y : integer)
Процедура LineTo. Рисует прямую линию из точки, в которой находится текущий указатель, в точку (x,y).
Описание: LineTo(x, y : integer).
Примечания: Рисует прямую, толщина и тип которой задаются процедурой SetLineStyle, а цвет устанавливается процедурой SetColor. Заметим, что
MoveTo(100,100);
LineTo(200,200);
эквивалентно
Line(100,100,200,200);
Первый метод требует больше времени для выполнения и большего объема памяти для выполняемого кода. Используйте процедуру LineТо только когда текущий указатель находится в одном из концов прямой. Отметим, что второй метод не изменяет значения текущего указателя.
Процедура LinеТо перемещает текущий указатель в точку (x,y).
Пример:
var Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
Randomize;
repeat
LineTo(Random(200),Random(200));
until KeyPressed;
Readln;
CloseGraph;
end.
Процедура MoveRel Перемещает текущий указатель (СР) на расстояние, заданное относительными координатами от его текущей позиции.
Описание: MoveRel(Dx, Dy : integer)
Примечания: Процедура МоvеRеl перемещает текущий указатель (СР) в точку, заданную относительным расстоянием (Dх,Dy) от точки, в которой находится текущий указатель. Относительные команды перемещения и рисования полезны при вычерчивании различных объектов на экране, у которых начальная точка может быть изменена (чтобы, например, вычертить ту же самую фигуру в другом месте экрана).
Процедура LineRel Проводит прямую в точку, заданную относительным расстоянием от текущего указателя (СР).
Описание: LineRel(Dx,Dy)
Примечания: Данная процедура вычерчивает прямую линию из текущей точки в точку, заданную относительным расстоянием (Dх,Dу) от текущего указателя. Процедура рисует прямую, толщина и тип которой задаются процедурой SetLineStyle, а цвет устанавливается процедурой SetColor. Относительные команды перемещения и рисования полезны при вычерчивании различных объектов на экране, у которых начальная точка может быть изменена (чтобы, например, вычертить ту же самую фигуру в другом месте экрана).
Пример:
uses Graph;
var Gd, Gm : integer;
begin
Gd:=Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
else
begin
MoveTo(1,2);
LineRel(10,10); { провести прямую в точку (11,12) }
end;
Readln;
CloseGraph;
end.
