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

Форум по вопросам применения и программирования в Visio
Текущее время: 16 дек 2019, 17:51

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


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


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



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

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

Добавить очки репутацииУменьшить очки репутации
Здравствуйте!
Не могу добраться до контекстного меню окна чертежа (Показать таблицу свойств фигуры. Вырезать. Копировать. Вставить. Специальная вставка. Гиперссылка.).
В контекстное меню для фигуры (visUIObjSetCntx_DrawObjSel) вставляю пункт меню. Все работает. А в контекстное чертежа - не получается. Вроде бы все идентификаторы из перечня перебрал - и никак в это меню не попаду.
Помогите, пожалуйста.


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

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

Добавить очки репутацииУменьшить очки репутации
Контекстное меню - это когда куда-то ткнешь правой кнопкой, после чего выскакивает меню.
В шейп ткнуть можно.
Даже в страницу ткнуть можно, хотя несколько странно - это значит ни в один шейп не ткнуть.
А как Вы предполагаете ткнуть в документ? У него ведь нет изображения. Отсюда вывод - контекстного меню документа не существует.
Цитата:
Вроде бы все идентификаторы из перечня перебрал - и никак в это меню не попаду.

А вот это я не понял. где и зачем Вы их перебираете?
--------
Где перебираете - понял. Можно не уточнять. Это я заголовок упустил из виду :)


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

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

Добавить очки репутацииУменьшить очки репутации
Да, именно в страницу. На любой странице.
Перебирал из перечня идентификаторов.


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

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

Добавить очки репутацииУменьшить очки репутации
Иными словами: есть контекстное меню, а попасть в него не могу.


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

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

Добавить очки репутацииУменьшить очки репутации
А версия визио с лентой или без?

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


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

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

Добавить очки репутацииУменьшить очки репутации
Да лучше бы просто привести проблемный кусок кода. А то совершенно непонятно, что значит "попасть".


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

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

Добавить очки репутацииУменьшить очки репутации
Версия - 2010.


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

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

Добавить очки репутацииУменьшить очки репутации
Public Sub VstavMenuSpecif()
Dim LvuiObj As Visio.UIObject
Dim LvmenuSetObj As Visio.MenuSet
Dim LvmenuObj As Visio.Menu
Dim LvmenuItemObj As Visio.MenuItem

Set LvuiObj = Visio.Application.BuiltInMenus
Set LvmenuSetObj = LvuiObj.MenuSets.ItemAtID(VisUIObjSets.visUIObjSetCntx_DrawObjSel)
Set LvmenuObj = LvmenuSetObj.Menus(0)
Set LvmenuItemObj = LvmenuObj.MenuItems.AddAt(1)
LvmenuItemObj.Caption = "Proba"
LvmenuItemObj.CmdNum = 0
LvmenuItemObj.AddOnName = "Proba"
ThisDocument.SetCustomMenus LvuiObj
End Sub


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3736
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Сбор вторичного сырья
Должность: Безработный
Уровнь квалификации: Отсутствует
Tumanov писал(а):
Отсюда вывод - контекстного меню документа не существует
может только в окне проводник документа (Drawing explorer)?


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

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

Добавить очки репутацииУменьшить очки репутации
В 2010 лента. Там меню через другой API задаются.
Тот код что приведен, для версии 2007 и раньше. В 2010 этот интерфейс предоставляется для совместимости.

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


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

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
В 2010 этот интерфейс предоставляется для совместимости.

И не только предоставляется, но и работает :) Я иногда этим пользуюсь и в старших версиях тоже. С ним значительно проще, чем с риббоном, хоть и вид несколько "простоват".
А по теме - похоже, что вот это - искомая константа.
visUIObjSetCntx_DrawObjSel 9 Shortcut menu: Visio drawing shape.
Уж больно набор пунктов похож (включая вложенные подменю).
9 Drawing Object Selected
j=0
--> (Hyperlink List)
--> Cu&t
--> &Copy
--> &Paste
--> F&ormat
12
>>> &Text...
>>> &Line...
>>> &Fill...
>>> &Allow Themes
>>> Re&move Theme
>>> Pict&ure...
>>> I&nk...
>>> &Protection...
>>> &Behavior...
>>> Sp&ecial...
>>> &Style...
>>> Laye&r...
--> &Data
4
>>> &Shape Data...
>>> &Edit Data Graphic...
>>> &Remove Data Graphic
>>> (List of Recordset Links)
--> Shap&e
10
>>> &Group
>>> &Ungroup
>>> Bring to &Front
>>> Send to &Back
>>> Br&ing Forward
>>> &Send Backward
>>> Flip &Horizontal
>>> Flip &Vertical
>>> Rotate &Text
>>> Find Si&milar Shapes
--> R&ight-Angle Connector
--> Strai&ght Connector
--> Cur&ved Connector
--> Reset Co&nnector
--> Convert &Ink to Text
--> Convert Ink to Geo&metry
--> &Help


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

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

Добавить очки репутацииУменьшить очки репутации
Опять же с опозданием заметил, что Вы это уже попробовали для шейпов.
А для страницы то же самое не работает?
Вроде, должно работать. Почему бы не быть одному и тому же меню для шейпа, для нескольких селектированных шейпов, для ни одного селектированного шейпа (это уже будет страница).


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

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

Добавить очки репутацииУменьшить очки репутации
Спасибо.
(кстати, не знаю - как тут обращаться к кому-нибудь именно)

Интерфейс брал с сайта MS, Вроде как современный. А где там иной? - посмотрю.

Да, на фигуре все работает. И все варианты контекстных перебрал в работающем коде. В том числе все для Drawing.
Пока обнаружил вот что (и это хоть что-то).
При идентификаторе visUIObjSetCntx_DEShapes попытка считать меню приводит к ошибке.
То есть Menus(1) ему не нравится. Пороюсь в этом.
А так - перебираю по спискам, ищу знакомые буквы.


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

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

Добавить очки репутацииУменьшить очки репутации
Спасибо, Вася. Спасибо, Петя... Имена (ники) ведь есть слева :)
А под интерфейсом понимают всю систему меню и тулбаров, которая сменилась при переходе от 2007 к 2010. Естественно, и программное взаимодействие с интерфейсом тоже в корне изменилось. Вот несколько статей по этом поводу: https://visioport.ru/navi/review_vs_faq.php?id=96
Цитата:
А так - перебираю по спискам, ищу знакомые буквы.

Я для простоты взял и все вывел в Immediate. Правда, когда стал раскрывать вложенные пункты, оно уже улетает за пределы окна. Нужно или в файл выводить, или остановы ставить чаще.
Код:
Public Sub Vsta()
    Dim LvuiObj As Visio.UIObject
    Dim LvmenuSetObj As Visio.MenuSet
    Dim LvmenuObj As Visio.Menu
    Dim LvmenuItemObj As Visio.MenuItem
   
    Set LvuiObj = Visio.Application.BuiltInMenus
    'visUIObjSetCntx_PageTabs
    For i = 0 To LvuiObj.MenuSets.Count - 1
        Debug.Print i, LvuiObj.MenuSets(i).Caption
        If LvuiObj.MenuSets(i).Menus.Count > 0 Then
            For j = 0 To LvuiObj.MenuSets(i).Menus.Count - 1
                Debug.Print "j=" & j, LvuiObj.MenuSets(i).Menus(j).Caption
               
                If LvuiObj.MenuSets(i).Menus(j).MenuItems.Count > 0 Then
                    For k = 0 To LvuiObj.MenuSets(i).Menus(j).MenuItems.Count - 1
                        Debug.Print "--> " & LvuiObj.MenuSets(i).Menus(j).MenuItems(k).Caption
                        If LvuiObj.MenuSets(i).Menus(j).MenuItems(k).MenuItems.Count > 0 Then
                            Debug.Print LvuiObj.MenuSets(i).Menus(j).MenuItems(k).MenuItems.Count
                            For m = 0 To LvuiObj.MenuSets(i).Menus(j).MenuItems(k).MenuItems.Count - 1
                                Debug.Print ">>> " & LvuiObj.MenuSets(i).Menus(j).MenuItems(k).MenuItems(m).Caption
                            Next
                        End If
                    Next
                End If
               
            Next
        End If
        DoEvents
    Debug.Print "***************************"
    Next
End Sub


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

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

Добавить очки репутацииУменьшить очки репутации
Спасибо, Геннадий Евгеньевич!

Сбрасывал я иерархию меню в Excel. Замучился. Стал смотреть порциями. Потом пытался взять наскоком - по перечню MS.
Нужно, похоже, учить матчасть.

Особое спасибо за форум и помощь.


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

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

Добавить очки репутацииУменьшить очки репутации
Огромное спасибо за статьи по интерфейсу!


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

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

Добавить очки репутацииУменьшить очки репутации
Да не за что...
Кстати, если Вы, так сказать, в начале пути, то нужно бы добавить, что пункты в контекстные меню шейпов и страниц чаще приходится добавлять, чем удалять. А для добавления меню существует совсем другой метод (и в старых и в новых версиях). Пользовательские пункты меню прописываются в секцию Actions шейп-листа. Строка = пункт меню. Эти пункты добавляются к существующим по умолчанию пунктам. Это можно посмотреть здесь - https://visioport.ru/blog/index.php/13- ... tnye-menyu


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

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

Добавить очки репутацииУменьшить очки репутации
Спасибо. Этим способом я добавлял. И к контекстному фигуры добавлял. Все нормально. Захотел через UI для страниц добавить, чтобы на всякой странице Actions не вставлять. Но не вышло. Задачу решу (через Actions на страницах), но интересно и через UI.


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

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

Добавить очки репутацииУменьшить очки репутации
Ну, я же говорил, что должно работать.
Вот код и картинка
Код:
Public Sub VstavMenuSpecif()
    Dim LvuiObj As Visio.UIObject
    Dim LvmenuSetObj As Visio.MenuSet
    Dim LvmenuObj As Visio.Menu
    Dim LvmenuItemObj As Visio.MenuItem
    Set LvuiObj = Visio.Application.BuiltInMenus
    Set LvmenuSetObj = LvuiObj.MenuSets.ItemAtID(9)
    Set LvmenuObj = LvmenuSetObj.Menus(0)
    Set LvmenuItemObj = LvmenuObj.MenuItems.AddAt(0)
    LvmenuItemObj.Caption = "Proba"
    LvmenuItemObj.CmdNum = 0
    LvmenuItemObj.AddOnName = "Proba"
    ThisDocument.SetCustomMenus LvuiObj
End Sub


Вложения:
Proba.jpg
Proba.jpg [ 20 Кб | Просмотров: 252 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Идентификатор VisUIObjSets для окна чертежа
СообщениеДобавлено: 05 июл 2019, 19:46 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
А вот и нет!
Это в Visio 2007 работает, а в Visio 2013 уже дудки. Ну и в 2010 скорее всего по той же причине не работает.
Так что да, старое контекстное меню страницы с новым интерфейсом несовместимо.
А в старом - код 9, visUIObjSetCntx_DrawObjSel


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

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



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

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


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

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