Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Неясность при запуске VBA из LISP

Неясность при запуске VBA из LISP

Ответ
Поиск в этой теме
Непрочитано 06.02.2007, 13:13 #1
Неясность при запуске VBA из LISP
den001
 
Инженер по автоматизации (строительство)
 
Люберцы
Регистрация: 05.05.2006
Сообщений: 241

Здравствуйте, дорогие!
Решил тут извратиться и для запуска VBA-макроса создал одноименную LISP-комадну, есть у этого пути ряд преимуществ.
Вот в таком виде:
Код:
[Выделить все]
(defun c:NameMacros ()
  (command "vbarun" "NameMacros")
  (princ)
)
Все бы хорошо, НО:

при запуске макросов, где есть запрос на ввод ключевого слова, числа или еще чего-нить, он (запрос) при первом обращении отображается два раза. Оно, конечно, не смертельно, но как-то некрасиво. В LISP'е я, звиняйте, ни бум-бум, объясните, откуда берется такая неприятность?
Просмотров: 2059
 
Непрочитано 06.02.2007, 15:46
#2
Maxim T


 
Регистрация: 20.07.2004
Ростов-на-Дону
Сообщений: 14


Попробуйте системную переменную CMDECHO установить в 0. При вызове из меню этой цели служит "^P" (временно подавляет эхо-вывод команды).
Maxim T вне форума  
 
Автор темы   Непрочитано 06.02.2007, 16:52
#3
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Maxim T
Спасибо за участие.

Проблема решается, если команду оформить таким манером:
Код:
[Выделить все]
(defun c:NameMacros ()
  (vla-runmacro (vlax-get-acad-object) "NameMacros")
  (princ)
)
Правда, почему первый вариант дает такой результат, все же интересно...
den001 вне форума  
 
Автор темы   Непрочитано 07.02.2007, 21:31
#4
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Эгеэээй! Людиии! Ну помогите же лаптю!
Откуда берется такое явление?

Кстати,
если запускать, как
Код:
[Выделить все]
(vla-runmacro (vlax-get-acad-object) "NameMacros")
, то появляется возможность работать с предварительно выбранными объектами, но пропадает возможность работать с несколькими чертежами, а если запускать как
Код:
[Выделить все]
(command "vbarun" "NameMacros")
, то предварительный выбор (PickFirstSelectionSet) сбрасывается, и появляется вышеописанная беда. Первый запрос в коде, типа:
Код:
[Выделить все]
ThisDrawing.Utility.GetEntity Entry, basepnt, Chr(10) + "Выберите объект или [ПРиращение/Масштаб/Точность/Задать файл/" + kwd2 + kstr + "]: "
или
Код:
[Выделить все]
Scl = ThisDrawing.Utility.GetReal(Chr(10) + "Коэффициент сжатия <" + SclPrompt + ">: ")
вываливается два раза подряд.
В чем может быть дело?
den001 вне форума  
 
Непрочитано 08.02.2007, 08:49
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Я не спец по VBA, поэтому воспользуюсь принципом лягушки. Спробуй в лиспе такую конструкцию:
Код:
[Выделить все]
(command "_.-vbarun" "NameMacros")
(while (/= (logand (getvar "cmdactive") 31) 0)
(command pause))
либо
Код:
[Выделить все]
(vla-runmacro (vlax-get-acad-object) "NameMacros")
(while (/= (logand (getvar "cmdactive") 31) 0)
(command pause))
Может, и сработает. Но не факт. Передача наборов и параметров lisp<->VBA достаточно хреново сделана (ИМХО).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2007, 11:45
#6
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Спасибо тебе, о великий и мудрый Крыс!
Работает. В общем, я понял, command передает в VBA еще какой-то параметр, причем, похоже, пустой, и при первом запросе на ввод он воспринимается, как введенный, а так, как не удовлетворяет условиям ввода, то запрос повторяется.
den001 вне форума  
 
Непрочитано 08.02.2007, 11:49
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Чего, неужели заработало? Для полноты эксперимента попробуй использвать не (command), а (vl-cmdf) - вдруг еще более интересно получится? Все равно уже хуже не будет...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.02.2007, 11:57
#8
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Разницы между command и vl-cmdf не ощутил совсем. Все то же.
Эх, надо садиться за изучение Lisp'a...
den001 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Неясность при запуске VBA из LISP

Размещение рекламы