Текущий архив: 2004.06.13;
Скачать: CL | DM;
ВнизDelphi+Autocad Найти похожие ветки
← →
Вячеслав (2004-05-27 16:08) [0]Hellow All,
У меня возникла проблема как вызвать функцию делфийского приложения из Автокада. Собственно если есть какой нибудь примерчик типа создания простейшего COM сервера под Дефи и последующего вызова его объектов из Автокада просьба помочь. Может ссылку какую нибудь киньте.
Заранее благодарен.
← →
VMcL © (2004-05-27 16:16) [1]Delphi?\Demos\ActiveX\*.*
← →
ShaggyDoc (2004-05-28 06:40) [2]См. книгу Н.Полещука AutoCAD 2004. Разработка приложений (второй том из серии "В подлиннике". Там моя глава с примерами.
Скоро выйдет С.Зуев, Н.Полещук. "САПР на базе AutoCAD. Как это делается". Половина книги про ЭТО.
А в принципе ничего особенного нет. Пишешь COM-сервер, как обычно. Доступ к нему из Автокада возможен
а) из программы на VisualLisp
в) из VBA, всторенного в Автокад (бррр...)
Сложности бывают при передаче списков строк - из AutoCAD не доступен IStrings. Строки приходится передавать по одной, заполняя делфийские списки.
Пример вызова диалога DualList из RX
(defun ru-dlg-dual-list (dlg_caption left_caption right_caption left_list right_list / i left_count right_count s srv)
;; Проверка DualList
;|
Вариант с формированием списков добавлением по одной строке
(ru-dlg-dual-list "Двойной список" "Наши" "Геркулесовцы"
(list "Остап" "Балаганов" "Паниковский" "Козлевич")
(list "Полыхаев" "Берлага" "Корейко")
)
А здесь если с одной стороны пусто - там будет nil
(ru-dlg-dual-list "Двойной список" "Наши" "Геркулесовцы"
(list "Остап" "Балаганов" "Паниковский" "Козлевич")
nil
)
Можно передавать nil с одной стороны
|;
(if (setq srv (vlax-get-or-create-object "ruDualListSrv.ruCadDualLst"))
(progn
(vlax-invoke-method srv "Create")
(vlax-put-property srv "DlgCaption dlg_caption)
(vlax-put-property srv "LeftCaption left_caption)
(vlax-put-property srv "RightCaption right_caption)
(foreach s left_list (vlax-invoke-method srv "AddLeftString" s))
(foreach s right_list (vlax-invoke-method srv "AddRightString" s))
(vlax-invoke-method srv "Execute")
;;Это вариант с чтением построчно
(setq left_count
(vlax-get-property srv "LeftListCount)
left_list "()
i 0
) ;_ end of setq
(repeat left_count
(setq s "")
(vlax-invoke-method srv "GetLeftString" i "s)
(setq left_list (cons s left_list)
i (1+ i)
) ;_ end of setq
) ;_ end of repeat
(setq left_list (reverse left_list)
right_list "()
i 0
right_count (vlax-get-property srv "RightListCount)
) ;_ end of setq
(repeat right_count
(setq s "")
(vlax-invoke-method srv "GetRightString" i "s)
(setq right_list
(cons s right_list)
i (1+ i)
) ;_ end of setq
) ;_ end of repeat
(setq right_list (reverse right_list))
(vlax-invoke-method srv "Free") ;_ end of vlax-invoke-method
) ;_ end of progn
(alert "Не удалось запустить DualList")
) ;_ end of if
(list left_list right_list)
) ;_ end of defun
Страницы: 1 вся ветка
Текущий архив: 2004.06.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.036 c