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

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

Кнопка на запуск макроса с вызовом .dvb

Ответ
Поиск в этой теме
Непрочитано 26.02.2018, 15:33
Кнопка на запуск макроса с вызовом .dvb
sergey12
 
Регистрация: 29.08.2009
Сообщений: 86

Нашел как на кнопку повесит команду на запуск команды из лиспа, если лисп не загружен. Например, "^C^C(if (null UNF-MText)(load "change text styles (cts) 1.9.LSP"));UNF-MText;"

А какую команду надо записать на кнопку, чтоб запустить макрос из проекта, чтоб сперва запустился проект, а потом макрос обратился к этому проекту.
Например, пишу: "^C^C(if (null _-vbarun Other.Quick_calc_select)(_-vbaload "Project.dvb"));_-vbarun Other.Quick_calc_select;". Пишет ошибка: слишком много аргументов.

Команду "^C^C_-vbarun Project.dvb!Other.Quick_calc_select" не предлагать. При запуске данной команды, диалоговое окно макроса висит где-то сбоку и большое не настроенное по габаритам, видимо, с размерами по умолчанию. Если же я сперва загружу файл "Project.dvb" через "загрузка/выгрузка приложений", и потом выполню "_-vbarun Project.dvb!Other.Quick_calc_select", то диалоговое окно нормально открывается (с нужными размерами и в нужном месте).
Просмотров: 10848
 
Автор темы   Непрочитано 28.02.2018, 08:52
#21
sergey12


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


Ещё замечено: если выполню команду "^C^C_-vbarun Project.dvb!Other.Quick_calc_select", окно Project'а откроется где-то слева и большим. Закрою это окно. потом опять выполню эту же команду, и оно откроется там, где нужно было и с нужными размерами (т.к. Project.dvb уже висит в памяти и используются нужные настройки, как и написано в справке по ACAD'у).

Вот лог ошибки при выполнении команды "^C^C(if (null _-vbarun Other.Quick_calc_select)(_-vbaload "Project.dvb"));_-vbarun Other.Quick_calc_select;"

Код:
[Выделить все]
Команда: (if (null _-vbarun Other.Quick_calc_mat_select)(_-vbaload "Project.dvb"))
слишком много аргументов
Команда: _-vbarun
Имя макроса: Other.Quick_calc_mat_select
Ошибка при выполнении
Распаролить, реестр - это всё конечно интересно, но как всё-таки из данного положения: выполнить загрузку проекта VBA и выполнить макрос, и всё на одной кнопке?
sergey12 вне форума  
 
Непрочитано 28.02.2018, 09:26
#22
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
(if (null _-vbarun Other.Quick_calc_mat_select)(_-vbaload "Project.dvb"))
слишком много аргументов
1. разделителем в условиях является пробел и он же стоит после команды vbarun - вот и много аргументов.

2. (null _-vbarun Other.Quick_calc_mat_select)
Два значения которые Вы сравниваете вижу, а как Вы их сравниваете нет, вроде бы выражение в скобках должно вернуть истина или нет, а что вернется в Вашем случае не понятно
3. null ... вроде бы nil в лиспе

ЗЫ
Я Лисп вообще не знаю

Последний раз редактировалось Boxa, 28.02.2018 в 09:36.
Boxa на форуме  
 
Автор темы   Непрочитано 28.02.2018, 09:37
#23
sergey12


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
почему null , что то я не встречал такого логического оператора
разделителем в условиях является пробел и он же стоит после команды vbarun - вот и много аргументов.
Ответ ACAD'а: no function definition nil.

Пробелы нужны. Иначе пишет: : no function definition null_-vbarun.
Либо
: no function definition null_-vbarunOther.
sergey12 вне форума  
 
Непрочитано 28.02.2018, 09:48
#24
Кулик Алексей aka kpblc
Moderator

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


sergey12, мне кажется, тебе лучше сначала проверять словарь "ACAD_VBA" на предмет загруженности приложения. Если его нет, то загружать и потом уже выполнять.
P.S. Сам VBA под ACAD не пользуюсь, так что реального кода не дам - не смогу его проверить.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.02.2018, 09:55
#25
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Код:
[Выделить все]
 (if (null tfstd)
  (load "tfstd" "\nTFSTD.LSP was not found in any of the paths.")
)
(tfstd)
а нет, вот встретил такую конструкцию в справке
Попробуйте _-vbarun Other.Quick_calc_mat_select в скобки или в командный метод завернуть
Boxa на форуме  
 
Автор темы   Непрочитано 28.02.2018, 10:12
#26
sergey12


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


В интернете встретил такой код с загрузкой лиспа при необходимости.
"^C^C(if (null UNF-MText)(load "change text styles (cts) 1.9.LSP"));UNF-MText;"

И решил сделать тоже самое на загрузку VBA с макросом, от этого кода отталкивался.

----- добавлено через ~12 мин. -----
Цитата:
Сообщение от Boxa Посмотреть сообщение
Попробуйте _-vbarun Other.Quick_calc_mat_select в скобки или в командный метод завернуть
Завернул в скобки. Ошибка.
: no function definition : -vbarun
sergey12 вне форума  
 
Непрочитано 28.02.2018, 11:50
1 | #27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


зачем лезть в автоматизацию, если даже поиском по форуму не хотите пользоваться?
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.02.2018, 11:59
#28
sergey12


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
зачем лезть в автоматизацию, если даже поиском по форуму не хотите пользоваться?
В приведенной ссылке запуск через Лисп.
А хотелось бы через команды в кнопке с автозагрузкой, как ^C^C(if (null UNF-MText)(load "change text styles (cts) 1.9.LSP"));UNF-MText;.


Потому и создал новую тему. Чтоб помогли, что я в синтаксисе напутал.


Offtop: Про запуск через Лисп уже подумывал..
sergey12 вне форума  
 
Непрочитано 28.02.2018, 12:07
#29
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


из-за мифической экономии памяти не хотите держать макрос в автозагрузке, лисп размером в пару сотен байт рядом с проектом vba размером в 1000 раз больше вас тоже не устраивает.. Просто реально, сколько времени потратите - чтобы "красиво" вызывалось с одной кнопки, и без всякой гарантии работы...
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.02.2018, 20:59
#30
sergey12


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


Ну, больше- не больше, хотелось бы уж просто разобраться, чё vba не подгружается с кнопки. Я не спец в кодах, интересуюсь, я только учусь.
sergey12 вне форума  
 
Непрочитано 28.02.2018, 22:30
1 | #31
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Почему не подгружается? Оно стартует, просто что-то не успевает полностью инициализироваться к показу окна формы калькулятора:
Цитата:
Сообщение от sergey12 Посмотреть сообщение
Из автозагрузки приложений Autocad'а убрал программу Project.dvb. Через кнопку запускаю макрос "^C^C_-vbarun Project.dvb!Other.Quick_calc_select". Окно открывается сбоку и больших габаритов.
И поэтому надо добавлять костыли в самом проекте в виде принудительного сохранения и восстановления положения окна, о чем тут написали уже несколько человек. А не играть в игру: кто-кого опередит при загрузке - это очень плохой стиль программирования.
Сергей812 вне форума  
 
Непрочитано 01.03.2018, 17:38
#32
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


У меня получилось загрузить VBA и команду запустить. Попробовал сделать условие, но долго не мучил. Да и зачем мучить. При повторной загрузке VBA, программа сразу говорит что данное VBA уже загружено и отменяет повторную загрузку, переходя к следующей команде. В итоге все получилось очень даже удобно. Воспользовался следующей командой:
^C^C( command "vbaload" "D:\\vba.dvb");^C^C( command "vbarun" "imya_command").
veb86 вне форума  
 
Автор темы   Непрочитано 02.03.2018, 07:22
#33
sergey12


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


Цитата:
Сообщение от veb86 Посмотреть сообщение
У меня получилось загрузить VBA и команду запустить. Попробовал сделать условие, но долго не мучил. Да и зачем мучить. При повторной загрузке VBA, программа сразу говорит что данное VBA уже загружено и отменяет повторную загрузку, переходя к следующей команде. В итоге все получилось очень даже удобно. Воспользовался следующей командой:
^C^C( command "vbaload" "D:\\vba.dvb");^C^C( command "vbarun" "imya_command").
При повторном вызове данной команды выскакивает диалоговое окно, что VBA загружен, надимаю ОК, далее срабатывает макрос; что не очень удобно. Сюда бы включить проверку , что загружен ли VBA. А вот как?..
sergey12 вне форума  
 
Непрочитано 02.03.2018, 07:45
#34
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от sergey12 Посмотреть сообщение
А вот как?..
#24 ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.03.2018, 15:54
1 | #35
sergey12


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


Долгим чтением форумов и Help'ов с описанием и значением команд нашёл:

^C^C(vl-vbaload (findfile "Project.dvb"));-vbarun Other.Quick_calc_mat_select



А если надо будет выгрузить VBA, всегда можно будет добавить vbaunload..
sergey12 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Кнопка на запуск макроса с вызовом .dvb

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопка "смещение объектов" не активна, когда выделяю грани детали RaaV SolidWorks 0 09.02.2018 11:53
Предвыбор слоя для кнопки СПДС путем изменения макроса самой кнопки dextron3 Программирование 3 27.09.2017 21:29
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
перестала работать кнопка выполнения макроса LAmyk AutoCAD 6 26.09.2014 12:56
запуск макроса с панели инструмента в Bricscad ArtemYa Программирование 1 22.01.2010 18:43