VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "Class1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = True ' step11 - Пример запроса командного окна Option Explicit Public iKompasObject As Kompas6API5.Application ' Интерфейс KompasObject Public doc As Kompas6API5.Document2D ' Интерфейс ksDocument2D ' Функция обратной связи ' 0 - плоскость, 1 - цилиндр, 2 - ось - состав collection Public Function CALLBACKPROCCOMMANDWINDOW(comm As Integer, rInfo As Object) As Integer iKompasObject.ksMessage "Выполняется команда : " & comm ' Заменяем заголовок окна в зависимости от выполненной команды ' аналогично можно заменить и состав дерева команд Dim info As Kompas6API5.RequestInfo ' Интерфейс ksRequestInfo Set info = rInfo ' Параметры запроса к системе If Not info Is Nothing Then info.Title = "Последняя выбранная команда : " & comm Set info = Nothing End If ' Возвращаемый результат определяет, должна ли система продолжать запрашивать команду : ' ( TRUE - продолжать, FALSE - завержить работу с окном ) If comm = 3 Then CALLBACKPROCCOMMANDWINDOW = False Else CALLBACKPROCCOMMANDWINDOW = True End If End Function ' Определить имя библиотеки Public Function GetLibraryName() As String GetLibraryName = "Пример запроса командного окна" ' Имя библиотеки End Function ' Головная функция библиотеки - вызывается при выборе пункта меню библиотеки ' Обращаемся к системе с запросом на создание окна с деревом команд. ' Если в качестве функции обратного вызова задан NULL, ' то управление из CommandWindow возвращается немедленно, ' как только пользователь выберет команду в дереве команд. ' Прт этом возвращается идентификатор выбранной команды. ' В противном случае управление вернется, если пользователь закроет окно ' или функция обратного вызова вернет FALSE, при этом возвращается -1. Public Sub ExternalRunCommand(ByVal command As Integer, ByVal mode As Integer, ByVal kompas_ As Kompas6API5.Application) Set iKompasObject = kompas_ ' Интерфейс приложения КОМПАС If iKompasObject Is Nothing Then ' Если интерфейс не задан - выходим Exit Sub ' и ничего не делаем End If Set doc = iKompasObject.ActiveDocument2D ' Возьмем интерфейс текущего 2D документа Dim info As Kompas6API5.RequestInfo ' Интерфейс ksRequestInfo ' Создать интерфейс параметров запроса к системе Set info = iKompasObject.GetParamStruct(ko_RequestInfo) ' Если нет текущего документа или интерфейс создать не удалось - выходим из процедуры If Not doc Is Nothing And Not info Is Nothing Then info.Init ' Инициализация интерфейса параметров запроса к системе info.menuId = 3000 'ID_TREE_CONTENTS ' Идентификатор меню с составом дерева команд info.Title = "Дерево команд" ' Заголовка окна команд info.SetCallBackCm "CALLBACKPROCCOMMANDWINDOW", 0, Me ' Функции обратного вызова Dim command1 As Integer command1 = doc.ksCommandWindow(info) ' Создание меню в диалоговом окне iKompasObject.ksMessage "Выбрана команда : " & command1 Set info = Nothing End If End Sub ' Сформировать меню библиотеки Public Function ExternalMenuItem(ByVal number As Integer, itemType As Integer, command As Integer) As String itemType = 3 '"ENDMENU"' ExternalMenuItem = "" command = -1 Select Case number Case 1 ' Команда 1 - Пример запроса командного окна itemType = 1 'MENUITEM' ExternalMenuItem = "Пример запроса командного окна" command = 1 Case 2 ' Завершение формирования меню itemType = 3 '"ENDMENU"' ExternalMenuItem = "" command = -1 End Select End Function