Author |
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
|
Речь идет всего о 2 отрезках, или ко второму может прилепляться третий и т.д. ?
† |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/01/2011 : 15:54:05
|
Напрашивающийся вариант - написать обработчик события ConnectionsAdded или CellChanged. В обработчике проверять тип шейпа и другие нужные условия и менять тип окончания для линии. ConnectionsAdded скорее всего придетсяч цеплять к странице, причем через WithEvents, то есть нужен будет еще запускающий макрос. |
|
|
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) |
|
|
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" при переходе на другую страницу и т.д. Можно проверить, чем приконнектилась линия - началом или концом - и ставить стрелку в нужно месте. |
|
|
vis
47 Posts |
Posted - 04/04/2011 : 05:50:46
|
Спасибо большое, Туманов.
хотелось без макросов, но раз по-другому никак, то буду макросом. А как проверить чем приконнектился отрезок?? Щас буду искать на форуме |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/04/2011 : 16:25:30
|
По свойству FromPart. Будет 9 или 12. |
|
|
|
Topic |
|