Author |
Topic |
|
Евгений
88 Posts |
Posted - 01/13/2005 : 18:46:26
|
Мне нужно такое поведение документа:
Юзер положил шейп на страницу, и, если он полностью содержится в другом шейпе, то присваивает себе некую пропертю от содержащего его "родительского" шейпа.
Ковыряю в Document_Shape_Added. Пока это выглядит так:
Private Sub Document_ShapeAdded(ByVal shape As IVShape)
Dim page As Visio.page
Set page = shape.Parent
For Each sh In page.Shapes
If Inside(sh, shape) Then
shape.Parent = sh
End If
Next
MsgBox shape.Parent 'just for testing
End Sub
Несколько вопросов: 1. Что такое "IVShape"? Почему не Visio.Shape? Инет молчит. 2. В этом коде просто хочу определить нижний шейп как родитель для нового шейпа. В линии, где происходит присваивание, получаю exception. Что делать? Может, это из-за того, что шейп передается через значение? 3. Функция Inside(sh, shape) должна проверить, находится ли sh в shape. Как ее заимплементировать? Может, есть готовая реализация? Можно брать проперти шейпа такие, как "PinX", "PinY". Подскажите, у меня нет опыта с обращением с пропертями и даже с правильной декларацией функций.
Спасибо заранее. |
|
Tumanov
Russia
1198 Posts |
Posted - 01/13/2005 : 21:48:44
|
Такое поведение достигается не так. В Вашем случае нужно найти на странице все шейпы, на которые попадет данный шейп, причем целиком. Для этого есть функция objRet = object.SpatialNeighbors(relation, tolerance, flags[,resultRoot]) Returns a Selection object that represents the shapes that meet certain criteria in relation to a specified shape. object - это Ваш новый шейп shape. relation должно быть равно visSpatialContainedIn (в крайнем случае - наоборот - visSpatialContain :) tolerance какой-нибудь маленький, в дюймах flags скорее всего удовлетворит нулевой. Вам будет возвращена коллекция шейпов Selection, удовлетворяющая данному условию. Если она пустая, значит ни одного такого шейпа нет. Константы смотрятся через Object Browser в Visual Basic Editor'е. -------------------- Есть похожие полезные свойства: SpatialSearch, DistanceFromPoint, SpatialRelation... Насчет фокусов с "shape.parent =..." - по-моему такое не укладывается в объектную модель Visio. Да вроде по условиям и не нужны Вам такие отношения. PinX, PinY, естественно, тоже использовать можно, но в данном случае больше подходит то, что я сказал выше. Почему IV - не знаю :( |
|
|
Евгений
88 Posts |
Posted - 01/14/2005 : 12:30:19
|
Г-н Туманов, в очередной раз спасибо! Не все сразу заработало, но после некоторых исправлений удалось получить желанный результат! Используя это property (кстати, почему то, что в объектных языках называется методом, в VB причисляется к пропертям?), удалось также исследовать наложения шейпов (overlaps). |
|
|
|
Topic |
|
|
|