Author |
Topic |
|
yabes
39 Posts |
Posted - 07/24/2009 : 20:25:39
|
Смысл такой... Возьмем простой пример... Допустим, я нарисую прямоугольник, посередине проведу линию, добавлю 2 текстовых поля над и под линией. Сгруппирую все это. Выделю и создам 2 Shape Data с 2-мя текстовыми параметрами, которые будут вставляться в эти 2 текстовых поля (Если посмотреть Шейп лист, то таблица Shape Data содержится только в шейплисте прямоугольника). Таким образом получилось 4 ID: прямоугольник, линия и 2 текстовых поля. Дальше я помещаю на листе несколько таких сгруппированных объектов. Цель такая - Поместить данные о каждом объекте в БД (координату верхнего левого угла и данные из объекта, т.е. 2 поля из Shape Data). Как лучше это сделать? Проблема в том, если проходить по ID на листе, то на каждый объект приходится по 4 ID. Мне из них важен только тот Sheet, который является прямоугольником и имеет 2 текстовых параметра, а ID тектовых полей и линии надо пропустить! Мой вариант такой - проходить по всем ID и если ID имеет Shape Data, то записывать правый верхний угол и 2 параметра в БД, а если не имеет, то пропускать! Как в коде проверить наличие Shape Data у шейпа!!!??? Может я с терминологией погорячился - просто я к ней не привык! Жду ответа! |
|
Tumanov
Russia
1198 Posts |
Posted - 07/25/2009 : 07:53:15
|
Лучше чуть-чуть изменить технологию. Сделав один такой шейп, перенести его в трафарет и присвоить имя. Последующие шейпы переносить на рисунок с трафарета. Тогда у них у всех будет одинаковое имя, по которому можно их отфильтровать. Только не забывать, что к нему будет добавляться ID. --- А если все-таки захотите проверять секцию данных, то делается это примерно так
Dim sh As Visio.Shape
Sub ttt()
For Each sh In ActivePage.Shapes
If sh.SectionExists(visSectionProp, 0) Then Debug.Print sh.Name Else Debug.Print "no"
Next
End Sub |
|
|
yabes
39 Posts |
Posted - 07/25/2009 : 12:40:36
|
quote: Originally posted by Tumanov
Лучше чуть-чуть изменить технологию. Сделав один такой шейп, перенести его в трафарет и присвоить имя. Последующие шейпы переносить на рисунок с трафарета. Тогда у них у всех будет одинаковое имя, по которому можно их отфильтровать. Только не забывать, что к нему будет добавляться ID. --- А если все-таки захотите проверять секцию данных, то делается это примерно так
Dim sh As Visio.Shape
Sub ttt()
For Each sh In ActivePage.Shapes
If sh.SectionExists(visSectionProp, 0) Then Debug.Print sh.Name Else Debug.Print "no"
Next
End Sub
Я так и делал, Но если например 2 таких шейпа на лист перетащить первый будет иметь ID=1, а второй уже ID = 6!!! Или можно шейпы на листе проходить как-нибудь по-другому??? Допустим Я из трафарета перетащил 2 шейпа и как дальше цикл прохода организовать? За Процедуру спасибо большое! А если сделать так... пройтись по всем ID и если Имя шейпа (без .ID) совпадает с именем трафарета, то тогда заносим данные в БД. Так?
Кстати, возник вопрос: если нарисовать прямоугольник, разделить прямой на 2 части и добавить в трафарет, то при переносе на лист 2-х таких фигур ID второй фигуры начинаются с 4-х. Вопрос такой, фигура состоит из прямоугольника и прямой. Откуда 4 ID??? |
Edited by - yabes on 07/25/2009 12:49:42 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 07/25/2009 : 21:15:13
|
quote: А если сделать так... пройтись по всем ID и если Имя шейпа (без .ID) совпадает с именем трафарета, то тогда заносим данные в БД. Так?
Именно так. NameID состоит из юмени и ID. Имя у всех одинаковое, а ID будет отличаться. quote: Вопрос такой, фигура состоит из прямоугольника и прямой. Откуда 4 ID???
Включите View / Drawing Explorer и пощелкайте по дереву. Увидите структуру шейпов, многое станет понятно.
|
|
|
yabes
39 Posts |
Posted - 07/26/2009 : 21:01:38
|
quote: Originally posted by Tumanov
quote: А если сделать так... пройтись по всем ID и если Имя шейпа (без .ID) совпадает с именем трафарета, то тогда заносим данные в БД. Так?
Именно так. NameID состоит из юмени и ID. Имя у всех одинаковое, а ID будет отличаться. quote: Вопрос такой, фигура состоит из прямоугольника и прямой. Откуда 4 ID???
Включите View / Drawing Explorer и пощелкайте по дереву. Увидите структуру шейпов, многое станет понятно.
Все, разобрался!!! Геннадий, спасибо за помощь! |
|
|
|
Topic |
|
|
|