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

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

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

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

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

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

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

Проверить, открыт ли документ (пример)

Автор themaster, 27.06.14, 08:25:29

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

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

themaster

Может кто-нибудь дать ссылку на пример программы, которая работает с уже открытыми 2D-чертежами? Получить указатели, переключаться между ними и так далее? Желательно в Delphi.
Собственно, у меня есть полное имя файла (с путём к нему), и мне нужно понять, открыт ли этот файл в Компасе? Если открыт - можно поработать с ним и оставить в покое, а если нет - открыть, поработать и закрыть.
Текущая версия моей программы пытается открыть файл и это обычно занимает ощутимое время.
Если он открыт - программа очень быстро переключается в него и работает с ним. А потом - закрывает, что для пользователя может быть неприятным сюрпризом :-(

27.06.14, 09:07:31 #1 Последнее редактирование: 27.06.14, 10:32:24 от Sabahs
Интерфейс IDocuments - коллекция документов, открытых в приложении КОМПАС-3D.
var
Disp:IDispatch;
pApplication:IApplication;
pDocuments:IDocuments;
pDocument:IDocument;
begin
   Disp:=IDispatch(CreateKompasApplication);
   pApplication:=Disp as IApplication;
   pDocuments:=pApplication as IDocuments;
   pDocument:=pDocuments.Item[PathName];
end; 
Если pDocument<>nil, значит документ открыт и у Вас есть его указатель, дальше делаете с ним, что угодно.
+ Благодарностей: 1

themaster

У меня программа написана на API интерфейсов версии 5. Я там и Компас открываю, и получаю всякие ksDocument2D и так далее. Приведённый пример можно использовать без изменений или всё-таки следует переписать программу на API версии 7?

27.06.14, 10:17:08 #3 Последнее редактирование: 27.06.14, 10:29:23 от Sabahs
У Вас программа или библиотека?
Хотя можно использовать оба интерфейса, придётся пользоваться функцией ksTransferInterface - преобразовать интерфейсный объект одного типа API в интерфейсный объект API другого типа.

themaster

Я пишу программу на Delphi, пользуясь в качестве образца книгой Норисеева. А там - всё на API 5. Открываю Компас, получаю объект ksDocument2D, дальше ksOpenDocument( fn, false ) и так далее. То есть, мне следует взять свой ksDocument2D, преобразовать его методом ksTransferInterface в куда-то... кстати, куда? В нашей организации основная версия компаса - восьмая, такое ощущение, что там этого нет. Есть ещё сколько-то лицензий на 10 и 13 версии, там он появился?

Я бы делал dll, библиотекой.
Я уже забыл, когда 8 Компас в живую видел.
Какие интерфейсы есть, можно посмотреть в справке, в разделе "Новые возможности в API по сравнению с предыдущими версиями КОМПАС".