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

23/03/2014

Использование всплывающих подсказок в надстройке Revit

Вопрос: Кто-нибудь знает можно ли использовать строку состояния для отображения своих собственных сообщений в любой момент? И если можно, то как?

Когда пользователю предлагается выбрать элементы или некую область, то строку состояния можно довольно легко задействовать:

Код - C#: [Выделить]
  1.   IList<Element> PickSelection
  2.     = sel.PickElementsByRectangle(
  3.       "Выберите элементы" );

Но я хочу использовать строку состояния, чтобы подсказать пользователю, что некое действие завершилось. Использовать назойливые окна сообщений для этого очень не хочется.

Может есть такой метод, типа StatusPrompt.Show(“Действие завершено”)?

Ответ: Ранее мы уже обсуждали как можно отобразить текст в строке состояния с помощью функций WinAPI.

С другой стороны, если вы хотите просто отобразить сообщение, при это не блокировать интерфейс пользователя и не требовать от него дополнительных действий, то можно использовать всплывающие подсказки.

Для этого сначала добавьте сборку AdWindows.dll к вашему проекту в Visual Studio. Сборка находится в то же папке, где и RevitAPI.dll.

Затем, можно создать вот такой вот статический метод:

Код - C#: [Выделить]
  1.         public static void ShowBalloonTip(
  2.                   string category,
  3.                   string title,
  4.                   string text)
  5.         {
  6.             Autodesk.Internal.InfoCenter.ResultItem ri
  7.               = new Autodesk.Internal.InfoCenter.ResultItem();
  8.  
  9.             ri.Category = category;
  10.             ri.Title = title;
  11.             ri.TooltipText = text;
  12.            
  13.             // Не обязательный параметр: URL с дополнительной информацией         
  14.             ri.Uri = new System.Uri(
  15.               "http://www.adn-cis.org");
  16.            
  17.             ri.IsNew = true;
  18.  
  19.             // Также можно добавить обработку события нажатия на подсказку
  20.             ri.ResultClicked += new EventHandler<
  21.               Autodesk.Internal.InfoCenter.ResultClickEventArgs>(
  22.                 ri_ResultClicked);
  23.  
  24.             Autodesk.Windows.ComponentManager
  25.               .InfoCenterPaletteManager.ShowBalloon(ri);
  26.  
  27.           
  28.         }
  29.  
  30.         private static void ri_ResultClicked(
  31.           object sender,
  32.           Autodesk.Internal.InfoCenter.ResultClickEventArgs e)
  33.         {
  34.             // что-то сделаем при нажатии на подсказку           
  35.         }
  36.     }

Результат:

 

Но помните, что использование сборки AdWindows.dll официально не поддерживается.

Но учитывая то, что AutoCAD также содержит свою версию этой библиотеки, и она официально поддерживается и используется разработчиками надстроек к AutoCAD, например, как описано в теме API по работе с лентой в AutoCAD 2009, то судя по всему мы на верном пути.

P.S. В сплывающей подсказке задействовано только свойство Category и Title, adn-cis.org и adn-cis.org в примере. Text так и не отображается в подсказке.

Источник: http://thebuildingcoder.typepad.com/blog/2014/03/using-balloon-tips-in-revit.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=629

Опубликовано 23.03.2014
Отредактировано 02.04.2014 в 21:32:53