Как программно управлять падающим меню в послених (2010 и выше) версиях Автокада
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно управлять падающим меню в послених (2010 и выше) версиях Автокада

Как программно управлять падающим меню в послених (2010 и выше) версиях Автокада

Ответ
Поиск в этой теме
Непрочитано 16.04.2013, 17:40 #1
Как программно управлять падающим меню в послених (2010 и выше) версиях Автокада
480725
 
Москва
Регистрация: 06.10.2007
Сообщений: 132

Начиная с 2010 Автокада не работают конструкции вида (Menucmd "pN=xxx") и (Menucmd "pN=*") для N отличного от 0. Судя по несколько изменившемуся описаннию функции Menucmd в Help это может быть не ошибкой, а сознательным изменением, но явно недопустимость приведенных конструкций не объявлена. Просьба подсказать какой-то другой способ заменить и / или заставить раскрыться раздел падающего меню из программы на LISP.
Просмотров: 6350
 
Автор темы   Непрочитано 20.04.2013, 11:44
#2
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Может это можно сделать при помощи объектных методов? Через VLX... Если кто знает как - подскажите пожалуйста!
480725 вне форума  
 
Непрочитано 20.04.2013, 12:22
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот такая (к примеру) конструкция работает (из файла MNL):
(menucmd "p22=+ss.pop1")
Profan вне форума  
 
Автор темы   Непрочитано 20.04.2013, 13:57
#4
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Profan Посмотреть сообщение
Вот такая (к примеру) конструкция работает (из файла MNL):
(menucmd "p22=+ss.pop1")
Такие конструкции работают, а конструкция (menucmd "p22=*") нет. Для любых Pn, корме P0.
В программе стояло (menucmd "P1=*"), т.к. (menucmd "P0=*") гарантированно закрывала ту часть чертежа, к которой относилось меню.
480725 вне форума  
 
Непрочитано 20.04.2013, 14:42
#5
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от 480725 Посмотреть сообщение
Начиная с 2010 Автокада не работают конструкции вида (Menucmd "pN=xxx") и (Menucmd "pN=*") для N отличного от 0.
Да вроде всё работает...
Воспользуйтесь MENUBAR=1
"В строке меню можно отобразить раскрывающиеся меню в качестве альтернативы ленте или для совместного с ней использования." - HELP
Мы такое делали для собственного меню. Если интересно, могу показать пример
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 20.04.2013 в 16:30.
Alan вне форума  
 
Автор темы   Непрочитано 20.04.2013, 19:21
#6
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Alan Посмотреть сообщение
Да вроде всё работает...
Воспользуйтесь MENUBAR=1
"В строке меню можно отобразить раскрывающиеся меню в качестве альтернативы ленте или для совместного с ней использования." - HELP
Мы такое делали для собственного меню. Если интересно, могу показать пример
Ленту в своем меню отключаю. MENUBAR=1, естественно устанвливаю (menucmd "p1=xxx") работает, т.е. разделы меню подменяются и добавляются, а вот заставить их раскрываься по команде (menucmd "p1=*") не получается. От А2000 до A2009 все нормально, а дальше (A2010, A2011)- глухо не только старая программа, но и все экперименты пробуксовывают. Если у вас именно (menucmd "p1=*") работает (цифра может быть любая, главное, чтобы не 0, т.к. с P0=* проблем нет) то буду очень благодарен за отправку меню и фрагмента программы. Можно максимально сократить, но только предварительно убедиться, что продолжает работать.
480725 вне форума  
 
Непрочитано 21.04.2013, 20:20
#7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


[IMG]http://img845.**********.us/img845/3387/21042013191718.png[/IMG]

Что-то не так?
Александр Ривилис вне форума  
 
Непрочитано 22.04.2013, 15:33
#8
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Подтверждаю ошибку:

В AutoCAD 2014 en - работает
В AutoCAD 2014 ru - не работает

В AutoCAD 2013 en - не работает
В AutoCAD 2013 ru - не работает
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 23.04.2013, 17:21
#9
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Вынужден признать, что в А2011 рус - работает. Но в А2010 не работает. Про А2013 и А2014 Евгений написал - тоже дела не ахти. Так есть какие-то возможности решить проблему через VLX или VLA?

Последний раз редактировалось 480725, 23.04.2013 в 22:52.
480725 вне форума  
 
Непрочитано 23.04.2013, 23:36
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
Подтверждаю ошибку:
Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
В AutoCAD 2013 ru - не работает
У мну все ок
gomer вне форума  
 
Непрочитано 23.04.2013, 23:49
#11
Кулик Алексей aka kpblc
Moderator

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


AutoCAD 2013 x64 + SP1.1; независимо от локализации - работает.

P.S. Интересна конечная цель таких шагов...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.04.2013, 23:58
#12
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Наверное, еще от разрядности зависит
Do$ вне форума  
 
Автор темы   Непрочитано 24.04.2013, 10:02
#13
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Возвращаюсь к вопросу:
Может в LISPе заставить выпасть падающее меню не функцией (menucmd "Pn=*"), а при помощи объектной модели? Через VLX...
480725 вне форума  
 
Непрочитано 24.04.2013, 10:06
#14
Кулик Алексей aka kpblc
Moderator

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


VLX - это не объектная модель, а формат компиляции лисповых исходников.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.04.2013, 12:54
#15
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Описался: функции LISP, начинающиеся с префикса VLA.

Последний раз редактировалось 480725, 24.04.2013 в 13:47.
480725 вне форума  
 
Непрочитано 24.04.2013, 13:01
#16
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
функции LISP, начинающиеся с префикса VLA.
Вам с "шашечками" или чтобы ехать?
Цитата:
Сообщение от 480725 Посмотреть сообщение
Возвращаюсь к вопросу:
Извини, был сильно занят, не отвечал.
А чем не устраивает "разворачивание" какой-то стандартной зоны (или другой?) падающего меню с возвратом после отработки строки меню её назад?
Вот как делали мы...
Вызов:
(menucmd "P5=ПАРКС.POP1-SST")(menucmd "P5=*")
соответствующий кусок меню ПАРКС.mnu
Код:
[Выделить все]
***POP1-SST
**SMESH
               [Величина]
ID_p1ss2       [смещения:]
ID_p1ss3       [0]0 
ID_p1ss4       [100]100 
................
ID_p1ss15      [3000]3000
Результат - POP5.jpg

Вернули назад стандартную зону:
(menucmd "P5=POP5")

Показали, что стандартные тоже можно ронять.
(menucmd "P5=*")
Результат - POP5_Standart.jpg
Миниатюры
Нажмите на изображение для увеличения
Название: POP5.JPG
Просмотров: 48
Размер:	95.3 Кб
ID:	101815  Нажмите на изображение для увеличения
Название: POP5_Standart.JPG
Просмотров: 45
Размер:	54.4 Кб
ID:	101816  
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 24.04.2013, 13:49
#17
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


В 2010 АCAD (menucmd "p5=*") не срабатывает! Версию Автокада поменять невозможно.
480725 вне форума  
 
Непрочитано 24.04.2013, 15:23
#18
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от 480725 Посмотреть сообщение
В 2010 АCAD (menucmd "p5=*") не срабатывает! ......
Да, в 2010 не работает ни в какой зоне , не обращал внимание раньше на это...
Придётся отнести это к "традиционному" багу разработчиков Autodesk в Автокаде...
А что ты пытаешься там уронить? М.б. можно перейти от указания строки падающего меню к чему-то другому, например, _toolbar?
В некоторых китайских Автокадах с использованием меню вообще большие проблемы, я перешел на _toolbar
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 24.04.2013, 16:01
#19
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Есть откомпилированная программа без исходника. Есть меню с исходником. Я переопределяю (menucmd "p1=*") так,
чтобы для данного конкретного заголовка выполнялся оператор (menucmd"s=заголовок"). Это сделано и работает.
НО.
1)Ширина экранного меню не позволяет полноценно разместить пункты падающего меню.
2)Сделать такой фокус можно только имея исходное меню. Не исключено, что в какой-то другой программе исходного меню не будет, тогда в подобной ситуации даже понять в чем причина сбоя не удастся. Если есть средства заставить падать падающее меню через объектную модель, то можно так переопределить menucmd, что она всегда будет работать.
480725 вне форума  
 
Непрочитано 24.04.2013, 16:15
#20
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от 480725 Посмотреть сообщение
Есть откомпилированная программа без исходника.
Первое движение души - переписать...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.04.2013, 18:25
#21
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от 480725 Посмотреть сообщение
1)Ширина экранного меню не позволяет полноценно разместить пункты падающего меню.
Экранное меню.... Этот вариант даже рассматривать нельзя/не хочется. - Некрофилия.
Делал такие телодвижения в Автокаде 10-12 (ДОС).
ИМХО - получал неплохой результат - динамически контекстно изменяющееся зоны меню,
что обогащало скромный интерфейс ДОС-Автокада, создавались фактически динамические toolbar

Но сейчас столько средств: toolbar, палитры, диалоговые окна (DCL or COM-сервера) и т.д.!
В конечном итоге - Используйте свою программу не под 2010, а под другим, например, Автокадом 2013
Сделайте скрин этого POP-пунктика этой секретной программы.
Что там такое вызывается, что так облом нажать на заголовок падающего меню для разворота в конечном итоге?
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 25.04.2013, 11:52
#22
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Переписать не могу, программа большая никаких концов сейчас нет - разработчик уволился 3 года назад. Переставлять Автокад не имею право. Закрыть проблему неменюшными средствами - во первых можно только при наличии исходного меню, во вторых - с большими ограничениями. Способы альтернативного решения известны, но гораздо изящнее заставить заработать меню. Сам я из-за неладов с английским с объектной моделью пользуюсь только в безвыходных ситуациях, как правило при помощи участников данного форума, спасибо им. Вот и сейчас обращаюсь к знатокам с прямым вопросом: Есть ли Vla (Vlax) функции, при помощи которых можно заставить "выпасть" раздел падающего меню или нет. Если авторитетный человек скажет, что таких функций нет - вопрос исчерпан. Если функции есть - проверю, как работет в А2010 и при удаче - решу свою проблему. Она не частная: Здесь на форуме сообщалось что в А2014 все аналогично.
480725 вне форума  
 
Непрочитано 25.04.2013, 13:11
#23
Кулик Алексей aka kpblc
Moderator

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


По-моему, через ActiveX такое впрямую не реализовать:
Код:
[Выделить все]
(vlax-dump-Object (vla-item (vla-get-MenuBar (vlax-get-acad-object)) 0) t)
; IAcadPopupMenu: An AutoCAD cascading menu
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 0000000140d28e28>
;   Count (RO) = 32
;   Name = "&File"
;   NameNoMnemonic (RO) = "File"
;   OnMenuBar (RO) = -1
;   Parent (RO) = #<VLA-OBJECT IAcadPopupMenus 0000000038711e78>
;   ShortcutMenu (RO) = 0
;   TagString (RO) = "ID_MnFile"
; Methods supported:
;   AddMenuItem (3)
;   AddSeparator (1)
;   AddSubMenu (2)
;   InsertInMenuBar (1)
;   Item (1)
;   RemoveFromMenuBar ()
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.04.2013, 16:49
#24
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Во первых - что делает функция, которую ты привел? Если это Лисп то все строки кроме первой - комментарии?
Во вторых - что значит впрямую нельзя - как-то значит все-таки можно?
Мне, чтобы успокоться - нужен или ответ как можно с минимальным комментарием на русском, или ответ, что такой возможности нет. Я поверю.
480725 вне форума  
 
Непрочитано 25.04.2013, 17:52
#25
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от 480725 Посмотреть сообщение
Мне, чтобы успокоться - нужен или ответ как можно с минимальным комментарием на русском, или ответ, что такой возможности нет. Я поверю.
Очень похоже на вопрос "дай телефон позвонить..." и дальше "а если найду?"
На самом деле, я сегодня тоже глянул на показ выпадающего меню через объектную модель из лиспа. Действительно возможности отобразить меню нет. По поводу обходных маршрутов, есть конечно, но это действительно обходные, которые будут по разному работать на всех версиях. Например, можно попробовать вызвать из VLA- методов ком строку на выполнение (Menucmd "pN=xxx") или запустить VBA код или строку на показ или вообще написать на .NET или ARX программу, для работы из лиспа, позволяющую показать меню. Способы действительно есть, но это не значит, что в Лиспе есть готовые решения, дублирующие стандартные (Menucmd "pN=xxx")...

Цитата:
Во первых - что делает функция, которую ты привел? Если это Лисп то все строки кроме первой - комментарии?
да, в приведенном коде работает только одна строка, все остальное - ответ акада на эту строку, причем ответ акад делает сразу комментарием...

ps. встроенной функции, кроме menucmd нет, создавать ее или пытаться вызвать из другого места я не буду и вам не советую. Лучше переписать функционал вашей программы заново. Например, нет проблем прочесть любое выпадающее меню, посмотреть команду которая там есть и запустить ее. Отображать для запуска раскрытое выпадающее меню бессмысленно. Если есть желание продолжить, рекомендую описать задачу более полно, для чего вам показ меню. Может действительно можно обойти вашу проблему...

Извиняюсь, действительно в акаде 2014 ру работает!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/

Последний раз редактировалось Елпанов Евгений, 25.04.2013 в 18:08.
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 25.04.2013, 18:58
#26
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Спасибо. Ответ исчерпывающий. Что до формы моего вопроса в предыдущем посте - просто я так утрированно выразил свой интерес к конкретному аспекту проблемы, и равную удовлетворенность как отрицательным так и положительным ответом. Подменить функцию menucmd так, чтобы она чтобы своими средствама продолжала работать в тех режимах, которые допускаются некорректным автокадом и, например, простейшим диалоговым окном со списком заголовков пунктов меню - в остальных случаях вполне реально, хотя проблемы тут есть. Для моего случая этот вариант нельзя сбрасывать..
480725 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно управлять падающим меню в послених (2010 и выше) версиях Автокада



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
зависание меню свойств єлементов в AutoCad 2010 rus x86 при работе в Windows 7 micropyhcher Баги и пожелания в Autodesk 3 21.11.2009 11:05
Попасть в слой. Vova AutoCAD 106 10.03.2006 04:36