Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: Alex152 от 19.06.17, 13:48:31

Название: Перехват сообщений при открытии Спецификаций
Отправлено: Alex152 от 19.06.17, 13:48:31
Всем, добрый день!
Ситуация следующая, ниже приведенным кодом я открываю спецификацию, но при открытии периодически выходит запрос см. рисунок на какую либо спецификацию, как перехватит этот запрос? и автоматически на него ответить, к примеру - "нет".   
  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");
Название: Re: Перехват сообщений при открытии Спецификаций
Отправлено: Sabahs от 19.06.17, 14:02:20
Пробовать подписаться на события: ksSpecificationDescriptionNotify, ksSpecificationObjectNotify и смотреть какое отвечает за диалог.
Попробовать использовать свойство IApplication.HideMessage.
Название: Re: Перехват сообщений при открытии Спецификаций
Отправлено: maminagadost от 20.01.21, 07:47:12
Тоже столкнулся с этой проблемой. Правда у меня сообщение о старой версии файла и предложение преобразовать в новый формат.

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

Может есть у кого пример реализации такой программы?
Название: Re: Перехват сообщений при открытии Спецификаций
Отправлено: Sabahs от 20.01.21, 08:21:16
Смотрите в примерах SDK, там есть подписка на события.
Название: Re: Перехват сообщений при открытии Спецификаций
Отправлено: KrissKross от 20.01.21, 20:17:09
Похоже Вам надо установить одно из значений HideMessage
- Скрывать/показывать сообщения - находится свойство в классе IApplication -
Тип данных: константа из перечисления ksHideMessageEnum.
ЦитироватьksShowMessage      0   Показывать все сообщения и диалоги

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

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

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

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

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

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

НЕ ЗАБЫТЬ после работы программы вернуть состояние скрытия сообщений в первоначальное состояние
Название: Re: Перехват сообщений при открытии Спецификаций
Отправлено: maminagadost от 21.01.21, 08:00:25
Спасибо!  HideMessage зарешал мою проблему.