Изменение начала координат

Операционная система позволяет изменять местоположение точки начала отсчета координат области вывода и окна. Для этого предусмотрены две функции Win32 API. Для установки начала координат области просмотра контекста устройства DC предназначен метод:

functionSetViewportOrgEx(DC : HDC; x, y : Integer; Point : PPoint) : Boolean;

где (x, y) – координаты нового начала координат области просмотра в единицах измерения устройства, а Point – указатель на запись типа TPoint; в эту запись будет сохранено предыдущее значение начала координат. Если эти данные не нужны, синтаксис функции вместо указателя на структуру до276Глава 10. Графическая подсистема пускает передачу пустого указателя nil. В случае успеха функция порадует нас результатом true. Работа метода поясняется в следующем листинге:

procedureTForm1.FormPaint(Sender: TObject);

varDC:hDC;

Begin

DC:=Form1.Canvas.Handle;

SetViewportOrgEx(DC,

Form1.ClientWidth div 2, //точка x - середина клиентской области

Form1.ClientHeight div 2, //точка y - середина клиентской области

nil);

MoveToEx(DC,-100,0,nil); LineTo(DC,100,0); //рисуем ось x из точки -100 в 100

MoveToEx(DC,0,-100,nil); LineTo(DC,0,100); //рисуем ось y из точки -100 в 100

TextOut(DC,1,1,PChar('0,0'),3); //подпись начала координат

end;

 

В примере начало координат переносится в точку, находящуюся точно посередине клиентской области формы. Координаты новой точки выясняются при помощи элементарных операций деления ширины и высоты клиентской области формы на 2. После переноса начала координат в новое место мы рисуем две линии, соответствующие новым координатным осям X и Y. Затем чуть ниже точки начала координат выводим подпись «0,0». Результаты нашей деятельности наглядно представлены на рис. 10.13. Точно такой же результат может быть получен с помощью функции SetWindowOrgEx():

 

functionSetWindowOrgEx(DC : HDC; x, y : Integer; Point : PPoint) : Boolean;

 

Основное отличие этого метода от рассмотренного ранее SetViewportOrgEx() состоит в том, что здесь аргументы (x, y) задаются в логических координатах. Таким образом, метод позволяет манипулировать удобными единицами измерения. В следующем листинге за единицу измерения принята 0,1 мм:

 

procedureTForm1.FormPaint(Sender: TObject);

varDC:hDC;

Begin

DC:=Form1.Canvas.Handle;

SetMapMode(DC,MM_LOMETRIC); //шаг режима 0.1 мм

SetViewportOrgEx(DC, 10, 10, Nil); //перенос точки

MoveToEx(DC,-90,0,Nil); LineTo(DC,1000,0);

MoveToEx(DC,0,-1000,Nil); LineTo(DC,0,90);

TextOut(DC,5,-5,PChar('0,0'),3);

end;

 

Теперь начало координат перенесено в точку, отстоящую на 10 мм от верхнего левого угла клиентской области формы (рис. 10.14). Настала очередь рассказать о функциях, информирующих программиста о положении начала координат:

 

functionGetViewportOrgEx(DC : HDC; Point : PPoint) : Boolean;

functionGetWindowOrgEx(DC : HDC; Point : PPoint) : Boolean;

 

 

 

Оба метода из контекста DC берут информацию о координатах начала области вывода и помещают данные в структуру типа TPoint. Первый метод возвращает значение в координатах устройства, второй – в логических координатах.








Дата добавления: 2016-03-15; просмотров: 810;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.