Порядок автозагрузки плагинов

Автор Тема: Порядок автозагрузки плагинов  (Прочитано 11332 раз)

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

Оффлайн AlexАвтор темы

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Добрый день.
С наступившим всех!)
...
Насколько я понял, автозагрузка плагинов осуществляется через соответвующую запись в реестре (http://through-the-interface.typepad.com/through_the_interface/2006/09/automatic_loadi.html). При этом есть два варианта: либо чтобы плагин загружался сразу, либо чтобы он загружался при первом вызове какой-либо оформленной в нем команды. Меня интересует первый вариант.
При загрузке плагина мне нужно добавить на ленту новую вкладку с кнопками. Соответственно у меня получается такой код:

Код - C# [Выбрать]
  1. public class Commands : IExtensionApplication
  2. {
  3.   public void Initialize()
  4.   {
  5.      ...
  6.      addTab();
  7.      ...
  8.   }
  9. }
  10.  

Однако вкладка на ленту не добавляется. При этом сама процедура инициализации выполняется полностью.
Насколько я понял, плагины загружаются практически сразу после начала загрузки самого AutoCAD'а. И пока плагин не загрузится, AutoCAD тоже дальше загружаться не будет (например, если в функции Initialize() вызвать Windows.MessageBox(), то AutoCAD не будет дальше загружаться, пока не закроешь окно MessageBox'а).
Причем в момент загрузки плагина сама лента (объект RibbonControl) еще не создана, из-за чего добавить вкладку не получается.
...
Собственно, вопрос: можно ли как-то сделать так, чтобы плагин загружался не ДО, а ПОСЛЕ того, как AutoCAD инициализирует пользовательский интерфейс?
...
P.S. Понятно, что можно создать еще одну команду AutoCAD, назвать ее addRibbon и заставить пользователя вводить ее каждый раз... Но это как-то неудобно.(
« Последнее редактирование: 01-10-2019, 21:32:37 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Порядок автозагрузки плагинов
« Ответ #1 : 02-01-2014, 18:14:54 »
Изменить порядок загрузки плагинов ты не можешь. Впрочем это и не нужно. В качестве решения этой проблемы могу предложить два варианта, которые есть в блоге Kean Walmsley:
1) http://through-the-interface.typepad.com/through_the_interface/2013/01/displaying-a-dialog-on-autocad-startup-using-net.html
2) http://through-the-interface.typepad.com/through_the_interface/2006/08/calling_command.html
Третий вариант - это объединить два первых. Точнее создать команду addRibbon и запускать её из события Application.Idle одним из способов, указанных во второй ссылке. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 11-11-2019, 21:53:52

Оффлайн AlexАвтор темы

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Порядок автозагрузки плагинов
« Ответ #2 : 03-01-2014, 16:33:39 »
Спасибо за наводку.
С ходу применить Application.Idle не удалось: это событие все-таки происходит еще до загрузки пользовательского интерфейса.
В итоге все свелось к примерно такому коду:
Код - C# [Выбрать]
  1. public class Commands : IExtensionApplication
  2. {
  3.   public void Initialize()
  4.   {
  5.      /// ...
  6.      Autodesk.AutoCAD.ApplicationServices.Application.Idle += new EventHandler(on_ApplicationIdle);
  7.      /// ...
  8.   }
  9.  
  10.   public void on_ApplicationIdle(object sender, EventArgs e)
  11.   {
  12.      /// ...
  13.      addRibbonTab();
  14.      /// ...
  15.   }
  16.  
  17.   public void addRibbonTab()
  18.   {
  19.      /// ...
  20.      RibbonControl rbCtrl = ComponentManager.Ribbon;
  21.      if (rbCtrl != null)
  22.      {
  23.         // добавление вкладки
  24.         // ...
  25.         Autodesk.AutoCAD.ApplicationServices.Application.Idle -= on_ApplicationIdle;
  26.      }
  27.   }
  28. }
  29.  
« Последнее редактирование: 01-10-2019, 21:33:04 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Порядок автозагрузки плагинов
« Ответ #3 : 03-01-2014, 16:43:35 »
Я не уловил разницы между тем, что я предложил и тем кодом, который ты показал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AlexАвтор темы

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Порядок автозагрузки плагинов
« Ответ #4 : 03-01-2014, 17:04:01 »
Принципиальной и нет.)
Просто в блоге Kean'а удаление привязки обработчика к событию происходит безусловно, а мне еще нужно проверять, успел ли создаться объект RibbonControl.
А так - да, метод  абсолютно тот же.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Порядок автозагрузки плагинов
« Ответ #5 : 03-01-2014, 17:10:57 »
Т.е. ты имеешь в виду, что реальное добавление RibbonControl происходит необязательно в первом событии Application.Idle? Тогда понятно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AlexАвтор темы

  • ADN Club
  • Сообщений: 36
  • Карма: 1
Re: Порядок автозагрузки плагинов
« Ответ #6 : 03-01-2014, 17:17:38 »
Да, как-то так.