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

Andy52280

Russia
2 Posts

Posted - 06/19/2006 :  12:00:56
Был такой топик - topic.asp@TOPIC_ID=244.html
Вот только у меня на Визио 2003 это дело почему-то не идет...
Собственно, стоит задача построения схемы трасс кабелей. С муфтами и кроссами. Хотелось бы, чтобы при выборе концевого контакта вся длина кабеля на схеме выделялась цветом и толщиной линии. (Вот только как это сквозь муфты еще будет проходить... Если там разные динамические коннекторы получатся.) А после ухода выделения с концевого контакта схема возвращалась к начальному цвету/толщине.
Находил как-то топик с триггерной схемой изменения цвета шейпа по двойному клику - теперь вдруг потерял и не могу найти...

brace

Russia
358 Posts

Posted - 06/19/2006 :  14:36:26
учимся раскладывать задачу на подзадачи.

1. тебе нужен макрос который изменяет цвет и толщину шейпа(линии)
для этого включи макрорекордер проделай все ручками выключи макрорекордер.
2. теперь надо даблклик на шейпе связать с этим макросом
в хелпе по visio VBЕ есть статья типа : запуск макроса даблкликом на шейпе...

Go to Top of Page

brace

Russia
358 Posts

Posted - 06/19/2006 :  14:58:09
см на эту тему

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devref/HTML/DVS_07_Enhancing_Shape_Behavior_335.asp
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 06/20/2006 :  19:03:15
quote:
Был такой топик - topic.asp@TOPIC_ID=244.html
Вот только у меня на Визио 2003 это дело почему-то не идет...
Проверил. В Visio 2003 работет. Вы скорее всего ошибаетесь в манипуляциях, а макрос очень беззащитен :(
Ситуация следующая. Sub ttt подсаживает к окну обработчик события SelectionChanged. Но этот обработчик способен работать только до первой же ошибки. А ошибка происходит, если Вы щелкните по уже селектированному шейпу или по пустому месту на странице. После ошибки обработчик отваливается и его надо привязывать заново.
Давайте немного изменим макрос (вставим один If) и сломать его будет уже труднее :)

Dim WithEvents Win As Window
Sub ttt()
Set Win = ActiveWindow
End Sub
Private Sub Win_SelectionChanged(ByVal Window As IVWindow)
If Window.Selection.Count > 0 Then
Window.Selection(1).Cells("FillForegnd").Formula = Window.Selection(1).Cells("FillForegnd") + 1
End If
End Sub
Сначала один раз выполнить ttt(). Потом можно долго щелкать по неселектированным шейпам - они будут перекрашиваться.
Go to Top of Page

Andy52280

Russia
2 Posts

Posted - 06/22/2006 :  09:44:10
Спасибо, работает устойчиво.
С остальным я пока в непонятках. Надо придумать некий алгоритм того, чего я хочу.
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)