All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как исключить повторную вставку шейпа
Author Previous Topic Topic Next Topic  

zhuravsky

Russia
115 Posts

Posted - 10/05/2006 :  20:16:24
Как сделать так, чтобы на одну и ту же страницу нельзя было бы дважды вставить определенный шейп.
Например, имеется штамп для формата А4, он на листе должен быть в единственном экземпляре (или его может вообще не быть).
Желательно было бы заложить такую функциональность в сам шейп.

Dart

11 Posts

Posted - 10/06/2006 :  23:38:41
По моеиу токое возможно только через Visual Basic (макрос, или написать Add-i)n, который по событию ShapeAdded будет смотреть на Имя мастер шейпа и при повторном добавлении, его в с ругательством в MessageBox - удалять.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 10/07/2006 :  12:08:52
Я тоже думаю в этом направлении. А нет ли какого-нибудь примерчика с кодом, пусть не совсем то что надо, просто изучить принципы?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/07/2006 :  13:21:53
Можно сыграть на том, что Name шейпа образуется путем добавления к имени индекса через точку.
Значит, например, первый шейп Triangle будет иметь Name=Triangle, а остальные Triangle.1, Triangle.20 и т.д.
Тогда можно не проверять, если уже такие шейпы на странице, а удалять все шейпы, к имени которых добавлена точка.
Тогда макрос (обработчик события ShapeAdded, обеспечивающий уникальность шейпа Triangle) будет выглядеть так:
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
    If InStr(1, Shape.Name, "Triangle.") Then
        MsgBox "Шейп Triangle уже существует. Второй добавлять не разрешается. Удаляю."
        Shape.Delete
    End If
End Sub
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 10/08/2006 :  11:15:04
Спасибо. Буду пробовать.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 10/08/2006 :  11:20:38
>Tumanov
А можно ли в ваш код добавить проверку, что шейп существует именно на той странице, куда вставляется новый шейп? Просто у меня документ многостраничный и на каждой из страниц должен быть шейп с именем "PageDef"
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/08/2006 :  12:17:36
Не нужно.
Шейпы нумеруются в пределах страницы. Данный макрос разрешает на каждой странице иметь по одному шейпу Triangle.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 10/09/2006 :  08:51:09
Спасибо! Работает как надо.
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)