Тема: Импорт acad.tlb в Delphi7

Помогите решить такую проблему. В Delphi7 импортирую acad.tlb (AutoCAD2002), но почему-то TAcadApplication не появляется, арегистрируются только TAcadDatabase, TAcadDocument и TAcadLayerStateManager. Смотрел обсуждения по этому поводу и увидел что-то такое:

procedure Register;
begin
  RegisterComponents('ActiveX',[TAcadDatabase, TAcadApplication, TAcadDocument, TAcadLayerStateManager]);
end;

У меня это (в AutoCAD_TLB.pas) выглядит следущим образом:

procedure Register;
begin
  RegisterComponents(dtlServerPage, [TAcadDatabase, TAcadDocument, TAcadLayerStateManager]);
end;

Т.е. никакого TAcadApplication там нет. Что же делать.

Re: Импорт acad.tlb в Delphi7

Попроси у кого-нибудь Autocad_tlb.pas и сравни его со своим. Если хочешь программы писать то попроси AutoCAd.dcu и закинь этот файл в Program Files\Borland\Delphi\imports и получишь доступ к библиотеке. Это один выход из сложившийся ситуации.
Администратору: давайте выложим эти файлы у вас, чтобы люди могли пользоваться!

Re: Импорт acad.tlb в Delphi7

В последних билдах AutoCAD в библиотеку типов не включен класс TAcadApplication. Доступ к самому AutoCAD производится серез интерфейс IAcadApplication. Брать чужой Autocad_TLB.pas нет смысла, так как в нем будут описаны объекты, которых нет в твоем AutoCAD.
Надо просто правильно объявлять:

AcadApplication : IAcadApplication;

и присваивать

AcadApplication := GetActiveOleObject(AcadAppString) [b]as [/b]IAcadApplication;

В виде компонент с палитры ни сам AutoCAD, ни его семейство вообще не нужны. Разве что AcadDocument, для которого может понадобиться обработка событий. CodeInsight покажет их свойства и методы.

Re: Импорт acad.tlb в Delphi7

> ShaggyDoc
Спасибо большое. Буду пробовать. А то я как то удивился, что у кого-то есть TAcadApplication, у кого-то нет. Все же, как видно имеет объяснение.

Re: Импорт acad.tlb в Delphi7

Народ ..я сегодня почти пол дня лазяю по этому сайту в надежде найти тот самый AutoCAD_TLB.pas... мне очень нужно из моего приложения вводить команды в командную строку автокада...кто может киньте плиз...

Re: Импорт acad.tlb в Delphi7

> Павел
Здрасьте, говорили, говорили... Скинуть то можно, только что получится? Нужно "Project->Import Type Library".
AutoCAD, то я надеюсь установлен.

Re: Импорт acad.tlb в Delphi7

установлен конечно...дело в том что я делфи открывал последний раз наверно года 3 назад....естественно все забыл( вчера вспоминал как сохранить в текстовик из мемо текст) а про импорт библиотек и подавно...так что не судите строго...но хоетлось бы узнать что нить еще потом делать нужно бедт после этого действия или уже все автоматом пропишется?

Re: Импорт acad.tlb в Delphi7

> Павел
Нужно будет прописать AutoCAD_tlb в uses и тогда все автоматом пропишется, т.е. будут доступны свойства, методы и т.д.
Более подробно смотри в FAQ этой ветки.

Re: Импорт acad.tlb в Delphi7

Да что там в FAQ. Вот Shaggydoc здесь все и написал.

> ShaggyDoc

Re: Импорт acad.tlb в Delphi7

щас пока на работе - приеду домой сразу попробую....зараннее большое спасибо... кстати вообще у меня задача автоматичесого заполнения рамки в лэйауте акада. вот я написал прогу с выбором вариантов( ну менеджуер, дизайнер, клиент..и т.д.) по заверешению прога прописывает все выбранное в текстовик, а лисповская хрень должна по завершению дельфевской проги запустится и считать всю информацю заменяя существующие тексты автокада..но проблема стоит в том, что нужно это сделать одной кнопкой, а шел автокада не ждет его закртытия вот и хотел дописать в своей прге что бы она по заверешению писала команду в автокад. Может просто есть другие методы. Подскажите ради интереса

Re: Импорт acad.tlb в Delphi7

и еще по поводу импорта - у меня делфя 5..там не будет ни каких особенностей импрота?

Re: Импорт acad.tlb в Delphi7

НАРОД СПАСИБО БОЛЬШОЕ..ВСЕ РАБОТАЕТ...Я ДАЖЕ И НЕ ОЖИДАЛ ЧТО ВСЕ ТАК ПРОСТО...ЕЩЕ РАЗ СПАСИБО....И ОТДЕЛЬНОЕ СПАСИБО ОРГАНИЗАТАРАМ ЭТОГО САЙТА....ВОБЩЕМ ВОТ ТАКИЕ СПЛОШНЫЕ СПАСИБО )))))))

Re: Импорт acad.tlb в Delphi7

Самый простой способ избавиться даже от посыла в командную строку - это Windows Script Host. С его помощью можно запустить внешнее приложение и дождаться его завершения, а потом считать Lisp-программой информацию из созданного текстового файла. Так можно даже библиотеку типов не импортировать.
Вот пример:

(setq wsh (vlax-create-object "wscript.shell")); соединение с сервером сценариев Windows
(vlax-invoke-method wsh "Run" "Полное имя исполняемого файла приложения" 1 :vlax-true); запуск приложения и ожидание завершения работы
(vlax-release-object wsh); релизим сервер сценариев

Приложение в конце работы создает текстовый файл, а Lisp-прога его читает.
Здесь правда есть "кака". Если во время работы приложения щелкнуть в поле ACAD-а и что-нибудь повводить с клавиатуры, то AutoCAD все это запомнит и воспроизведет после. Нажав Enter - мы получим перезапуск приложения и т.д. Esc - и Lisp-прога прервет работу после закрытия окна внешнего приложения. С Esc можно бороться обработчиком ошибок или Lisp-прога должна работать в собственном пространстве имен - тогда она на Esc в данном случае вообще не реагирует.
Другой способ делать COM-сервер в DLL как описано в книге Н.Н. Полещука "AutoCAD2004 в подленнике. Разработка приложений и адаптация".
В общем вариантов масса, надо пробовать. Но что касается WSH, то на мой взгляд - это самый простой способ и в принципе даже неплохой.
Да и еще насчет твоего последнего поста - РАНО РАДУЕШЬСЯ.

Re: Импорт acad.tlb в Delphi7

да..ты был прав...не могу ни как заставить работать прогу с активным документом акада...все время создет новый..а если ставлю в свойствах acadDocument,  ConnectKind =  ckRuningInstance то прога выдает ошибку....((( что делать то?

Re: Импорт acad.tlb в Delphi7

> Павел
AcadDocument и проч. вообще не надо помещать на форму, т.к. они в сущности нужны для отслеживания событий, которые еще попробуй отследи.
Посмотри в FAQ. ShaggyDoc на эту тему все ясно написал.

Re: Импорт acad.tlb в Delphi7

> GRF

> Дмитрий Васильев
это классная идея.
Будет классно если кно нибудь его выложит!

Re: Импорт acad.tlb в Delphi7

> GRF
можно мне то же скинуть,буду очень блогадарен!

Re: Импорт acad.tlb в Delphi7

> oygan
Внимательно читай, что написано выше.

Re: Импорт acad.tlb в Delphi7

Народ, кто-нибудь поделитесь Autocad_tlb.pas, плиз... Скинте на мыло.

Re: Импорт acad.tlb в Delphi7

Проблема в том, что у меня Автокад 2005, и никакого TLB кроме библеотеки LISP'а там нет... ХЭЛП!!! Из какого файла дёргать эту хрень?

Re: Импорт acad.tlb в Delphi7

> dr.ZmeY
C:\Program Files\Common Files\Autodesk Shared\axdb16enu.tlb
Из него импорт в обычном для Delphi порядке.

Re: Импорт acad.tlb в Delphi7

> ShaggyDoc
Спасибо...

Re: Импорт acad.tlb в Delphi7

Люди, привет! Не подскажите, с какого боку подойти к компоненту TAcadDataBase? Заранее премного благодарен

Re: Импорт acad.tlb в Delphi7

Пишите всё на Borland C++, импорт библиотеки делается как и в Delphi, но компонент TAcadApplication, как и все остальные, доступен. Работа с ними аналогична работе в Delphi. Проверял на библиотеках от Autocad 2002-2006 всё работает без проблем.

Re: Импорт acad.tlb в Delphi7

Согласен с ShaggyDoc, c тем что к приложению можно и через интерфейс. Но как отследить например в этом случае с помощью TAcadDocument событие открытия или создания нового чертежа? Вообще это не очень серьезная проблема, но применяя TAcadApplication и TAcadDocument совместно, можно сэкономить код программы. Например, если возникает проблема быстродействия, то TAcadDocument можно временно дисконнектить(в ущерб событий, естественно), при этом TAcadApplication выступает в роли переключателя. Это актуально если работа идет с огромными чертежами (>100000 объектов), при включеном TAcadDocument, например, эти объекты удаляются до десяти раз медленее, приходится ждать несколько минут даже на Athlon 64 3000 c 512мб оп. Вот!