|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Delphi+Autocad.Обработчики события.
Регистрация: 23.04.2010
Сообщений: 7
|
||
Просмотров: 5398
|
|
||||
AutoCAD 20XX Developer Help->ActiveX and VBA Reference->Events
В объектной модели (через COM) нет события выделения примитива - только через ObjectARX (т.е. только C++/C#/VB.NET внутри AutoCAD) Если опишите задачу более подробно, то возможно найдется другой путь решения. Последний раз редактировалось Александр Ривилис, 13.05.2010 в 08:50. |
||||
![]() |
|
||||
Регистрация: 23.04.2010
Сообщений: 7
|
Цитата:
Например, если нет события выделения примитива, то можно можно ловить событие OnEndCommand с проверкой, что команда была "Select" (или "Выбрать", это уже дело техники), во встроенной в автокад среде VBA мне удалось перехватить это событие, а вот как это сделать в делфи я не знаю ![]() Может быть, вы сможете мне подсказать, какую литературу для этого надо почитать? И еще такой вопрос: можно ли перехватывать события поздним связыванием, т.е. без импорта tlb-файла? |
|||
![]() |
|
||||
Цитата:
Я тоже, т.к. на нем не пишу. P.S.: Посмотри здесь (ну и рядом) Последний раз редактировалось Александр Ривилис, 17.05.2010 в 15:29. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Терзают меня смутные сомнения что перехват событий это мякго говоря не есть предназначение com server'а. Я пока, даже, особо механизм себе не могу представить что должен делать com метод дабы "отреагировать" на событие - другому com'у что-то послать? com - он же "языконезависимый", а у каждого диалекта - свой метод обработки - реакторы, события, исключения и пр. Если только через определенный интервал какое-либо свойство сканировать на предмет вкл\выкл - но на сколько я знаю - если проверка нужна частая - то это мозго....ство, т.к. надо свободные дескрипторы освобождать, регулярно память подчищать - да и вообще стабильной работы (по крайней мере в "текущих" версиях винды) добиться вряд ли удастся. Так-что могу только предложить подумать о написании "обратного" вызова com сервера на дельфи в случае происхождения событий - благо Автокад свои реакторы обрабатывать умеет.
з.ы. про events я знаю - но это несколько из другой оперы - если событие не предусмотренно - кердык.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 17.05.2010 в 15:56. |
|||
![]() |
|
||||
В данном случае COM-сервер - это AutoCAD. А событие он посылает "клиенту" (приложение на Delphi), который "подписался" на это событие. Внутри AutoCAD (ObjectARX или на крайний случай VisualLisp) сделать аналогичные вещи на порядок проще и надежней.
|
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я в общем про это и пишу.
Имелось в виду что если не предусмотрен events - перехватить/узнать о работе какого-либо метода - вещь весьма затруднительная (без поддержки из самого автокада).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 13.01.2010
Сообщений: 7
|
|
|||
![]() |
|
||||
Регистрация: 23.04.2010
Сообщений: 7
|
Разобрался.
В общем, для тех, кому будет интересно: 1. Импортируем библиотеку типов автокада 2. Добавляем ссылку на импортированный модуль в разделе uses 3. Создаем переменную acadDoc: TAcadDocument; 4. Присваиваем ей ActiveDocument автокада 5. Привязываемся к событиям след. образом: Код:
Теперь прыгаем дальше, как избавиться от импорта библиотеки типов, чтобы можно было события любого автокада перехватывать? ![]() Может есть умельцы? У меня пока засада |
|||
![]() |
|
||||
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 - как это делается". Там всё есть. |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Связка 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 |