• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

API КОМПАС v.14 Delphi Блокировка Всплывающих окон

Автор Homer, 31.01.15, 23:44:36

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

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

Homer

ПО: КОМПАС-3D V14
API: Kompas.Application.5
Среда разработки: Delphi 7

Задача:
Автоматизировать процесс считывания Основной надписи из чертежей

Предисловие:
Подключение к API компаса и чтение основной надписи для чертежа работает

Проблема:
Если в чертеже есть ссылка на Файл Модели а самого файла нет, Компас в своей среде выдает Всплывающее окно с текстом

'Не найден файл модели'
Имя файла: C:\.....\Лицевая панель.m3d [пример]
и 4 кнопки для принятия решения
Заменить, Игнорировать, Отказ от чтения, Справка

и ждет реакции пользователя при этом не отдает управление обратно в прил. delphi

Т.к. приложение должно работать без участия пользователя подобные Всплывающие окна необходимо игнорировать или принимать решение автоматически.

Есть ли возможность использования API Компаса в режиме silent mode или какой нибудь способ блокировки Всплывающих окон.

PS
Кусок кода на котором происходит проблема:
..
  isOpened := Document2D.ksOpenDocument(filePath, false);
..

PS

Попробуйте открывать документ в "слепом" режиме:
isOpened := Document2D.ksOpenDocument(filePath, 1 );
если не поможет, тогда нужно перед открытием документа проверить наличие файла функциями API Windows и открывать только в том случае если файл есть.

Используйте свойство IApplication::HideMessage, только после использования верните его в первоначальное положение.

Homer

#3
Насколько я понял это свойство доступно в API версии 7, нет ли подобного аналога для API 5, к сожалению проект существует уже некоторое время и переводить его на новую API потребует очень много усилий и времени.

Инициализация библиотеки происходит след. образом:

        KompasObj := KompasObject(CreateOleObject('Kompas.Application.5'));
        KompasObj.Visible := Not silentMode;

PS
  isOpened := Document2D.ksOpenDocument(filePath, 1 ); - к сожалению никак не повлияло на отображение всплывающих окон.

Решил попробовать так, но получил Access violation:

function TForm1.OpenFile(FilePath: String): Boolean;
var
  isOpened : WordBool;
  app7 : IApplication;
begin
  Document2D := ksDocument2D(KompasObj.Document2D);

  app7 := IApplication(KompasObj.ksGetApplication7);   <-------- Видимо тут неправильно инициализирую 7 api объект
  app7.HideMessage := ksHideMessageYes;                 <-------- Access violation!

  isOpened := Document2D.ksOpenDocument(filePath, false);

  app7.HideMessage := ksHideMessageNo;
  ...

Получить API5
KompasObj := KompasObject(CreateOleObject('Kompas.Application.5'));
далее у активного Компаса получить API7
KompasApi:=GetActiveOleObject('Kompas.Application.7') as IApplication;
+ Благодарностей: 1

Homer

Спасибо большое, помогло. Вы сделали мой день! )