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

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

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

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

Нашел как на кнопку повесит команду на запуск команды из лиспа, если лисп не загружен. Например, "^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", то диалоговое окно нормально открывается (с нужными размерами и в нужном месте).
Просмотров: 11729
 
Непрочитано 26.02.2018, 16:09
#2
Сергей812


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


автозагрузка проекта VBA?
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.02.2018, 15:18
#3
sergey12


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
автозагрузка проекта VBA?
Вроде проект VBA. Этот .dvb взял на просторах интернета.
sergey12 вне форума  
 
Непрочитано 27.02.2018, 15:41
#4
Сергей812


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


имел в виду, что запихнуть проект vba в автозагрузку акада) Правда, при этом могут быть побочные эффекты в виде снижения производительности.
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.02.2018, 15:48
#5
sergey12


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
имел в виду, что запихнуть проект vba в автозагрузку акада) Правда, при этом могут быть побочные эффекты в виде снижения производительности.
Изначально так и делал. Проект VBA был в автозагрузке Аcad, в нем пара специфических калькуляторов. Чтоб не грузить память, решил загружать этот проект через кнопку, и тут появилась загвоздка..
sergey12 вне форума  
 
Непрочитано 27.02.2018, 15:59
#6
Boxa

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


Как я понял, Вам не нравиться что настойки окна не сохраняются между сеансами автокада, однако я не понимаю, что Вам запрещает сохранять и загружать эти настройки... не понял я в чем проблема... код для кнопки вы и так привели... Странный топик.

Offtop: Практически всегда, при использовании VBA появляются проблемы и два возможных решения:
1. Смириться
2. Не использовать VBA
Boxa вне форума  
 
Непрочитано 27.02.2018, 16:12
#7
Сергей812


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


кстати, интересный вопрос - сколько выжирает среда исполнения VBA при загрузке проекта VBA - сомневаюсь, что экономия на памяти настолько существенна.
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.02.2018, 20:35
#8
sergey12


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Как я понял, Вам не нравиться что настойки окна не сохраняются между сеансами автокада, однако я не понимаю, что Вам запрещает сохранять и загружать эти настройки... не понял я в чем проблема... код для кнопки вы и так привели... Странный топик.

Offtop: Практически всегда, при использовании VBA появляются проблемы и два возможных решения:
1. Смириться
2. Не использовать VBA
Да, не нравится, что окно непонятно где выскакивает.
Поясню проблему. Offtop: Извините за мой немецкий, мож не совсем точно выразился ранее.

Ситуация #1.
В автозагрузке приложений Autocad'а стоит программа Project.dvb. Запускаю AutoCAD. Через кнопку запускаю макрос "^C^C_-vbarun Other.Quick_calc_select". Запускается спец_калькулятор в нужном месте с нужными настройками.

Ситуация #2.
Из автозагрузки приложений Autocad'а убрал программу Project.dvb. Через кнопку запускаю макрос "^C^C_-vbarun Project.dvb!Other.Quick_calc_select". Окно открывается сбоку и больших габаритов.

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

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
кстати, интересный вопрос - сколько выжирает среда исполнения VBA при загрузке проекта VBA - сомневаюсь, что экономия на памяти настолько существенна.
По сравнению с ACAD'ом, конечно, малó. Но как-то некошерно загружать то, что щас не используется.
sergey12 вне форума  
 
Непрочитано 27.02.2018, 20:56
#9
Сергей812


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


Цитата:
Сообщение от sergey12 Посмотреть сообщение
Но как-то некошерно загружать то, что щас не используется.
ну уж что-нибудь одно - либо интерфейс, либо эстетика)

Цитата:
Сообщение от sergey12 Посмотреть сообщение
Ибо команда "^C^C(if (null _-vbarun Other.Quick_calc_select)(_-vbaload "Project.dvb"));_-vbarun Other.Quick_calc_select;", пишет ошибку: слишком много аргументов. И далее пишет: "vbarun Other.Quick_calc_select" - не найден макрос.
а если запускать через посредника-лиспа?
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.02.2018, 21:01
#10
sergey12


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение


а если запускать через посредника-лиспа?
В лиспе я профан. Не подскажите код?
sergey12 вне форума  
 
Непрочитано 27.02.2018, 21:06
#11
Кулик Алексей aka kpblc
Moderator

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


Я бы поменял код, и сохранял в реестре положение и размеры окна. А при вызове диалога восстанавливал бы.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.02.2018, 21:12
#12
Сергей812


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


я не лисповец) в Net Api таких проблем нет обычно)

если разбираетесь в VBA, попробуйте сохранять координаты окна: left, top, width & height во внешнем текстовом файле, и потом при старте считывать оттуда значения и задавать размеры и положение окна. О чем, собственно, выше и писал Boxa:
Цитата:
Сообщение от Boxa Посмотреть сообщение
однако я не понимаю, что Вам запрещает сохранять и загружать эти настройки...
----- добавлено через ~2 мин. -----
ну или в реестре, как предлагает Алексей - что будет проще для вас в реализации.
Сергей812 вне форума  
 
Непрочитано 27.02.2018, 21:22
#13
Boxa

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я бы поменял код, и сохранял в реестре положение и размеры окна. А при вызове диалога восстанавливал бы.
Собственно я это и предлагал, но видимо автору это не подходит.
Boxa вне форума  
 
Автор темы   Непрочитано 27.02.2018, 22:04
#14
sergey12


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я бы поменял код, и сохранял в реестре положение и размеры окна. А при вызове диалога восстанавливал бы.
DVB-файл не мой. Взят с просторов интернета. Код VBA не поменять.
sergey12 вне форума  
 
Непрочитано 27.02.2018, 22:09
#15
Сергей812


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


Цитата:
Сообщение от sergey12 Посмотреть сообщение
Код VBA не поменять.
запоролен?
Сергей812 вне форума  
 
Непрочитано 27.02.2018, 22:11
#16
Boxa

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


Цитата:
Сообщение от sergey12 Посмотреть сообщение
Код VBA не поменять.
Почему? Вы не пишите на VBA?
Boxa вне форума  
 
Автор темы   Непрочитано 27.02.2018, 22:15
#17
sergey12


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Почему? Вы не пишите на VBA?
Не пишу на VBA (.

Только на уровне школы%).


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
запоролен?
Да.
sergey12 вне форума  
 
Непрочитано 27.02.2018, 22:17
#18
Сергей812


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


Цитата:
Сообщение от sergey12 Посмотреть сообщение
Да.
тогда сделайте, как раньше работало и не трогайте)
Сергей812 вне форума  
 
Непрочитано 27.02.2018, 22:21
| 1 #19
Boxa

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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
запоролен?
когда это останавливало =о)))

Как обычно... Кончилось рекомендацией смириться =о)))))))
Boxa вне форума  
 
Непрочитано 27.02.2018, 22:42
| 1 #20
Сергей812


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Как обычно... Кончилось рекомендацией смириться =о)))))))
c VBA в акаде можно только смириться)
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.02.2018, 08:52
#21
sergey12


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


Ещё замечено: если выполню команду "^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,616


Цитата:
(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
Сообщений: 87


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 40,450


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

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


Код:
[Выделить все]
 (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
Сообщений: 87


В интернете встретил такой код с загрузкой лиспа при необходимости.
"^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,499


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


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


Цитата:
Сообщение от Сергей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,499


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


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


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


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


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

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


У меня получилось загрузить 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
Сообщений: 87


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 40,450


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


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


Долгим чтением форумов и 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