Delphi+Autocad.Обработчики события.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Delphi+Autocad.Обработчики события.

Delphi+Autocad.Обработчики события.

Ответ
Поиск в этой теме
Непрочитано 12.05.2010, 16:03 #1
Delphi+Autocad.Обработчики события.
dxaritonov
 
Регистрация: 23.04.2010
Сообщений: 7

Доброго времени суток. Заранее хочу извиниться за нубский вопрос.

Мне необходимо в программе, написанной на Delphi, перехватить событие из автокада. Связь делфи и автокада через COM-сервер.

Как я могу перехватить делфой событие в автокаде. В частности мне надо перехватить событие выделения примитива (полилинии).

Заранее благодарю
Просмотров: 5397
 
Непрочитано 12.05.2010, 18:50
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


AutoCAD 20XX Developer Help->ActiveX and VBA Reference->Events
В объектной модели (через COM) нет события выделения примитива - только через ObjectARX (т.е. только C++/C#/VB.NET внутри AutoCAD)
Если опишите задачу более подробно, то возможно найдется другой путь решения.

Последний раз редактировалось Александр Ривилис, 13.05.2010 в 08:50.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 17.05.2010, 14:52
#3
dxaritonov


 
Регистрация: 23.04.2010
Сообщений: 7


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
AutoCAD 20XX Developer Help->ActiveX and VBA Reference->Events
В справке описаны примеры для VBA. Мне же нужно события автокада (object-level или document-level) перехватить делфой

Например, если нет события выделения примитива, то можно можно ловить событие OnEndCommand с проверкой, что команда была "Select" (или "Выбрать", это уже дело техники), во встроенной в автокад среде VBA мне удалось перехватить это событие, а вот как это сделать в делфи я не знаю

Может быть, вы сможете мне подсказать, какую литературу для этого надо почитать?
И еще такой вопрос: можно ли перехватывать события поздним связыванием, т.е. без импорта tlb-файла?
dxaritonov вне форума  
 
Непрочитано 17.05.2010, 15:10
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от dxaritonov Посмотреть сообщение
то можно можно ловить событие OnEndCommand с проверкой, что команда была "Select" (или "Выбрать", это уже дело техники)
А еще куча команд AutoCAD'а позволяет выбирать примитивы (_COPY, _MOVE,...)

Цитата:
Сообщение от dxaritonov Посмотреть сообщение
а вот как это сделать в делфи я не знаю
Я тоже, т.к. на нем не пишу.

P.S.: Посмотри здесь (ну и рядом)

Последний раз редактировалось Александр Ривилис, 17.05.2010 в 15:29.
Александр Ривилис вне форума  
 
Непрочитано 17.05.2010, 15:43
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Терзают меня смутные сомнения что перехват событий это мякго говоря не есть предназначение com server'а. Я пока, даже, особо механизм себе не могу представить что должен делать com метод дабы "отреагировать" на событие - другому com'у что-то послать? com - он же "языконезависимый", а у каждого диалекта - свой метод обработки - реакторы, события, исключения и пр. Если только через определенный интервал какое-либо свойство сканировать на предмет вкл\выкл - но на сколько я знаю - если проверка нужна частая - то это мозго....ство, т.к. надо свободные дескрипторы освобождать, регулярно память подчищать - да и вообще стабильной работы (по крайней мере в "текущих" версиях винды) добиться вряд ли удастся. Так-что могу только предложить подумать о написании "обратного" вызова com сервера на дельфи в случае происхождения событий - благо Автокад свои реакторы обрабатывать умеет.
з.ы. про events я знаю - но это несколько из другой оперы - если событие не предусмотренно - кердык.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 17.05.2010 в 15:56.
Дима_ вне форума  
 
Непрочитано 17.05.2010, 16:03
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Терзают меня смутные сомнения что перехват событий это мякго говоря не есть предназначение com server'а. Я пока, даже, особо механизм себе не могу представить что должен делать com метод дабы "отреагировать" на событие - другому com'у что-то послать?
В данном случае COM-сервер - это AutoCAD. А событие он посылает "клиенту" (приложение на Delphi), который "подписался" на это событие. Внутри AutoCAD (ObjectARX или на крайний случай VisualLisp) сделать аналогичные вещи на порядок проще и надежней.
Александр Ривилис вне форума  
 
Непрочитано 17.05.2010, 16:12
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Я в общем про это и пишу.
Имелось в виду что если не предусмотрен events - перехватить/узнать о работе какого-либо метода - вещь весьма затруднительная (без поддержки из самого автокада).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2010, 14:10
#8
maximiliam


 
Регистрация: 13.01.2010
Сообщений: 7


может вам это чем-то поможет

http://delphivs.ucoz.ru/publ/autocad/sobytija/4-1-0-5
maximiliam вне форума  
 
Автор темы   Непрочитано 26.05.2010, 15:19
#9
dxaritonov


 
Регистрация: 23.04.2010
Сообщений: 7


Разобрался.
В общем, для тех, кому будет интересно:
1. Импортируем библиотеку типов автокада
2. Добавляем ссылку на импортированный модуль в разделе uses
3. Создаем переменную acadDoc: TAcadDocument;
4. Присваиваем ей ActiveDocument автокада
5. Привязываемся к событиям след. образом:
Код:
[Выделить все]
acadDoc.OnEndCommand := EndCommand;
Собсна все, если я непонятно описал, обращайтесь crucified@list.ru

Теперь прыгаем дальше, как избавиться от импорта библиотеки типов, чтобы можно было события любого автокада перехватывать?
Может есть умельцы? У меня пока засада
dxaritonov вне форума  
 
Непрочитано 26.05.2010, 19:27
#10
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Теперь прыгаем дальше, как избавиться от импорта библиотеки типов, чтобы можно было события любого автокада перехватывать?
Разумеется, в серьезных проектах не надо импортировать библиотеку типов и не надо кидать на форму никакие "компоненты". Надо использовать позднее связывание.

Для этого в run-time необходимо программно выяснять, к какому именно из возможно имеющихся Автокадов надо соединяться. Для этого, как минимум, знать имеющиеся acad.exe, анализировать реестр и находить строку соединения.

Как именно это делается - здесь не место разъяснять. Читаем книги по Delphi и книгу "САПР на базе AutoCAD - как это делается". Там всё есть.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Delphi+Autocad.Обработчики события.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связка SCAD и Delphi DEKJ Программирование 4 19.09.2008 20:17
AutoCad и Delphi. Добавление точки Зойберг Программирование 15 28.02.2008 23:18
Изменить имя сохраняемого файла в обработчике события сохранения Ax3 Программирование 2 25.12.2007 12:45
Литература по программированию на Delphi для AutoCAD Sokolru Программирование 6 30.03.2006 08:12
Delphi and AutoCAD John Ch. Программирование 4 31.01.2004 13:58