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

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 00:44

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


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


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

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: редактирование текста шейпа внутри группы
СообщениеДобавлено: 30 апр 2019, 11:06 
Не в сети
Бывалый

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 114
Использую Visio c: 2013
Очков репутации: 21

Добавить очки репутацииУменьшить очки репутации
Есть группа - в группе два объекта с текстом. У группы есть контекстное меню (Action).

Как сделать так, чтобы при двойном клике открывался редактор текста того объекта внутри группы, над котором произошел щелчок мыши?

Подробности.
Если я в Поведении группы указываю в пункте "Выделенный объект" - "Сначала компоненты", то такое поведение начинает работать.
Но в этом случае очень трудно добиться вызова контекстного меню (контекстное меню привязано именно к группе). Как только я щелкаю на группе - тут же выбирается внутренний компонент, а контекстное меню привязано именно к группе.
Для выделения именно группы и вызова контекстного меню нужно зажать левую клавишу мыши и обвести всю группу, а потом только нажимать правую клавишу для вызова контекстного меню. Сами понимаете - пользователям это объяснить очень трудно.

Другой вариант - когда я указываю в Поведении "Сначала группа" - вообще редактирование текста внутреннего объекта не вызывается. Для этого я использую клавишу F2. Сначала щелкаю на группе, потом на объекте внутри группы, а потом F2. Сами понимаете - пользователям это объяснить тоже очень трудно.

В 2013 я попробовал - там при значении "Сначала группа" (по умолчанию) при двойном клике вызывается редактор текста внутреннего объекта - красота! Именно этого и ждет пользователь! Но как добиться этого в 2007, 2010?


Вложения:
Group.vsd [19.5 Кб]
Скачиваний: 123
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 30 апр 2019, 11:24 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
vin писал(а):
когда я указываю в Поведении "Сначала группа" - вообще редактирование текста внутреннего объекта не вызывается.
если я не ошибаюсь, то в версии 2003 действием по умолчанию при двойном клике было активация окна редактирования текста. в новейших версиях идет речь о каком то стандартном действии :?: :roll:
Изображение
Я во вложенном файле изменил действие на "Изменение текста фигуры" и все заработало (см. вложенный файл).
vin писал(а):
Но как добиться этого в 2007, 2010?
рано я обрадовался ! у меня самая новая версия. виртуальная машина с версий 2003 сломалась :wall:
Дополнено позднее: Была тема поднятая Геннадием про различия в событиях при двойном клике: Наблюдения за DblClick в Visio 2013


Вложения:
Group-.vsd [17.5 Кб]
Скачиваний: 116

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 30 апр 2019, 12:37 
Не в сети
Administrator

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

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

А если его привязать и к компонентам группы тоже?
Может только макрос усложнится... Возможно придется еще Parent посмотреть для определения источника.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 30 апр 2019, 12:51 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov писал(а):
Может только макрос усложнится
а был ли мальчик макрос?
vin писал(а):
у группы есть контекстное меню (Action).
уважаемый vin, можете прояснить ситуацию, к какой ветке обсуждения относится ваш вопрос Программирование / ShapeSheet / иное ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


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

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
через HitTest смог сделать подобное поведение. пришлось отслеживать координаты мыши при нажатии и прописывать в каждом шейпе группы в ячейке User.Row_1 формулу OPENTEXTWIN() и триггерить ее вручную.
+еще на группу вешается запуск макроса по даблклику.
проще не получилось.


Вложения:
Group.vsd [23.5 Кб]
Скачиваний: 105
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 01 май 2019, 18:23 
Не в сети
Ветеран
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
А решить вопрос административно-образовательным методом не вариант?
Например, сказать пользователям нажимать F2 для редактирования текста в выделенной фигуре?

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 01 май 2019, 21:32 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
nbelyh
Цитата:
Другой вариант - когда я указываю в Поведении "Сначала группа" - вообще редактирование текста внутреннего объекта не вызывается. Для этого я использую клавишу F2. Сначала щелкаю на группе, потом на объекте внутри группы, а потом F2. Сами понимаете - пользователям это объяснить тоже очень трудно.


Вводная была дана. К чему эти вопросы?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 01 май 2019, 23:43 
Не в сети
Ветеран
Аватара пользователя

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

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

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: редактирование текста шейпа внутри группы
СообщениеДобавлено: 07 май 2019, 11:27 
Не в сети
Бывалый

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 114
Использую Visio c: 2013
Очков репутации: 21

Добавить очки репутацииУменьшить очки репутации
Решил.
Вот код.

Код:
' Переменная типа Application - для отлавливания событий
Dim WithEvents app As Application

' Инфициализация переменной вручную = при отладке
Sub start_test()
    Set app = Application
End Sub

' Инфициализация переменной автоматом - при открытии документа
Private Sub Document_DocumentOpened(ByVal Doc As IVDocument)
    Set app = Application
End Sub

' Событие происходит при выборе Shape
Private Sub app_SelectionChanged(ByVal Window As IVWindow)
    Call OpenTextEditorForShapeInGroup
End Sub

' Вызов редактирования текста выбранного в группе Шейпа
Private Sub OpenTextEditorForShapeInGroup()

    ' Начиная с 2013 работает по умолчанию
    If MajorVer > 14 Then
        Exit Sub
    End If

    ' Запоминаем выбор
    Set vsoSelection = ActiveWindow.Selection
    ' Определяем режим выбора - Выбирать только объекты внутри группы, игнорировать сами группы
    vsoSelection.IterationMode = visSelModeOnlySub + visSelModeSkipSuper
   
    ' Запоминаем ID выбранных объектов
    Dim lngShapeIDs() As Long
    Call vsoSelection.GetIDs(lngShapeIDs)
               
    ' Если объект выьран один
    If (LBound(lngShapeIDs) = UBound(lngShapeIDs)) Then
   
        Dim shp As Shape
        Set shp = ActivePage.Shapes.ItemFromID(lngShapeIDs(LBound(lngShapeIDs)))
       
        ' Вызываем редактирование текста
        Application.DoCmd (visCmdTextEditState)
    End If

End Sub

' Функция возвращает основной (major) номер версии Visio
Function MajorVer()

strVersion = Application.Version
intDotPosition = InStr(strVersion, ".")
If (intDotPosition = 0) Then
    intDotPosition = InStr(strVersion, ",")
End If
MajorVer = Val(Left(strVersion, intDotPosition - 1))

End Function



DocumentOpened - это событие при открытии фигур (vsd). То есть код вставляем в ThisDocument (vsd документ) или просто в любой документ - кому как наравится.
При открытии происходит привязка переменной app с приложением. После этого мы начинаем получать доступ к событиям Application.
К событию app_SelectionChanged (происходит при выделении любой фигуры) мы и привязываем наш код - OpenTextEditorForShapeInGroup

В OpenTextEditorForShapeInGroup смотрим версию Visio (я уже писал, что для 2013 редактирование текста фигуры расположенной внутри группы происходит автоматически после двойного клика), поэтому для старшей версии (>2010) из программы выходим.
Далее берем Selection и настраиваем его так, чтобы он видел только внутренние фигуры в группе.
Проверяем, что выбрана 1 фигура.

И вызываем редактирование текста для этой фигуры.

PS. В коде нет проверки какого типа фигура выбрана (в том смысле - создана ли она на базе моего Мастера или нет), поэтому будет работать для всех фигур.
Если нужно кому-то, то можно сделать анализ выбранной фигуры и ее группы и изменять поведение в зависимости от типа.


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

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



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

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


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

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