📌Преобразование в абсолютные координаты страницы
Метод XYToPage - позволяет преобразовать относительные координаты элемента фигуры [вершины/точки соединения/управляемые точки(контрола)] в абсолютные координаты страницы.
Немного теории
Давайте рассмотрим пример определения координат управляемой точки. Речь идет о точке желтого цвета, она же точка привязки текста фигуры.
Координаты элементов внутри фигуры всегда локальные, точкой отсчета является левый нижний угол фигуры! Координата этой точки осчета фигуры состоит из двух составляющих:
PinX/PinY - абсолютная координата Положения булавки (подробнее о Положении булавки)
LocPinX/LocPinY - относительное Положение булавки внутри фигуры
Положение "точки отсчета" в таблице свойств фигуры можно определить:
PinX-LocPinX
и PinY-LocPinY
по осям X и Y соответственно.
Если мы хотим узнать абсолютное положение управляемой точки то формулы будут такие:
PinX-LocPinX+Controls.TextPosition
и PinX-LocPinX+Controls.TextPosition
по осям X и Y соответственно.
Таким образом для получения абсолютного положения управляемой точки нам придется получить эти шесть параметров параметры программно !
Похожим образом определяются координаты фигур вложенных в группы, для этого еще придется программно определять "родительскую" фигуру и приводить локальные размещения внутри "родительской" фигуры к абсолютным координатам страницы.
Для определения родительской фигуры нужно использовать свойство sh.Parent
.
Если мы имеем дело с многократной вложенностью фигур, то придется пересчитывать координаты столько раз сколько имеется уровней вложенности!
При использовании классического подхода сложность растет!!!
Преимущества метода XYToPage
В качестве решения рекомендуется использовать метод XYToPage.
Предварительно мы должны определить интересующую нас фигуру.
Синтаксис данного метода выглядит так: Shape.XYToPage(x, y, xprime, yprime)
.
Где первые два параметра являются "входными", т.е. в них нужно указать координаты какого локального элемента мы хотим узнать.
Вторые два параметра "выходные", они получают абсолютные координаты элемента в дюймах.
Если вернуться к нашему примеру управляемой точкой, то синтаксис определения ее абсолютных координат будет выглядеть:
Вышеуказанный код также подойдет для случая "вложенных" фигур, при этом "глубина" вложенности не имеет значения !
Тестируем работу данного метода
В нашем тесте участвуют несколько элементов относящихся к "вложенной" фигуре:
Ниже приведен Код и Вывод результатов соответственно.
Нюанс с PinX/PinY
📝 По выводу результатов можно сделать вывод о некорректном отображении для параметра PinX
/PinY
!
Вместо него в данной ситуации уместнее использовать LocPinX
/LocPinY
…
Код
Вывод результатов
Last updated