![]() |
Форум visio.getbb.ru | О форумах Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
22.07.2019  Excel+Visio+VBA Работаем в Excel - рисуем в Visio Vigil. Видео
31.03.2019 Как изменить координаты фигуры программно Kuzin Alexander.
26.03.2019 Особенности метода Drop Shape Геннадий Туманов.
Подскажите, как в VBA получить координаты шейпа
Подскажите, как в VBA получить координаты шейпа относительно страницы, на которой он находится?
Координаты шейпа относительно листа рисунка хранятся в шейп-листе данного шейпа в секции ShapeTransform в ячейках PinX и PinY. При этом под координатами шейпа понимаются координаты центра описанного прямоугольника. Доступ из VBA производится по имени ячейки .Cells("PinX") и .Cells("PinY").
Например, выражение ActivePage.Shapes(1).Cells("PinX") даст X координату первого шейпа на активной странице.
Координаты считаются от левого нижнего угла страницы в дюймах.
Где взять инфу про Pinx и Piny?
Где взять инфу про Pinx и Piny?
Немножко есть прямо в Help'е, только не в основном, а в том, который открывается из окна Visual Basic. Побольше - в DVS - (Developing Visio Solutions), который чаще всего входит в комплект поставки Visio. Правда, и то и другое на английском.
Да и что о них говорить-то особо. Просто координаты центра вращения шейпа, которые сидят в секции Shape Transform.
Как обратиться к шейпу по координатам?
Подскажите, можно ли узнать принадлежит ли точка с координатами X,Y какому-нибудь шейпу (и соответственно его имя), и принадлежит ли эта точка какой то линии в этом шейпе (если он составной из нескольких фигур (линий))?
Например, перебираем всю коллекцию шейпов, вычисляя для них
intRet = object.HitTest(x, y, tolerance)
где object - очередной шейп.
Как только натыкаемся на шейп, выдающий visHitOnBoundary или visHitInside, выбираем имя данного шейпа.
Как определить путь?
Я хочу взять элемент из трафарета. У меня на компьютере он лежит
C:\Program Files\Visio\Solutions\папкастрафаретами ,
а у соседа чего-то там Visio10/1033/ и вообще какой-то другой путь.
Если я напишу
Set stnObj = appVisio.Documents.Open(appVisio.Path &
"\Solutions\centel\adress_узел.vss"), то соседний компьютер все равно не поймет, у него же между программной директорией и папкой Solutions лежит еще папка 1033.
Нельзя ли как-то указать на папку Solutions вне зависимости от версии Visio?
У объекта Application существуют свойства:
AddonPaths, StartupPaths, DrawingPaths, StencilPaths, FilterPaths, TemplatePaths, and HelpPaths.
В данном случае следует использовать
Set stnObj = appVisio.Documents.Open(appVisio.StencilPaths &
"\centel\adress_узел.vss")