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

vis

47 Posts

Posted - 04/01/2011 :  12:26:21
Задача - создать умный отрезок со следующими свойствами:
1. Если два таких отрезка пересекаются, то ничего не должно происходить.
2. Если 1-ый отрезок приклеить ко 2-му (независимо от места приклеивания), то конец 1-го отрезка должен менять форму на стрелку.

Подскажите, возможно ли это.
И если возможно, то в каком направлении двигаться?

Surrogate

Russia
122 Posts

Posted - 04/01/2011 :  14:27:01  Visit Surrogate's Homepage
Речь идет всего о 2 отрезках, или ко второму может прилепляться третий и т.д. ?

Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/01/2011 :  15:54:05
Напрашивающийся вариант - написать обработчик события ConnectionsAdded или CellChanged. В обработчике проверять тип шейпа и другие нужные условия и менять тип окончания для линии.
ConnectionsAdded скорее всего придетсяч цеплять к странице, причем через WithEvents, то есть нужен будет еще запускающий макрос.
Go to Top of Page

vis

47 Posts

Posted - 04/02/2011 :  09:14:33
Ну хотя бы один отрезок умный подскажите, плиз, как создать....
чтобы наконечник менялся на стрелку при приклеивании этого отрезка к любому шейпу, а при отклеивании стрелка исчезала.
Как сделать именно стрелку и ее размер я нашел в ShapeList в секции LineFormat.
Вижу также, что меняются при приклеивании поля в секции 1-D Endpoints, а именно появляется формула =PAR(PNT(Sheet.1!Connections.X1,Sheet.1!Connections.Y1))
Но мне не хватает знаний, чтобы по факту появления этой формулы, задавать нужный параметр в BeginArrow (LineFormat)
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/03/2011 :  17:51:23
Факт появления формулы отследить нельзя. Только значение, а оно в данном случае ничего не даст.
Макросами у Вас разрешены? Если разрешены, то вот такой пример демонстрирует нужное поведение.
Dim WithEvents pg As Visio.Page

Sub StartConnect()
    Set pg = ActivePage
End Sub

Sub StopConnect()
    Set pg = Nothing
End Sub

Private Sub pg_ConnectionsAdded(ByVal Connects As IVConnects)
        Connects(1).FromSheet.Cells("BeginArrow") = 5
End Sub

Private Sub pg_ConnectionsDeleted(ByVal Connects As IVConnects)
        Connects(1).FromSheet.Cells("BeginArrow") = 0
End Sub

Назначение макросов следующее:
StartConnect - стартовый макрос. После его выполнения линии начнут обладать нужным поведением.
StopConnect - выключающий макрос. После него линии клеятся в обычном режиме.
pg_ConnectionsAdded - обработчик события коннекта. В обработчике появляется стрелка.
pg_ConnectionsDeleted - обработчик отконнекчивания. В обработчике стрелка удаляется.
Для включения требуемого режима нужно вручную выполнить макрос StartConnect. Если мы теперь на рисунке приклеим линию куда-нибудь, то сработает событие pg_ConnectionsAdded и в начале линии появится стрелка. При отсоединении сработет другой обработчик и стрелка пропадет.
Так будет работать до тех пор, пока мы вручную не выполним макрос StopConnect.
Это, естественно, только пример. Он работает только на одной странице, не разбирается, что к чему коннектится и т.д. Для более качественной работы нужно бы отбирать шейпы по типу, менять присвоение "pg" при переходе на другую страницу и т.д. Можно проверить, чем приконнектилась линия - началом или концом - и ставить стрелку в нужно месте.
Go to Top of Page

vis

47 Posts

Posted - 04/04/2011 :  05:50:46
Спасибо большое, Туманов.

хотелось без макросов, но раз по-другому никак, то буду макросом.
А как проверить чем приконнектился отрезок??
Щас буду искать на форуме
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/04/2011 :  16:25:30
По свойству FromPart.
Будет 9 или 12.
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)