All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как написать условие проверки Shape Data
Author Previous Topic Topic Next 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
Go to Top of Page

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
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/25/2009 :  21:15:13
quote:
А если сделать так... пройтись по всем ID и если Имя шейпа (без .ID) совпадает с именем трафарета, то тогда заносим данные в БД. Так?

Именно так.
NameID состоит из юмени и ID. Имя у всех одинаковое, а ID будет отличаться.
quote:
Вопрос такой, фигура состоит из прямоугольника и прямой. Откуда 4 ID???

Включите View / Drawing Explorer и пощелкайте по дереву. Увидите структуру шейпов, многое станет понятно.

Go to Top of Page

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 и пощелкайте по дереву. Увидите структуру шейпов, многое станет понятно.


Все, разобрался!!! Геннадий, спасибо за помощь!
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)