Перехват сообщений при открытии Спецификаций

Автор Alex152, 19.06.17, 13:48:31

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Alex152

Всем, добрый день!
Ситуация следующая, ниже приведенным кодом я открываю спецификацию, но при открытии периодически выходит запрос см. рисунок на какую либо спецификацию, как перехватит этот запрос? и автоматически на него ответить, к примеру - "нет".   
  KompasObject kompas;       
            try
            {
                kompas = (KompasObject)Marshal.GetActiveObject("KOMPAS.Application.5");
            }
            catch /*(Exception)*/
            {
                Type t = Type.GetTypeFromProgID("KOMPAS.Application.5");
                kompas = (KompasObject)Activator.CreateInstance(t);
            }
            ksSpcDocument Spc = (ksSpcDocument)kompas.SpcDocument();           
            if (!Spc.ksOpenDocument(FileName, 0))
            {
                MessageBox.Show("Ошибка открытия документа");
                return null;
            }
            ksSpecification pSpec = (ksSpecification)Spc.GetSpecification();
            ksIterator iter = (ksIterator)kompas.GetIterator();
            iter.ksCreateSpcIterator(null, 0, 2);
            ksSpcColumnParam spcColPar = (ksSpcColumnParam)kompas.GetParamStruct((short)StructType2DEnum.ko_SpcColumnParam);
            spcColPar.Init();
            int countSp = pSpec.ksGetSpcTableColumn("", 0, 0);
            kompas.ksExecuteKompasCommand(33900, false);
            int obj = iter.ksMoveIterator("F");

Пробовать подписаться на события: ksSpecificationDescriptionNotify, ksSpecificationObjectNotify и смотреть какое отвечает за диалог.
Попробовать использовать свойство IApplication.HideMessage.

maminagadost

Тоже столкнулся с этой проблемой. Правда у меня сообщение о старой версии файла и предложение преобразовать в новый формат.

А как подписываться на эти события? В асинхронной функции? Если у меня линейный скрипт, то выполнение останавливается пока не ответить на запрос из окна о преобразовании.

Может есть у кого пример реализации такой программы?

Смотрите в примерах SDK, там есть подписка на события.

KrissKross

Похоже Вам надо установить одно из значений HideMessage
- Скрывать/показывать сообщения - находится свойство в классе IApplication -
Тип данных: константа из перечисления ksHideMessageEnum.
ЦитироватьksShowMessage      0   Показывать все сообщения и диалоги

ksHideMessageYes   1   Скрывать сообщения и диалоги с выбором ОК или Да, если сообщение или диалог предусма­тривают такой выбор, с перестроением доку­мента.

ksHideMessageNo   2   Скрывать сообщения с ОК, если имеется толь­ко кнопка ОК, сообщения и диалоги с выбором Нет, если сообщение или диалог предусматри­вают такой выбор, без
                                   перестроения документа
Более подробное описание случаев срабатывания в справке по API

В вашем случае - при запросе на перестроение - Выбрать нужный алгоритм
Цитата из справки
ЦитироватьПримечание:

1. После использования флагов ksHideMessageYes или ksHideMessageNo в прикладной би­блиотеке необходимо предусматривать взведение флага ksShowMessage по завершении работы библиотеки или команды библиотеки. В противном случае сообщения останутся подавленными в визуальном режиме работы с системой КОМПАС.

2. Константа ksHideMessageYes позволяет выполнять перестроения документа, скрывая все запросы на перестроение.

3. Константа ksHideMessageNo позволяет не выполнять перестроения документа, скрывая все запросы на перестроение.

НЕ ЗАБЫТЬ после работы программы вернуть состояние скрытия сообщений в первоначальное состояние

maminagadost

Спасибо!  HideMessage зарешал мою проблему.