All Forums
 Категория Visio
 Форум Вопросы и ответы
 Окно наподобие Database Model Diagram
Next Page
Author Previous Topic Topic Next Topic

zz 5

Russia
54 Posts

Posted - 12/18/2006 :  11:07:49
Здраствуйте ! Имеется проблема, решиния которой я пока не нашел, хотя имеется пару вариантов. Имеется шаблон Database Model Diagram, в нем для шейпа, допустим, "Entity" имеется в пункте контекстного меню дополнительная строчка, при щелчке по которой вызывается редактор сущности или таблицы, если хотите, где пользователь может определить поля таблицы, их тип, размер и т.п. Необходимо сделать похожее и для своего шейпа, только в несколько упрощенном виде. Соответственно, имеется куча вопросов, как это лучше сделать.

1. Где сидит информация (поля, тип, размер, ключи) конкретного элемента ? В специальных свойств я не нашел ? Тогда где еще может быть ?
2. Можно ли как-нибудь добыть код этой формочки, чтобы заново не придумывать велосипед ? Это бы съэкономило бы много сил и времени.
3.Пока вижу два варианте решения этой проблемы.

Первый: беру шаблон Database Model Diagram, добавляю в него свои шейпы, макросы и т.п., т.е. перелопачиваю под себя, при этом сохраняя (а изменить то нельзя :) ) всю начинку родительского шаблона. Здесь я вижу две трудности. Во-первых, вряд ли я смогу избавиться от лишних элементов (главное меню, окно просмотра и т.д.). И во-вторых, пока не знаю, как получить программно данные таблиц в виде отчета, не зная структуру их хранения.

Второй:здесь, вроде, все понятно. Ручная реализация с нуля, а именно создание окна, вызова его, редактирование и хранение. Главная загвоздка состоит в отсутвии необходимых компонентов в VBA, такиъ как список с переменным количество строк, таблицы. В общем, в бедности компонентной палитры.

Какие будут идеи ? Спасибо за внимание.


------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !

Tumanov

Russia
1198 Posts

Posted - 12/18/2006 :  19:06:21
Информация в таких случаях часто сидит в специальном (возможно невидимом) мастер-шейпе в Document Stencil в виде встроенного объекта. Поищите где-нибудь там - найдете.
Но, так как структура этой информации, естественно, не раскрывается, решение 1 явно отпадает :)
Второе решение подходит больше. Не хватает компонентов в VBA (что странно), так можно писать Add-On на VB, C или даже на Delphi.
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/19/2006 :  21:07:10
quote:
Originally posted by Tumanov

Информация в таких случаях часто сидит в специальном (возможно невидимом) мастер-шейпе в Document Stencil в виде встроенного объекта. Поищите где-нибудь там - найдете.
Но, так как структура этой информации, естественно, не раскрывается, решение 1 явно отпадает :)
Второе решение подходит больше. Не хватает компонентов в VBA (что странно), так можно писать Add-On на VB, C или даже на Delphi.


С первым решением понятно, нет, так нет
Теперь насчет второго. Не удалось найти место хранения значений. Например, для элемента Entity шаблона Database Model Diagram так и не нашел. Сам элемент состоит из двух шейпов, но ни у одного из них специальные настройки вообще не определены. Так где же "собака зарыта" (с) Известный политик ? Насчет написание аддона: наверно, это единственный выход. Буду разбираться. Кстати, впервые вижу, чтобы советовали писать аддон на Дельфи ? Разве это возможно ? Везде рекомендуют VB или С++.

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/19/2006 :  21:30:48
Я тоже на Дельфи не рекомендую, но в принципе это должно быть возможно.
Насчет места хранения - не нашли, потому что не там ищете. Не в отдельных элементах! Хранится вся модель базы.
Создайте рисунок на основе этого шаблона.
Откройте Document Stencil
Видите в нем квадратик, называющийся Database Model? Вот там и сидят данные. В свойствах написано "Database Model master stores embedded model information". То есть этот мастер-шейп используется для хранения данных всего рисунка.
Они туда засунуты в виде встроенного объекта и через интерфейс никак не просматриваются. Программно доступ к ним получить можно, но только как к блобу - чистая двоичка, в которой неизвестно что где.
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/20/2006 :  06:45:12
Нашел :)
Странно, но пока нигде не удалось найти примерчика или статьи по написанию addon-ов. Странно это. Может кто-нибудь поделится ? Пока попробую изложить свой видимый алгоритм написания Addon:
1. Создается новое приложение в VB или С++
2. В нем по любом, определенному разработчику событию, вызывается метод, который посредством команд общается с Визио как с COM-сервером. Например, пример кода merc:
Function UpdateScheme(strPath)
   Dim visApp
   Set visApp = WScript.CreateObject("Visio.InvisibleApp")

   visApp.AlertResponse = 1
   visApp.Documents.Open strPath
   visApp.ActiveWindow.SelectAll
   
   For Each shp In visApp.ActiveWindow.Selection
      If shp.CellExists("User.ODBCConnection", 0) Then
         If shp.Cells("EventDrop").Formula = "RUNADDON(""DBR"")" Then
            shp.Cells("EventDrop").Trigger
         End If
      End If
   Next

   if visApp.ActiveDocument.Saved=false Then visApp.ActiveDocument.Save
   visApp.Quit
End Function
Вот. Таким же образом идет работа с открытым документом в Визио. Непонтно только, как указать шейп.
3. После создания Addon, полученный exe-файл кладется в папку, указанную в соотвествующем поле настройки (Tools).
4. И последнее, в нужном месте данный аддон вызывается процедурой RunAddon("Имя моей аддона").

Коллеги, верной я иду дорогой или где-то ошибся ?

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
Go to Top of Page

brace

Russia
358 Posts

Posted - 12/20/2006 :  09:50:45
извини пишу о том чего не понимаю...

http://search.msdn.microsoft.com/search/default.aspx?siteId=0&tab=0&query=visio+add+on
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/20/2006 :  10:07:33
quote:
Originally posted by brace

извини пишу о том чего не понимаю...

http://search.msdn.microsoft.com/search/default.aspx?siteId=0&tab=0&query=visio+add+on

К сожалению, на работе нет доступа к сайтам Microsoft. Только дома. Нашел статейку в Visio SDK, буду разбираться. А примерчиков не найдется ?

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/20/2006 :  13:01:52
Если стоит Visual Studio, а потом устанавливается SDK Visio 2003, то SDK добавляет в Visual Studio шаблоны для создания Visio Add-On и Add-In. То есть получаешь не просто пример, а готовый к использованию пустой Add-On. Остается только при запуске Visual Studio ткнуть на нужный тип приложения.
Изобретать велосипед уже не нужно...
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/20/2006 :  13:06:27
quote:
Originally posted by Tumanov

Если стоит Visual Studio, а потом устанавливается SDK Visio 2003, то SDK добавляет в Visual Studio шаблоны для создания Visio Add-On и Add-In. То есть получаешь не просто пример, а готовый к использованию пустой Add-On. Остается только при запуске Visual Studio ткнуть на нужный тип приложения.
Изобретать велосипед уже не нужно...

Не стоит , значит, поехал покупать. Спасибо.

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/26/2006 :  16:38:18
quote:
Originally posted by Tumanov

То есть этот мастер-шейп используется для хранения данных всего рисунка.
Они туда засунуты в виде встроенного объекта и через интерфейс никак не просматриваются. Программно доступ к ним получить можно, но только как к блобу - чистая двоичка, в которой неизвестно что где.

Как создать нечто подобное ? Сейчас работаю над создание Add-on, в котором идет редактирование данных. После закрытия add-on надо отредактированные данные куда-то записать. Единственный вариант, который я придумал - в custom property, но не уверен насчет размера данных, которые можно помещать в ячейку с типом string.

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/26/2006 :  18:43:17
В Custom не стоит - там они могут случайно повредиться пользователем.
Лучше складывать в User.
Длина строки - что-то типа 65000 символов. Сейчас не помню, где это конкретно написано... В тех табличках, что попадаются под руку, написано Unlimited, но это неправда.
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/27/2006 :  16:17:27
Спасибо, все получилось. Не понимаю только, почему все советуют C++ или VB для написания Addon ? По-моему, что-то похожее встречал в статье в SDK. Для меня казалось кошмаром, учить новый язык программирования (С++) лишь только для того, чтобы написать простенький аддон. Хотя сам не первый год профессионально программирую на Delphi.

Но случайно на работе пришла в голову мысль: создать пустое приложение в Delphi и попробывать его запустить как Addon из Visio. Заработало !. Огромные трудности на начальном этапе вызвал еще тот факт, что сколько-нибудь рабочих примеров аддона я так не нашел Только exe-шники без исходных текстов.

2Tumanov: Могу "сварганить" простенький примерчик аддона на Дельфи, который можно выложить на сайте с исходными текстами, чтобы облегчить путь ищущим. На крайний случай можно небольшую статью написать, где будет рассказываться не только написание аддона, но и рассматриваться его подключение в Visio. Как вам такая идея ?

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
Go to Top of Page

brace

Russia
358 Posts

Posted - 12/27/2006 :  18:12:08
вот пример адона...

'This Microsoft Visual Basic for Applications (VBA) macro demonstrates
'adding Document objects such as templates,stencils, and drawings
'to the Documents collection.
'It demonstrates adding pages, masters, layers, styles, events, and
'add-ons to their corresponding collection.
'It also demonstrates drawing a rectangle and grouping, selecting, and
'duplicating shapes.
'Before running this macro, replace "Myfile.vsd" with a valid .vsd file
'and references to "c:\My Documents\MyAddon.exe" and "MyAddon.exe" with
'a valid path and/or file name.

Public Sub Add_Example()

Dim mastersObj As Visio.Masters
Dim addonsObj As Visio.Addons
Dim pagesObj As Visio.Pages
Dim eventListObj As Visio.EventList

Dim layersObj As Visio.Layers
Dim layerObj As Visio.Layer
Dim stylesObj As Visio.Styles

Dim documentObj As Visio.Document
Dim windowObj As Visio.Window
Dim eventObj As Visio.Event
Dim masterObj As Visio.Master
Dim pageObj As Visio.Page
Dim shapeObj As Visio.Shape
Dim shapeGrpObj As Visio.Shape, shapeGrpObj2 As Visio.Shape
Dim styleObj As Visio.Style
Dim addonObj As Visio.Addon

'Add a document based on the Basic Diagram template.
Set documentObj = Documents.Add("Basic Diagram.vst")

'Add a document based on a drawing (creates a copy of drawing).
Set documentObj = Documents.Add("Myfile.vsd")

'Add a document based on a stencil (creates a copy of the stencil).
Set documentObj = Documents.Add("Basic Shapes.vss")

'Add a document object based on no template.
Set documentObj = Documents.Add("")

'Get the Pages collection and add a page to the collection.
Set pagesObj = documentObj.Pages
Set pageObj = pagesObj.Add

'Get the Masters collection and add a master to the collection.
Set mastersObj = documentObj.Masters
Set masterObj = mastersObj.Add

'Get the Layers collection and add a layer named "MyLayer"
'to the collection.
Set layersObj = pageObj.Layers
Set layerObj = layersObj.Add("MyLayer")

'Draw two rectangles.
Set shapeObj = pageObj.DrawRectangle(3, 3, 5, 6)
Set shapeObj = pageObj.DrawRectangle(4, 4, 6, 7)

'Select the two rectangles and group them.
ActiveWindow.SelectAll
ActiveWindow.Selection.Group

'Duplicate the group and set each group as a Shape object.
Set shapeGrpObj = pageObj.Shapes(1)
shapeGrpObj.Duplicate
Set shapeGrpObj2 = pageObj.Shapes(2)

'Add a shape to the layer.
'This group's component shapes are added to the layer.
layerObj.Add shapeGrpObj, False

'Add a shape to the layer.
'This group's component shapes are added to the layer.
layerObj.Add shapeGrpObj2, True

Set stylesObj = documentObj.Styles
'Add a style named "My FillStyle" to the Styles collection.
'This style is based on the style Red Fill and includes only a Fill style.
Set styleObj = stylesObj.Add("My FillStyle", "Red Fill", False, False, True)

'Add a style named "My NoStyle" to the Styles collection.
'This style is based on no style and includes
'Text, Line, and Fill styles.
Set styleObj = stylesObj.Add("My NoStyle", "", True, True, True)

'Add the add-on "MyAddon.exe" to the Addons collection.
Set addonsObj = Visio.Addons
Set addonObj = addonsObj.Add("c:\My Documents\MyAddon.exe")

'Add a BeforeDeleteSelection event to the EventList collection
'of the document. The event will start "MyAddon.exe", which
'takes no arguments.
Set eventListObj = documentObj.EventList
Set eventObj = eventListObj.Add(visEvtCodeBefSelDel, visActCodeRunAddon, _
"MyAddon.exe", "")

End Sub


Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/27/2006 :  18:53:21
quote:
Не понимаю только, почему все советуют C++ или VB для написания Addon.
C++ - это единственный язык, на котором можно написать vsl.
vsl отличается тем, что сочетает лучшие качества Add-On и Add-In. Он работает InProcess (как Add-In), значит все связи с Visio короткие и быстрые. Вызывается как Add-On (отовсюду). Может обрабатывать события, установленные по AddAdvise (как Add-In), то есть можно очень точно спозиционировать обработчики. В плане безопасности ближе к Add-In, то есть его можно выполнять на тех уровнях безопасности, когда exe Add-On уже запрещен.
Единственный недостаток - C++ это кошмар для новичков :)
Вообще, очень хотелось бы видеть на этом форуме хотя бы одного хорошего специалиста по C++...
Начать писать на VB на порядок легче, тем более, что VB - это почти то же, что VBA, а на VBA есть не только куча примеров, но и система записи макросов в Visio 2003.

quote:
2Tumanov: Могу "сварганить" простенький примерчик аддона на Дельфи, который можно выложить на сайте с исходными текстами, чтобы облегчить путь ищущим. На крайний случай можно небольшую статью написать, где будет рассказываться не только написание аддона, но и рассматриваться его подключение в Visio. Как вам такая идея ?

Приветствуется!
В идеале хорошо бы еще и Add-In на Дельфи создать, но это можно и попозже... :)
Go to Top of Page

NRM

Russia
9 Posts

Posted - 01/15/2007 :  13:01:06
quote:
Originally posted by zz 5


2Tumanov: Могу "сварганить" простенький примерчик аддона на Дельфи, который можно выложить на сайте с исходными текстами, чтобы облегчить путь ищущим. На крайний случай можно небольшую статью написать, где будет рассказываться не только написание аддона, но и рассматриваться его подключение в Visio. Как вам такая идея ?




Не знаю как другие а я зАААА:) очень нехватает примеров от которым можно было бы прыгать.
Go to Top of Page

NRM

Russia
9 Posts

Posted - 01/15/2007 :  13:07:50
quote:
Originally posted by Tumanov
C++ - это единственный язык, на котором можно написать vsl.
vsl отличается тем, что сочетает лучшие качества Add-On и Add-In. Он работает InProcess (как Add-In), значит все связи с Visio короткие и быстрые. Вызывается как Add-On (отовсюду). Может обрабатывать события, установленные по AddAdvise (как Add-In), то есть можно очень точно спозиционировать обработчики. В плане безопасности ближе к Add-In, то есть его можно выполнять на тех уровнях безопасности, когда exe Add-On уже запрещен.


Подскажите где можно найте хорошее опсисание что же такое add-in add-on и этот загадочный vsl сочетающий + обоих методов
Go to Top of Page
Previous Topic Topic Next Topic  
Next Page
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)