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

zz 5

Russia
54 Posts

Posted - 11/25/2006 :  14:34:59
Всем привет. Вопрос следующего характера. Работаю над созданием шаблона. Хочу реализовать следующее. Имеется шаблон BrainStorming Diagram. При создании документа на основе этого шаблона появляется новый пункт в главном меню и дополнительная панель. Хочу для своего шаблона сделать такую же. Итак, вопрос первый: где прописано создание меню, тулбара, обработка событий. Мне пока не удалось найти. В файле шаблона нету, значит, в другом месте. Где ?

И второй вопрос в догонку. Создал я шаблон, положил в папку. При создании нового докумета все "родные" шаблоны Визио открываются в соотвествующих категориях, а мой шаблон попал в категорию "Другие". Можно ли самому определить категорию шаблона ? Либо создать либо положить в уже имеющеюся ? Спасибо за внимание.

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

mers

Russia
159 Posts

Posted - 11/27/2006 :  09:53:40
Здравствуйте.
По поводу первого вопроса. Скачайте SDK, там этот вопрос освещается и прилагаются примеры кода.
http://www.microsoft.com/downloads/details.aspx?familyid=557120bd-b0bb-46e7-936a-b8539898d44d&displaylang=en
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 11/27/2006 :  21:33:24
Спасибо, в принципе все уже это видел. Самый главные вопрос, на который я так и не нашел вопроса заключается в другом. Ну, написал я макрос, который добавляет панель с кнопками, прописывает вызов кнопок. Но как сделать так, чтобы при создании документа на основе шаблона этот макрос автоматически запускался, т.е. при создании шаблона появлялся и тулбар. Аналогично и меню. В каком событии прописать вызов меню ? Ведь не вручную его запускать ? В brainstorm map меню и тулбар появляется сразу после создания шаблона, значит, где-то вызов макроса прописан. Но где ?

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

Tumanov

Russia
1198 Posts

Posted - 11/27/2006 :  23:18:10
А чем не нравятся обычные события DocumentCreated, DocumentOpened? Что мешает их использовать?
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 11/28/2006 :  10:46:03
Думаю, это как раз мне и нужно. Буду дальше рыть. Спасибо !

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

Edited by - zz 5 on 11/28/2006 10:46:21
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 11/29/2006 :  13:37:24
Вроде, все получается. При создании или открытии шаблона создаю допольнительные строчки в меню, см. код:
Public Sub AddMenuToMenuBar(vsoApplication As Visio.Application)
    Dim cbrCommandBars  As Office.CommandBars
    Dim cbrMenuBar      As Office.CommandBar
    Dim cbrMenuPopup    As Office.CommandBarPopup
    
    On Error GoTo AddMenuToMenuBar_Err

    Set cbrCommandBars = vsoApplication.CommandBars

    Set cbrMenuBar = cbrCommandBars.ActiveMenuBar

    Set cbrMenuPopup = cbrMenuBar.Controls.Add( _
        Type:=msoControlPopup, _
        Temporary:=True)
    cbrMenuPopup.Caption = "#207;#238;#241;#242;#237;#238;#242;#224;#246;#232;#255;"

    AddMenuItemToMenuBar cbrCommandBars, cbrMenuPopup
    
    Exit Sub
    
AddMenuToMenuBar_Err:
    If Not (vsoApplication Is Nothing) Then
        If (vsoApplication.AlertResponse = 0) Then
            MsgBox Err.Description
        Else
            Debug.Print Err.Description
        End If
    Else
        Debug.Print Err.Description
    End If
    
End Sub

Потом начинаю добавлять пункты меню:
Public Sub AddMenuItemToMenuBar( _
    cbrCommandBars As Office.CommandBars, _
    cbrMenuPopup As Office.CommandBarPopup)

' AddMenuItemToMenuBar
'
' Abstract - Adds a MenuItem called "My File Open...", to
' the Popup Menu that is passed in. This MenuItem, when
' clicked, will simulate the click on the File/Open...
' MenuItem
'
' Parameters
' cbrCommandBars   The CommandBars object for the application
' cbrMenuPopup     The Popup Menu to which a MenuItem is to be
'                  added

    Dim cbrFilePopup    As Office.CommandBar
    Dim cbbMenuItem     As Office.CommandBarButton
    Dim cbbOpen         As Office.CommandBarButton

    On Error GoTo AddMenuItemToMenuBar_Err
    
    ' Get the ID of the "File/Open..." MenuItem
    Set cbrFilePopup = cbrCommandBars.Item("File")
    Set cbbOpen = cbrFilePopup.Controls.Item(2)
    
    ' Add a MenuItem with the ID of "File/Open...".
    Set cbbMenuItem = cbrMenuPopup.Controls.Add( _
        Type:=msoControlButton, _
        ID:=cbbOpen.ID, Temporary:=True)
        
    ' Set the caption for the MenuItem.
    cbbMenuItem.Caption = "#192;#226;#242;#238;#237;#243;#236;#229;#240;#224;#246;#232;#255; #244;#232;#227;#243;#240;..."
    cbbMenuItem.Style = msoButtonCaption
    cbbMenuItem.Visible = True
    cbbMenuItem.OnAction = "ShowNum"


Теперь вопрос. Как корректно удалить созданное меню при закрытии документа. Событие я нашел, а вот с процедурой удаления меню нехорошо получается. Запись макроса дает такую строчку:
Application.CommandBars("Menu Bar").Controls(10).Delete


Не самый лучший способ, так как индекс (в данном случае он равен 10) может иметь и другое значение. Как отвязаться от этой постоянной ?

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

zz 5

Russia
54 Posts

Posted - 12/04/2006 :  15:11:09
Нашел ответ сам:
Sub DeleteMenu()
  Dim cbrCommandBars  As Office.CommandBars
    Dim cbrMenuBar      As Office.CommandBar
    Dim cbrMenuPopup    As Office.CommandBarPopup
    
    Dim cbrFilePopup    As Office.CommandBar
    Dim cbbMenuItem     As Office.CommandBarButton
    Dim cbbOpen         As Office.CommandBarButton
    
    
    ' Get the CommandBars collection from Visio.
    Set cbrCommandBars = Application.CommandBars
    
    ' Get the active menu bar from the CommandBars
    ' collection.
    Set cbrMenuBar = cbrCommandBars.ActiveMenuBar

    cbrMenuBar.Controls("#207;#238;#241;#242;#237;#238;#242;#224;#246;#232;#255;").Delete
End Sub


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

zz 5

Russia
54 Posts

Posted - 12/04/2006 :  15:13:22
Возникла другая проблема. Можно ли как-то программно определить, на основе какого шаблона создан файл ?

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

Tumanov

Russia
1198 Posts

Posted - 12/04/2006 :  21:38:26
На шаблон указывает свойство Document.Template
Go to Top of Page

zz 5

Russia
54 Posts

Posted - 12/04/2006 :  22:28:42
Спасибо, я это тоже уже нашел :)

------------------------------------------------------------------------------------------------
Если автор пишет о том, чего не понимает, его работа будет понята только теми читателями, которые понимают в этом больше, чем он !
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)