Как сделать неактивным (активным) пункт меню

Автор Тема: Как сделать неактивным (активным) пункт меню  (Прочитано 10534 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Всем доброго дня!
Можно ли как-то сделать неактивным (активным) пункт меню. Пункт меню - это иконка. Само меню загружается из файла.
Код - C# [Выбрать]
  1.         private string menuPath = Path.Combine(new string[]{
  2.                     (string) acadApp.GetSystemVariable("ROAMABLEROOTPREFIX"),
  3.                     "Support", NORMA_CUIX
  4.                 });
  5.  

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Пункт меню - это иконка.
О какой иконке идёт речь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
О пункте меню плагина.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
Покажи сколку экрана с AutoCAD и отметь на ней что ты хочешь сделать неактивным.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3

Отмечено как Решение Борис_С 25-05-2021, 15:18:57

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
Это не меню - это лента (Ribbon). Соответственно ты можешь найти RibbonButton и установить его свойство IsEnabled в true или в false.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Остался один вопрос, как найти нужный элемент RibbonButton. На форуме я нашел метод GetAllItems - Получение элементов управления на ленте по идентификатору (https://adn-cis.org/forum/index.php?topic=3050.msg11793#msg11793). В этот метод нужно передать идентификатор элемента управления. Как мне найти идентификатор элемента управления нужного мне элемента?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как мне найти идентификатор элемента управления нужного мне элемента?
В меню (cuix-файле) смотри его UID:





Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Какую библиотеку нужно подключить, чтобы было доступно пространство имен Autodesk.Windows?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Какую библиотеку нужно подключить, чтобы было доступно пространство имен Autodesk.Windows?
AdWindows.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Я попробовал отловить событие перехода из пространства модели в пространство листа в событии DocumentLockModeChanged.
Событие ловится, но функция IsPaperSpace - находится ли программа в режиме пространства листа, выдает старое значение.
В каком событии лучше вызывать эту функцию?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В каком событии лучше вызывать эту функцию?
Лучше её вообще не вызывать в событиях. Но можешь попробовать в Application.Idle или в Editor.EnteringQuiescentState
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
В обработчике события DocumentManager.DocumentLockModeChanged я использовал условие evtArgs.GlobalCommandName == "LAYOUT_CONTROL"
для того, чтобы понять, что изменилось пространство.
Какое условие нужно использовать в обработчике события Application.Idle для этого?
У параметра EventArgs e нет свойства GlobalCommandName.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Вариант с Application.Idle работает. Не нужно ловить событие изменение пространства.
Саша - ты наша палочка-выручалочка.
Спасибо тебе.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
Просто сохрани информацию в DocumentManager.DocumentLockModeChanged о том, что произошло переключение Layout, а обработай в Application.Idle
Хотя ты можешь включать/выключать свою кнопку в любом случае в Application.Idle, проверяя текущее состояние Layout.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение