Кто нибудь использует VSTA (VB/C#) в Х5?

  • Автор темы Автор темы Sanchos
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Sanchos

Sancho
Топикстартер
15 лет на форуме
Сообщения
806
Реакции
158
Кто ни будь использует VSTA (VB/C#) в Х5 ?
Планируете ли переходить?
Вообще знаете что это такое?
 
Ответ: Кто ни будь использует VSTA (VB/C#) в Х5 ?

Это в смысле они в X5 VSTA интегрировали?
 
Ответ: Кто ни будь использует VSTA (VB/C#) в Х5 ?

Ну да, в Х5 был и есть VSTA
 
Ответ: Кто ни будь использует VSTA (VB/C#) в Х5 ?

Предлагаю шаблон для работы с Corel VSTA в Visual Basic.NET. Написано по мотивам forum.oberonplace.com/archive/index.php?t-6985.html
Спасибо helpy
Код:
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
В качестве изображения на кнопке у меня получилось использовать bmp и ico (пробовал ещё gif и png). К сожалению прозрачность в ico Corel не поддеживает.
 
  • Спасибо
Реакции: Erchizo
Ответ: Кто ни будь использует VSTA (VB/C#) в Х5 ?

Есть небольшой глюк. При смене видимости панели пропадают кнопки на ней. Чтобы это исключить нужно заменить True на False в параметрах методов создания панели и кнопок (именованный параметр Temporary)
 
Статус
Закрыто для дальнейших ответов.