Новый ZWCAD 2017
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание своего меню в Autocad 2012 из VBA

Создание своего меню в Autocad 2012 из VBA

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 16.07.2017, 23:50 #1
Создание своего меню в Autocad 2012 из VBA
Theodor
 
Петрозаводск
Регистрация: 16.04.2009
Сообщений: 69

Theodor вне форума Вставить имя

Коллеги!
Есть у меня нужный мне пакет макросов, с которым я работаю в 2008 автокаде. Подгружаю его о необходимости и он же создает в главном меню нужные мне подменю. Но иногда приходится работать на другой машине, где автокад 2012. Но вот беда, при попытке запуска процедуры создания меню - 2012-й на нее ругается. И следовательно меню в нем не создается.

В частности, выскакивает ругань на отсутствие объекта / метода
Dim objMenuGroup As AcadMenuGroup
Set objMenuGroup = Application.MenuGroups.Item(0) 'тут ругается

Хотя в 2008 без проблем.
Куда копать?

Как бы на перспективу понимая, что методы могут быть разными, то возникает попутно вопрос, можно ли узнать версию среды запущенного автокада (2008 или 2012)?
Просмотров: 539
 
Непрочитано 17.07.2017, 00:09
#2
Сергей812


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


AcadApplication -> Version - наверно, не поменялось)
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 17.07.2017, 02:04
#3
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 69


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
AcadApplication -> Version - наверно, не поменялось)
Пока сложно понять. Попробовал так
Dim Ver As AcadApplication
MsgBox Ver.Version
То же ругань.... Как иначе сделать?
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.07.2017, 06:54
#4
trir


 
Регистрация: 18.12.2010
Сообщений: 2,301


весь код приведи
trir вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.07.2017, 07:00
#5
lenivec

проектирование
 
Регистрация: 16.09.2005
KZ
Сообщений: 69


‬‫‪‬‫‪          ​

Последний раз редактировалось lenivec, 17.07.2017 в 09:23.
lenivec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.07.2017, 09:07
#6
Сергей812


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


Цитата:
Сообщение от Theodor Посмотреть сообщение
То же ругань.... Как иначе сделать?
меня VBA своими рандомными глюками в 2012 64-битном акаде вынудил уйти в Interop (то же VBA, но в VB.Net). Для 64 битных версий нет соответствующего VBA 2012, есть лишь кривые обертки 32-разрядного.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Theodor Посмотреть сообщение
Dim Ver As AcadApplication
MsgBox Ver.Version
если объявили переменную класса - это не значит, что там уже есть какое то рабочее значение. Отладчик не используете в принципе?
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 20.07.2017, 01:17
#7
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 69


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
если объявили переменную класса - это не значит, что там уже есть какое то рабочее значение. Отладчик не используете в принципе?
Виноват, ступил...
Dim Ver As AcadApplication
Set Ver = ThisDrawing.Application
MsgBox Ver.Caption 'Ver.Version
работает. Version выдает странные коды версии, а вот Caption выдала заголовок окна среды "Autocad 2012" в общем то что надо.
Прошу прощения за лишнее беспокойство.
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.07.2017, 01:30
#8
Сергей812


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


Можно еще из системной переменной ACADVER -> Значения. Оно же - свойство AcadApplication.Version. А к заголовкам лучше не привязываться, имхо:
Цитата:
Caption. Gets the text seen by the user in the window caption bar. This property is read-only. Note that if the caption is modified using the Win32 API function SetWindowText, the caption property will return the modified caption text.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 20.07.2017, 01:30
#9
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 69


А вот проблемы с созданием меню сохраняются. При этом в 2008 работает.

Код:
[Выделить все]
  Dim objMenuGroup As AcadMenuGroup
  Dim objVBAMenu As AcadPopupMenu
  Dim objNewMenuItem As AcadPopupMenuItem
  Dim strMacro As String
  Set objMenuGroup = Application.MenuGroups.Item(0) 'тут ошибка 438
    
  Set objVBAMenu = objMenuGroup.Menus.Add("Новое меню")
  strMacro = Chr(3) & Chr(3) & "-vbarun Module.Macros1" & Chr(32)
  Set objNewMenuItem = objVBAMenu.AddMenuItem(objVBAMenu.count + 1, "Подменю 1", strMacro)
  strMacro = Chr(3) & Chr(3) & "-vbarun Module.Macros2" & Chr(32)
  Set objNewMenuItem = objVBAMenu.AddMenuItem(objVBAMenu.count + 1, "Подменю 2", strMacro)
    
  objVBAMenu.InsertInMenuBar (ThisDrawing.Application.MenuBar.count)
  objMenuGroup.Save (acMenuFileCompiled)
выдается стандартная ошибка 438 object doesn't support this property or method. В каком направлении искать косяк - пока не пойму

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Можно еще из системной переменной ACADVER -> Значения.
О, спасибо, по ссылке увидел классификацию версий... Думаю пригодиться.
Думаю, что текст в caption никто не поменяет в моих условиях.
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.07.2017, 01:45
#10
Сергей812


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


Попробуйте:
Set objMenuGroup = ThisDrawing.Application.MenuGroups.Item(0) 'тут ошибка 438
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 20.07.2017, 01:49
#11
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 69


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Попробуйте
Супер! Заработало!
Мой низкий поклон! И искренние благодарности.

Буду дальше разбираться с пакетами автозапуска.

Еще раз спасибо!
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.07.2017, 01:51
#12
Сергей812


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


Theodor, читайте справку от Аутодеска - там все это есть)
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 20.07.2017, 01:55
#13
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 69


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
читайте справку от Аутодеска - там все это есть
Согласен, но бывает так, что пару лет назад почитал, вроде все понял. А с годами мелочи забываются, вот об них и спотыкаешься. Вот и надеешься, что у кого-то на форуме та самая мелочь по конкретному вопросу не забыта.
Theodor вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание своего меню в Autocad 2012 из VBA

 VetCAD++
Опции темы Поиск в этой теме
Поиск в этой теме:

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание двухветвевой ж/б колонны в Autocad Architecture 2012? СергейКА Вертикальные решения на базе AutoCAD 6 16.05.2013 21:30
Как совместить AutoCAD MEP 2012 и Civil 3D 2012? Sh_C Вертикальные решения на базе AutoCAD 10 09.05.2013 08:27
AutoCAD 2012 cохраняет файлы файлы в формате AutoCAD 2010 Zhenulka AutoCAD 10 16.04.2013 12:10
Пропала рабочая область Archittecture в Autocad Architecture 2012 Vadim_trm Вертикальные решения на базе AutoCAD 6 25.12.2011 22:58
Одна из целей: Создание экспертных систем на базе AutoCAD. Сергей Юрьевич Программирование 9 01.01.2005 15:17

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||


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