Imports cdrCore = Corel.Interop.VGCore 'ссылка на пространство имён
Imports cdrDraw = Corel.Interop.CorelDRAW 'ссылка на пространство имён
''' <summary>Делегат нажатий на пользовательские кнопки</summary>
Friend Delegate Sub CommandClick()
'
<System.AddIn.AddIn("MyCorelAddIn", Version:="1.0", Publisher:="anvg", Description:="Изучение Corel VSTA")> _
Partial Class Main
'''<summary>Название панели инструментов расширения</summary>
Const BarName As String = "MyNetCustomBar"
''' <summary>
''' Справочник идентификаторов команд расширения и связанных с ними методов
''' </summary>
Private Commands As System.Collections.Generic.Dictionary(Of String, CommandClick)
''' <summary>Ссылка на CorelDRAW</summary>
WithEvents CorelApp As Application
''' <summary>
''' Обработка события инициализация расширения
''' Создание панели расширения и пользовательских команд
''' </summary>
Private Sub Main_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
Dim pControl As cdrCore.CommandBarControl
Dim pBar As cdrCore.CommandBar
Dim sCommandID As String
CorelApp = CType(Me.Host, cdrDraw.Application)
pBar = CorelApp.FrameWork.CommandBars.Add(BarName, cdrCore.cuiBarPosition.cuiBarTop, True)
Commands = New System.Collections.Generic.Dictionary(Of String, CommandClick)
'==== добавление первой кнопки ====
'sCommandID = System.Guid.NewGuid.ToString() 'как в оригинале
sCommandID = My.Application.Info.AssemblyName & ".Button1"
If CorelApp.AddPluginCommand(sCommandID, "Button1", "Для вызова события кнопки 1 - нажмите") Then
pControl = pBar.Controls.AddCustomButton(cdrCore.UICategories.cdrCmdCategoryPlugins, sCommandID, 1, True)
Commands.Add(sCommandID, AddressOf Me.Button1_Click)
pControl.SetCustomIcon(System.IO.Path.Combine(My.Application.Info.DirectoryPath, "Icon.ico"))
End If
'==== добавление второй кнопки ====
'sCommandID = System.Guid.NewGuid.ToString() 'как в оригинале
sCommandID = My.Application.Info.AssemblyName & ".Button2"
If CorelApp.AddPluginCommand(sCommandID, "Button2", "Для вызова события кнопки 2 - нажмите") Then
pControl = pBar.Controls.AddCustomButton(cdrCore.UICategories.cdrCmdCategoryPlugins, sCommandID, 2, True)
pControl.SetCustomIcon(System.IO.Path.Combine(My.Application.Info.DirectoryPath, "Icon.ico"))
Commands.Add(sCommandID, AddressOf Me.Button2_Click)
End If
End Sub
#Region "Обработчики нажатий на кнопки"
Private Sub Button1_Click()
System.Windows.Forms.MessageBox.Show("Нажата кнопка 1", "Событие", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information)
End Sub
Private Sub Button2_Click()
System.Windows.Forms.MessageBox.Show("Нажата кнопка 2", "Событие", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information)
End Sub
#End Region
''' <summary>
''' Функция поиска панели по имени (для получения панели расширения),
''' нужна для того, чтобы не удалять уже удалённую в CorelDRAW панель.
''' </summary>
''' <param name="byName">Название панели</param>
Private Function FindCommandBar(ByVal byName As String) As Corel.Interop.VGCore.CommandBar
Dim Result As Corel.Interop.VGCore.CommandBar = Nothing
For Each pBar As cdrCore.CommandBar In CorelApp.FrameWork.CommandBars
If String.Compare(pBar.Name, byName, True) = 0 Then
Result = pBar : Exit For
End If
Next
Return Result
End Function
#Region "Обрабока событий CorelDRAW"
'''<summary>Обработка события нажатия на пользовательскую кнопку</summary>
Private Sub CorelApp_OnPluginCommand(ByVal CommandID As String) Handles CorelApp.OnPluginCommand
If Commands.ContainsKey(CommandID) Then Commands(CommandID).Invoke()
End Sub
''' <summary>
''' Проверка и установка состояния пользовательских команд
''' Вызывается постоянно, если команда(ы), учитывая условие,
''' расположена на видимой панели. Соответственно, может быть
''' использована для анализа и управления работы и доступа
''' кнопок пользовательских команд
''' </summary>
''' <param name="CommandID">идентификатор команды</param>
''' <param name="Enabled">установка/запрет выполнения команды</param>
''' <param name="Checked">нажата/ненажата кнопка команды</param>
Private Sub CorelApp_OnUpdatePluginCommand(ByVal CommandID As String, ByRef Enabled As Boolean, ByRef Checked As Corel.Interop.CorelDRAW.cdrCommandCheckState) Handles CorelApp.OnUpdatePluginCommand
If Commands.ContainsKey(CommandID) Then Enabled = True
End Sub
''' <summary>Обработка события выход из CorelDRAW - удаление панели расширения
''' и удаление зарегистрированных команд пользовательских кнопок
''' </summary>
Private Sub CorelApp_QueryQuit(ByRef Cancel As Boolean) Handles CorelApp.QueryQuit
Dim pBar As cdrCore.CommandBar = FindCommandBar(BarName)
If pBar IsNot Nothing Then pBar.Delete()
If Commands IsNot Nothing Then
For Each sCommandID As String In Commands.Keys
CorelApp.RemovePluginCommand(sCommandID)
Next
Commands.Clear()
End If
End Sub
#End Region
End Class