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

prov

3 Posts

Posted - 07/08/2006 :  00:14:53
Только начинаю работать в Visio. Очень нужна помощь.
Как сделать чтобы при нажатие на Shape возникало окно, в котором будут отражаться данные считанны, например из текстового файла.

Tumanov

Russia
1198 Posts

Posted - 07/08/2006 :  10:43:14
Вообще-то, навешивания своих функций на одиночный клик лучше избегать...
В Visio для подобных операций предусмотрен двойной клик. Если Вам это подходит, то:
- в VBA создается формочка с окном, в котором будут отображаться считанные данные;
- пишется макрос, считывающий данные из файла и передающий их в формочку;
- запуск макроса через Format / Behavior / Double-Click / Run macro навешивается на шейп.
Если текст совсем небольшой, то можно обойтись без формочки, а текст выводить прямо из макроса через стандартный MsgBox.
А с одиночным кликом работать тяжелее. Небольшой примерчик был в topic.asp@TOPIC_ID=815.html
Go to Top of Page

prov

3 Posts

Posted - 07/09/2006 :  23:37:41
А можно попросить еще помощи. Я пытался сделать то, что вы сказали, но у меня возникло несколько проблем:
1. у меня не получилось считать данные из файла и занести их в форму ( к сожалению с VBA большие сложности, пока)
2. и как сделать если к каждому Shape должен быть приклеплен свой файл.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/10/2006 :  10:42:40
1. Если с Visio еще есть какие-то проблемы с документацией, особенно по программированию, то с VBA таких проблем уже давно не существует. Простейший способ разобраться - купить книжку и прочитать...
2. Можно либо заносить имя файла непосредственно в шейп (например, в Custom Properties или User-defined), или в специальный массив, связывающий имя шейпа с именем файла. Это уж надо выбирать, что удобнее для Вашего решения. Макрос прочитает имя файла и возьмет из него данные.
Макрос будет выглядеть примерно так (это без обработки ошибок, форматирования и т.д.)

Sub ttt()
Dim Sh As Visio.Shape
Dim CellObj As Visio.Cell
Set Sh = ActiveWindow.Selection(1)
Set CellObj = Sh.Cells("Prop.Fil")
InFile = ActiveDocument.Path & "\" & Replace(CellObj.Formula, Chr(34), "")
Dim fso As New FileSystemObject
Dim ts As TextStream
Set ts = fso.OpenTextFile(InFile)
s = ts.ReadAll
ts.Close
UserForm1.TextBox1 = s
UserForm1.Show (1)
Unload (UserForm1)
End Sub

Комментарии:
По двойному клику шейп будет селектирован, значит его можно вычислить через объект Selection.
Из шейпа берется ячейка Custom Properties с именем Fil, в которую предварительно должно быть записано имя файла с данными.
К имени надо добавить путь. Если файл с данными лежит в той же папке, что рисунок, то путь будет вычисляться через ActiveDocument.Path. Из строки с именем нужно убирать лишние кавычки (Replace).
Данные из файла читаются в одну строку функцией ReadAll объекта TextStream.
Затем эта строка передается в TextBox на форме.
Форма высвечивается функцией Show и убирается функцией Unload.
Примечание. Чтобы работал FileSystemObject нужно к проекту через References присоединить Microsoft Scripting Runtime.
Go to Top of Page

prov

3 Posts

Posted - 07/11/2006 :  16:00:43
Большое спасибо за помощь.
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)