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

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

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

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

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

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

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

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


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


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


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


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


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


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

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


‬‫‪‬‫‪          ​

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


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


Цитата:
Сообщение от 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
Петрозаводск
Сообщений: 323


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


Можно еще из системной переменной 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
Петрозаводск
Сообщений: 323


А вот проблемы с созданием меню сохраняются. При этом в 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
Сообщений: 11,000


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


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


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

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

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


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


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


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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание двухветвевой ж/б колонны в 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