Author |
Topic |
Borg
Kazakhstan
20 Posts |
Posted - 01/18/2006 : 12:47:17
|
Народ во какая задача. Во первый приложение пишется на c# с помощью компонента DrawingControl. Во-вторых необходимо создать шейп на который можно было нажимать в определённом месте и получить идин результат, а нажав в другом другой как в Visual Studio 2005 ClassDiagram. И в третих может ли шейп хранить под собой данные. Если кто не знает как сделать, но знает где можно посмотреть почитать большая просьба откликнитесь. |
|
brace
Russia
358 Posts |
|
Borg
Kazakhstan
20 Posts |
Posted - 01/18/2006 : 14:26:02
|
Я просмотрел всю имформацию которую предлагают MS и очень сильно огорчился скудностью и разнообразием инфы касающимся Visio :(. По третьиму пункту я нашёл решение. А вот как сделать шейп что бы внутри него можно було нажимать кнопку и допустим вносишь название оно отображается внутри шейпа сверху жирным шрифтом, а коментарий ниже обыкновынным и внизу кнопку нажимая на которую выводится диалог в котором можно поменять название и коментарий(думаю диалог будет делаться средствами c#). Заранее прошу прощения если не понятно объяснил чего хочу :) |
|
|
immortal
Russia
391 Posts |
Posted - 01/18/2006 : 15:33:06
|
Дак это можно решить другими средствами, и даже средствами шейпа, т.е. должна быть группа с несколькими элементами, у группы должны быть кустом проперти, а у элементов "текст" связь с кустом пропертями группы, запускать кустом проперти соответственно DOCMD по событию допустим двойной клик, можно конечно повесить это на код, но зачем... если уж вешать на код, то тоже в принципе можно, но только надо отслеживать события и координаты курсора со всеми вытекающими от сюда последствиями.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
Edited by - immortal on 01/18/2006 15:33:42 |
|
|
brace
Russia
358 Posts |
Posted - 01/18/2006 : 15:33:41
|
допустим у тебя есть шейп = КАМАЗ вид сбоку в масштабе 1:100 на этот шейп посади два маленьких кружка Circle Shape они будут выполнять роль кнопок каждому шейпу визио присваивает уникальный <id> кликом на первый круг делаешь видимым шейп с первым текстом кликом на второй круг -- шейп со вторым текстом шейп с текстом может быть любой формы = прямоугольник эллипс и тд. после двойного клика на тексте его можно редактировать.
|
|
|
immortal
Russia
391 Posts |
Posted - 01/18/2006 : 15:35:13
|
quote: после двойного клика на тексте его можно редактировать
ну это зависит от того что повешено на событие "двойной клик".
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Borg
Kazakhstan
20 Posts |
Posted - 01/19/2006 : 06:50:04
|
Большо спасибо за ответы. >> immortal Что такое DOCMD? >> Brace Ок по нажатию будет менятся текст, но будет ли он днамически изменять размер шейпа так как я не знаю какой текст будет загружен.
А как сделать что бы показывалось не возможность соединенния между шейпами допустим квадрат можно соединить только с квадратом, а круг с кругом. Вообще хотелось бы ( вернее необходимо :) ) сделать аналог ClassDiagram из VS 2005 и работать с ним из C#. |
|
|
immortal
Russia
391 Posts |
Posted - 01/19/2006 : 08:45:22
|
DOCMD это команды, которые запускются из ячеек шейплиста, описание всех команд можно посмотреть тут http://www.prodigitall.narod.ru/docs/docmd.txt в данном случае, чтобы по двойному клику выводилось окно кустом проперти необходимо написать =DOCMD(1312), в ячейку EventDblClick
quote: но будет ли он днамически изменять размер шейпа так как я не знаю какой текст будет загружен.
возможно связать размер шейпа с блоком Text Tranform, я не знаю как добится того, чтобы был блок Text Fields, именно его я использую под текст со связью с кустом пропертях, рекомендую, если не найдёте другого, изменять например шейп Vertical outside в Dimensioning - Engineering, там есть этот блок.
quote: А как сделать что бы показывалось не возможность соединенния между шейпами допустим квадрат можно соединить только с квадратом, а круг с кругом.
повесить макрос на событие и отслеживать к какому шейпу приконнективается, если к неправильному, тогнда делать дисконнект.
quote: Вообще хотелось бы ( вернее необходимо :) ) сделать аналог ClassDiagram из VS 2005 и работать с ним из C#.
не знаю, не юзал, опишите подробно, может и ответ найдётся, вобще можно посмотреть http://www.prodigitall.narod.ru и http://visio.artberg.ru/faq.htm
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 01/19/2006 : 08:56:33
|
quote: по нажатию будет менятся текст, но будет ли он днамически изменять размер шейпа так как я не знаю какой текст будет загружен.
по нажатию кнопки заранее созданный шейп с текстом может показываться или исчезать = это можно сделать без программирования. что такое VS 2005 и С# извини не знаю.
|
|
|
Borg
Kazakhstan
20 Posts |
Posted - 01/19/2006 : 09:12:12
|
>> VS 2005 - MicroSoft Visual Studio 2005, а c# - это язык програмирования из .NET, произносится - си шарп. Я не знаю как поместить картинку на этот форум и можно ли вообще :( там пример того что должно получится. Как быть? |
|
|
Borg
Kazakhstan
20 Posts |
Posted - 01/19/2006 : 09:16:33
|
>> Brace К сожелению мне необходимо более динамичная конструкция которая будет автоматически менять свои размеры в зависимости от количества отображаемого текста, как в Word когда пишешь внутри прямоугольника если не помещается текст он автоматически увелчивает свой размер. |
|
|
immortal
Russia
391 Posts |
Posted - 01/19/2006 : 09:32:03
|
quote: К сожелению мне необходимо более динамичная конструкция которая будет автоматически менять свои размеры в зависимости от количества отображаемого текста, как в Word когда пишешь внутри прямоугольника если не помещается текст он автоматически увелчивает свой размер.
Всё описывается в шейп листе, без всякого си #, повторюсь: quote: возможно связать размер шейпа с блоком Text Tranform, я не знаю как добится того, чтобы был блок Text Fields, именно его я использую под текст со связью с кустом пропертях, рекомендую, если не найдёте другого, изменять например шейп Vertical outside в Dimensioning - Engineering, там есть этот блок.
в принципе можно посмотреть как это работает в моих мастершейпах, а именно "провод" и "опора".
могу также дать исходник адд-он подпрограммы на васике, который работает с коннектион поинтсами, и отслеживает к какой фигуре приконнективается шейп, и делает необходимые действия при коннекте.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Borg
Kazakhstan
20 Posts |
Posted - 01/19/2006 : 11:37:22
|
Да было бы отлично:). я читал статью про то как если нажимаешь на шейп другой то прячется то показывается, не подскажите где есть про это описание. И всё таки как вам передать картинку? |
|
|
immortal
Russia
391 Posts |
Posted - 01/19/2006 : 12:10:24
|
шлите картинки на мыло immortal@mh.vstu.edu.ru
скрипт завтра постораюсь выложить, что касается видимости: видимость определяется в секции Геометрия шейп листа, но рекомендую использовать ссылки на ячейки пользователя для видимости, т.е. устанавливать видимость в юзер ячейках с уникальным для данного шейпа именем юзер ячейки, а далее возможно с помощью внешней программы менять значение этой ячейки, т.е. видно/невидно. если вынести это в кустом проперти, то можно менять через кустом проперти, как сделано у меня в мастер-шейпе "опора"
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
immortal
Russia
391 Posts |
Posted - 01/19/2006 : 12:45:46
|
вот код, он правда староват, сейчас уже переработан, но для данного случая это подходит.
Public vis As Object 'определяем глобальную переменную
Sub Main()
'On Error Resume Next ' не выдавать сообщения об ошибках и выходить из программы, рекомендуется заремить на стадии отладки
If App.PrevInstance = True Then ' если подпрограмма уже запущена, то не запускается второй раз, а передаётся запущенной программе где electrics её имя AppActivate "electrics" End End If
Set vis = GetObject(, "Visio.Application") 'делаем ссылку на объект визио dim ss
ss = vis.Application.ActiveWindow.Page.Shapes.Count 'количество шейпов, если необходимо сделать цикл по всем шейпам на листе
Dim i:Dim n:Dim s:Dim bg:Dim bg1 'определение переменных, в ВБА не обязательно
Dim vsoSelection As Visio.Selection 'делаем ссылку Set vsoSelection = vis.ActiveWindow.Selection 'на выделенный объект(ы)
For i = 1 To vsoSelection.Count 'цикл по выделенным объектам, если необходимо только один объект, тогда это убираем и везде вместо i ставим 1, макрос будет работать с объектом выделенным первым.
bg = vsoSelection.Item(i).CellsSRC(visSectionObject, visRowXForm1D, vis1DBeginX) _ .FormulaU ' считываем формулу с ячейки в шейплисте BeginX n = InStr(1, bg, "!") 'определяем приконнектена ли к чему нибудь шейп - линия
If n = 0 Then 'если не приконнектен, тогда
vsoSelection.Item(i).Cells("User.dh1").FormulaU = 0 'записываем в юзер ячейку необходимые значения, если у нас шейп не правильный, тогда мы ничего не напортим, т.к. имя юзер ячейки уникально и характерно для данного типа шейпа
Else 'есть коннект, тогда: bg1 = Mid(bg, 9, n - 8) ' вычисляем имя шейпа к которому приконектился наш шейп, далее можно проверить это имя на соответствие bg1 = "ABS(" & bg1 & "Prop.h - Prop.h)" vsoSelection.Item(i).Cells("User.dh1").FormulaU = bg1 'выше 2 строки: записываем формулу в наш шейплист со ссылкой на данные шейпа к которому приконектилось, теперь при изменении Prop.h во втором шейпе, автоматом произойдут изменения в нашем шейпе, а именно в ячейке User.dh1 (она уникальна) End If
'ниже идёт такойже код, только теперь с ячейкой EndX, соответственно для второго конца линии bg = vsoSelection.Item(i).CellsSRC(visSectionObject, visRowXForm1D, vis1DEndX) _ .FormulaU n = InStr(1, bg, "!") If n = 0 Then vsoSelection.Item(i).Cells("User.dh2").FormulaU = 0 Else bg1 = Mid(bg, 9, n - 8) bg1 = "ABS(" & bg1 & "Prop.h - Prop.h)" vsoSelection.Item(i).Cells("User.dh2").FormulaU = bg1 End If
Next i 'конец цикла
End Sub
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
Edited by - immortal on 01/19/2006 12:51:32 |
|
|
brace
Russia
358 Posts |
Posted - 01/19/2006 : 14:16:09
|
визио содержит несметное число шейпов всех наверное никто и не знает. шутники программеры подложили мне нужный шейп под нос называется он Auto size box найти его можно через поле поиска Search for Shapes оно слева находится где трафареты = стенсилы. |
|
|
Topic |
|
|
|