Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Борис_С от 21-05-2021, 15:14:00

Название: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 21-05-2021, 15:14:00
Всем доброго дня!
Можно ли как-то сделать неактивным (активным) пункт меню. Пункт меню - это иконка. Само меню загружается из файла.
Код - C# [Выбрать]
  1.         private string menuPath = Path.Combine(new string[]{
  2.                     (string) acadApp.GetSystemVariable("ROAMABLEROOTPREFIX"),
  3.                     "Support", NORMA_CUIX
  4.                 });
  5.  
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 22-05-2021, 15:51:42
Пункт меню - это иконка.
О какой иконке идёт речь?
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 24-05-2021, 10:42:40
О пункте меню плагина.
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 24-05-2021, 10:49:51
Борис_С,
Покажи сколку экрана с AutoCAD и отметь на ней что ты хочешь сделать неактивным.
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 24-05-2021, 14:15:49

(https://i.postimg.cc/R3hPwj4J/1.png) (https://postimg.cc/R3hPwj4J)

Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 24-05-2021, 15:31:00
Борис_С,
Это не меню - это лента (Ribbon). Соответственно ты можешь найти RibbonButton и установить его свойство IsEnabled в true или в false.
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 24-05-2021, 19:29:25
Остался один вопрос, как найти нужный элемент RibbonButton. На форуме я нашел метод GetAllItems - Получение элементов управления на ленте по идентификатору (https://adn-cis.org/forum/index.php?topic=3050.msg11793#msg11793). В этот метод нужно передать идентификатор элемента управления. Как мне найти идентификатор элемента управления нужного мне элемента?
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 24-05-2021, 20:34:39
Как мне найти идентификатор элемента управления нужного мне элемента?
В меню (cuix-файле) смотри его UID:

(https://live.staticflickr.com/65535/51200700753_562ae20fa5_o.png)

(https://live.staticflickr.com/65535/51201268254_0cfbf55210_o.jpg)

Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 25-05-2021, 13:51:03
Какую библиотеку нужно подключить, чтобы было доступно пространство имен Autodesk.Windows?
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 25-05-2021, 13:56:17
Какую библиотеку нужно подключить, чтобы было доступно пространство имен Autodesk.Windows?
AdWindows.dll
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 25-05-2021, 15:18:15
Я попробовал отловить событие перехода из пространства модели в пространство листа в событии DocumentLockModeChanged.
Событие ловится, но функция IsPaperSpace - находится ли программа в режиме пространства листа, выдает старое значение.
В каком событии лучше вызывать эту функцию?
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 25-05-2021, 15:21:19
В каком событии лучше вызывать эту функцию?
Лучше её вообще не вызывать в событиях. Но можешь попробовать в Application.Idle или в Editor.EnteringQuiescentState
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 25-05-2021, 15:40:32
В обработчике события DocumentManager.DocumentLockModeChanged я использовал условие evtArgs.GlobalCommandName == "LAYOUT_CONTROL"
для того, чтобы понять, что изменилось пространство.
Какое условие нужно использовать в обработчике события Application.Idle для этого?
У параметра EventArgs e нет свойства GlobalCommandName.
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 25-05-2021, 15:50:44
Вариант с Application.Idle работает. Не нужно ловить событие изменение пространства.
Саша - ты наша палочка-выручалочка.
Спасибо тебе.
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 25-05-2021, 15:51:09
Борис_С,
Просто сохрани информацию в DocumentManager.DocumentLockModeChanged о том, что произошло переключение Layout, а обработай в Application.Idle
Хотя ты можешь включать/выключать свою кнопку в любом случае в Application.Idle, проверяя текущее состояние Layout.
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Александр Ривилис от 25-05-2021, 15:51:51
Саша - ты наша палочка-выручалочка.
Ну дык... :D
Название: Re: Как сделать неактивным (активным) пункт меню
Отправлено: Борис_С от 25-05-2021, 16:58:21
Борис_С,
Просто сохрани информацию в DocumentManager.DocumentLockModeChanged о том, что произошло переключение Layout, а обработай в Application.Idle
Хотя ты можешь включать/выключать свою кнопку в любом случае в Application.Idle, проверяя текущее состояние Layout.
Этот вариант еще лучше.