All Forums
 Категория Visio
 Форум Вопросы и ответы
 Выделение активного шейпа в группе
Author Previous Topic Topic Next Topic  

evgenia_e

Germany
22 Posts

Posted - 03/05/2004 :  13:32:08
У меня проблемы с группой. Я вызываю макрос из шейпа в группе, хочется, чтобы текст появлялся именно в том шейпе, из которго я вызываю этот макрос. Как мне в VBA обозначить активный шейп в группе?

Tumanov

Russia
1198 Posts

Posted - 03/05/2004 :  16:30:45
Что-то у меня тоже проблемы возникли :(
Вот если бы группы не было, то шейп находится довольно легко. Если Вы "вызываете макрос из шейпа", то надо думать, что он у Вас в момент вызова селектирован. В этом случае шейп определяется через Window.Selection. Если он селектирован один, то получается Window.Selection(1).
Но из группы такая операция не проходит. Коллекция Window.Selection пустая.
При работе не с макросом, а с Add-on'ом шейп тоже легко определяется по параметрам командной строки. Например, если сделать простенький Add-on с пустой формочкой и обработчиком
Private Sub Form_Load()
MsgBox Command$
End Sub
то при его вызове из формы мы увидим, например, /visio=4112323 /doc=1 /page=1 /shape-Sheet.7
То есть NameID шейпа легко берется из параметров. И из группы это тоже работает. Но в макрос командная строка не передается.
Получается, нужно либо отказываться от групп, либо привлекать к работе Add-on.
:) Или ждать, может кто умнее посоветует.
Go to Top of Page

evgenia_e

Germany
22 Posts

Posted - 03/07/2004 :  17:48:07
Возникает встречный вопрос: я никогда не работала с Add-on-ами. Как его написать с помощью VBA и как получить параметры шейпа из которого этот addon вызывается? Как я понимаю, вызывается addon c помощью RUNADDONWARGS.

Спасибо!
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/07/2004 :  19:31:28
Add-on - это внешняя программа. Пишется, например, на VB. Можно на C, но VB больше похож на VBA, поэтому на нем будет проще. Можно взять Visual Studio, запустить VB и создать программку типа Standard EXE. Это и будет Add-on.
EXE нужно будет положить в Solutions, чтобы не приходилось пути указывать. Вызывается он с помощью RUNADDON. Если использовать RUNADDONWARGS, то можно и еще дополнительные параметры передавать, но Вам и RUNADDON достаточно.
Командная строка принимается из переменной Command$. Формат этой строки показан выше. Значения параметров doc и page - это индексы документа и страницы в коллекциях документов и страниц соответственно. Значение параметра shape - NameID.
Чтобы работать с Visio в References проекта должно быть включено Microsoft Visio 2002 Type Library. Тогда в программе можно будет получить ссылку на Visio
Set aV = GetObject(, "Visio.Application")
и добраться до шейпа
Set Shp = aV.Documents(docInd).Pages(pagInd).Shapes(shInd)
А индексы получаются разбором командной строки с помощью Mid и InStr.
Если скачать Microsoft Visio 2002 SDK, то там в качестве примера есть заготовка, демонстрирующая разбор командной строки и печать параметров.
Go to Top of Page

winnie

Russia
1 Posts

Posted - 03/16/2004 :  19:56:47
Можно и без ADD-ON
Надо сначала поиграться с .IterationMode объекта Selection

Set objSel = ActiveWindow.Selection
objSel.IterationMode = visSelModeOnlySub
shpName = objSel.Item(1).Name
objSel.IterationMode = visSelModeOnlySuper
grpName = objSel.Item(1).Name
MsgBox "Выделен шейп " & shpName & vbCrLf & "в группе " & grpName


а по умолчанию .IterationMode равно visSelModeSkipSub + visSelModeSkipSuper


winnie
Go to Top of Page

MAVr

1 Posts

Posted - 05/18/2004 :  11:43:29
Этот вариант работает, но у меня ситуация когда выделенный блок является членом группы, а группа сама является блоком для группы.
Так вот используя последний пример на самом элементарном блоке я получаю только имя всего шейпа и имя его блока в группе, а получить имя выделенного блока не получается.
Просветите чайника.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/18/2004 :  18:09:29
А что Вы называете блоком и как он соотносится с шейпом и группой?
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)