Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 06 авг 2020, 20:27

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !
Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 06 июл 2019, 12:22 
Не в сети
Глав-тролль

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3953
Откуда: оттуда
Использую Visio c: 1998
Уровнь квалификации: Отсутствует
Оффтоп:
немного информации, по особенностям форума

m1156 писал(а):
кстати, не знаю - как тут обращаться к кому-нибудь именно
если вы кликните по нику автора сообщения, даже из числа незарегистрированных пользователей (в левой части сообщения), в вашем сообщении добавится этот ник выделенный жирным шрифтом. Таким образом не надо набирать его в ручную или копипастить!
m1156 писал(а):
Спасибо
кстати можно давать сообщениям и их авторам (только зарегистрированным пользователям) оценки (положительные и отрицательные), там же в левой части сообщения под информацией об авторе, есть иконки палец вверх/ палец вниз!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 06 июл 2019, 23:32 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1655
Очков репутации: 100613

Добавить очки репутацииУменьшить очки репутации
Ну и в завершение - пример навешивания контекстного меню на страницу "полуручным" методом в старших версиях Visio.
Простейший способ - "впаять" пользовательское меню прямо в документ навсегда. И так оно и будет путешествовать вместе с этим документом.
Нужно сделать XML файлик с меню. Это необходимое действие. А вот дальше - два варианта
1. Можно распаковать документ, добавить в него файл меню и упаковать обратно. (Через zip).
2. Можно сделать скрипт, который засунет этот файл в документ.
Пример XML для контекстного меню страницы (навороченный такой):
Код:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<contextMenus>
  <contextMenu idMso="ContextMenuDrawingPage">
   <toggleButton id="MyToggle" label="My Toggle Button" />
   <button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
   <menuSeparator id="MySeparator" />
   <menu id="MySubMenu" label="My Submenu" >
    <button id="MyButton2" label="Button on submenu" />
   </menu>
   <gallery id="galleryOne" label="My Gallery">
    <item id="item1" imageMso="HappyFace" />
    <item id="item2" imageMso="HappyFace" />
    <item id="item3" imageMso="HappyFace" />
    <item id="item4" imageMso="HappyFace" />
   </gallery>
   <dynamicMenu id="MyDynamicMenu" label= "My Dynamic Menu" getContent="GetMyContent" />
  </contextMenu>
</contextMenus></customUI>

Пример скрипта (VBS) для упаковки XML в документ:
Код:
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(WScript.Arguments(0),1)
xml = file.ReadAll
file.Close
Set app = CreateObject("Visio.InvisibleApp")
Set doc = app.Documents.Open(WScript.Arguments(1))
doc.CustomUI = xml
doc.Save
app.Quit

Пример вызова этого скрипта с передачей параметров (XML и подопытного документа):
Код:
C:\temp\addMenu.vbs C:\temp\cm.xml C:\temp\DM3.vsdm

Информацию о том, что для страницы требуется именно idMso="ContextMenuDrawingPage" Microsoft раздает вот отсюда https://download.microsoft.com/download ... rolIDs.exe
Там три десятка файлов с таблицами идентификаторов. Один из них для Visio.
Ну и картинка с результатом:


Вложения:
a.png
a.png [ 10.13 Кб | Просмотров: 156 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 07 июл 2019, 17:25 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 726
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100610

Добавить очки репутацииУменьшить очки репутации
+1. Это по сути и есть "новый" API (для версии с лентой, т.е. 2010+) для расширения пользовательского интерфейса.

UIObjects с контекстами были добавленны в Visio 4 или 5, если я не ошибаюсь, то есть больше 20 лет назад.
Потом, лет через пять, когда Visio стал Microsoft, они добавили CommandBars, чтобы было как в других приложения офиса.
К сожалению нормально оно никогда не жило, потому как в CommandBars не было "контекстов", а в UIObjects все было на них сделано.
Результат - пользовательские кнопки "отваливались" (то есть, события не вызывались), "залипали", переписывались другими расширениями.

Потом после перехода на ленту стало проще, потому как расширения разнесли по песочницам, с декларативным описанием интерфейса в виде xml,
и они перестали конфликтовать друг с другом и с самим Visio.

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 07 июл 2019, 23:03 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1655
Очков репутации: 100613

Добавить очки репутацииУменьшить очки репутации
Наиболее полный перечень идентификаторов для последних версий Visio (2013, 2016, 2019) можно найти в https://github.com/OfficeDev/office-flu ... dentifiers
То есть от версии к версии интерфейс меняется и теоретически CustomUI, написанный для одной версии, может не подойти к другой.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 15 июл 2019, 01:04 
Не в сети

Зарегистрирован: 19 ноя 2017, 15:46
Сообщений: 16
Использую Visio c: 2013
Уровнь квалификации: Программирование
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Спасибо


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 15 июл 2019, 01:13 
Не в сети

Зарегистрирован: 19 ноя 2017, 15:46
Сообщений: 16
Использую Visio c: 2013
Уровнь квалификации: Программирование
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Большое спасибо.
Теперь надолго есть пища...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB