ToolTip и GIF

Автор Тема: ToolTip и GIF  (Прочитано 9012 раз)

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

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: ToolTip и GIF
« Ответ #15 : 25-05-2020, 14:42:41 »
Это надо будет со своим плагином таскать эту библиотеку? - Я так не хочу

Можешь попробовать реализовать через Bitmap
http://losev-al.blogspot.com/2013/02/gif-wpf.html

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

  • ADN OPEN
  • ****
  • Сообщений: 379
  • Карма: 21
Re: ToolTip и GIF
« Ответ #16 : 25-05-2020, 17:51:46 »
Решение с wmv видео отличное, так как соотношение качество/размер лучше чем у gif  :) Жаль, что нигде нет информации, либо я не нашёл, что надо скармливать wmv.

Это надо будет со своим плагином таскать эту библиотеку? - Я так не хочу

Можешь попробовать реализовать через Bitmap
http://losev-al.blogspot.com/2013/02/gif-wpf.html
Спасибо, я пробовал, у меня не получилось.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ToolTip и GIF
« Ответ #17 : 25-05-2020, 19:03:02 »
Жаль, что нигде нет информации, либо я не нашёл, что надо скармливать wmv.
Я тоже не нашел. Просто сработала интуиция. Вообще же AdWindows.dll - по большей части недокументированная сборка.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: ToolTip и GIF
« Ответ #18 : 26-05-2020, 12:33:19 »
Спасибо, я пробовал, у меня не получилось.
А что конкретно не получилось?

...собственно решение Александра проще и лучше,
но в AutoCAD 2010 нет свойства ExpandedVideo у RibbonToolTip, только ExpandedImage

Удалось реализовать в AutoCAD2010, немного подправив код Александра и используя ссылки:
http://losev-al.blogspot.com/2013/02/gif-wpf.html
https://adndevblog.typepad.com/autocad/2012/06/use-thread-for-background-processing.html

Кто-нибудь знает, есть ли лучше решение, чем использовать System.Windows.Forms.Control для выполнения в основном потоке?

...ну и собственно код
//add:
//PresentationCore.dll
//WindowsBase.dll
//AdWindows.dll
//System.Drawing.dll
//System.Windows.Forms.dll

Код - C# [Выбрать]
  1. using System.Windows;
  2. using System.Windows.Forms;
  3. using System.Windows.Interop;
  4. using System.Windows.Media.Imaging;
  5.  
  6. public class ButtonCmdHandler : System.Windows.Input.ICommand
  7.         {
  8.                 public bool CanExecute( object parameter )
  9.                 {
  10.                         return true;
  11.                 }
  12.                 public event EventHandler CanExecuteChanged;
  13.                 public void Execute( object parameter )
  14.                 {
  15.                 }
  16.         }
  17.  
  18.  
  19.        
  20.         class Commands
  21.         {
  22.                 string gifFile = @"C:\Temp\GIF\cat.gif";
  23.                 System.Drawing.Bitmap _bitmap;
  24.                 BitmapSource _source;
  25.                 static System.Windows.Forms.Control syncCtrl;
  26.                 delegate void FinishedProcessingDelegate();
  27.  
  28.                 RibbonToolTip _toolTip_1;
  29.  
  30.  
  31.                 private BitmapSource BitmapToBitmapSource( System.Drawing.Bitmap bitmap )
  32.                 {
  33.                         return Imaging.CreateBitmapSourceFromHBitmap( bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions() );
  34.                 }
  35.  
  36.  
  37.                 private void OnFrameChanged( object sender, EventArgs e )
  38.                 {
  39.                         if (syncCtrl.InvokeRequired)
  40.                                 syncCtrl.Invoke( new FinishedProcessingDelegate( FinishedProcessing ) );
  41.                         else FinishedProcessing();
  42.                 }
  43.  
  44.  
  45.                 void FinishedProcessing()
  46.                 {
  47.                         System.Drawing.ImageAnimator.UpdateFrames();
  48.                         _source = BitmapToBitmapSource( _bitmap );
  49.                         _toolTip_1.ExpandedImage = _source;
  50.                 }
  51.  
  52.  
  53.                
  54.  
  55.                 [CommandMethod( "TEST" )]
  56.                 public void CreateTab()
  57.                 {
  58.                         syncCtrl = new Control();
  59.                         syncCtrl.CreateControl();
  60.  
  61.                         _bitmap = new System.Drawing.Bitmap( gifFile ); //tenor.gif
  62.                         System.Drawing.ImageAnimator.Animate( _bitmap, OnFrameChanged );
  63.  
  64.                         RibbonControl ribbonControl = ComponentManager.Ribbon; // RibbonServices.RibbonPaletteSet.RibbonControl;
  65.  
  66.                         RibbonTab ribbonTab = new RibbonTab
  67.                         {
  68.                                 Title = "Test",
  69.                                 Name = "Test_Tab",
  70.                                 Id = "TEST_ID"
  71.                         };
  72.                         ribbonControl.Tabs.Add( ribbonTab );
  73.  
  74.                         RibbonPanelSource panelSourceDocument = new RibbonPanelSource
  75.                         {
  76.                                 Title = "Test",
  77.                                 Id = "ID_SrcPanel"
  78.                         };
  79.                         RibbonPanel panelDocument = new RibbonPanel
  80.                         {
  81.                                 Source = panelSourceDocument
  82.                         };
  83.                         ribbonTab.Panels.Add( panelDocument );
  84.  
  85.                         _toolTip_1 = new RibbonToolTip
  86.                         {
  87.                                 Title = "Этто кнопка 1",
  88.                                 Content = "Это моя подсказка",
  89.                                 ExpandedContent = "GIF-видео из внешнего файла",
  90.                                 ExpandedImage = _source //ExpandedVideo = new Uri( "X:/x.wmv" )
  91.                         };
  92.  
  93.                         RibbonButton button = new RibbonButton
  94.                         {
  95.                                 Text = "Кнопка 1",
  96.                                 Height = 16,
  97.                                 ToolTip = _toolTip_1,
  98.                                 CommandHandler = new ButtonCmdHandler()
  99.                         };
  100.  
  101.                         RibbonRowPanel ribbonRow = new RibbonRowPanel();
  102.                         ribbonRow.Items.Add( button );
  103.                         panelSourceDocument.Items.Add( ribbonRow );
  104.  
  105.                         ribbonTab.IsActive = true;
  106.                         button.IsActive = true;
  107.                 }
  108. }

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ToolTip и GIF
« Ответ #19 : 26-05-2020, 19:43:02 »
Да, всё делается программно, так как в примере простой вариант ленты, а так у меня лента со всякой автоматизацией, которая например отслеживает состояние чертежа. Такая реализация чем-то плоха?
Я в этом вижу такие минусы:
- Больше работы по написанию кода.
- Если что-то нужно изменить - надо лезть в код, вносить изменения и пересобирать всю dll.
- Пользователь не сможет изменить настройки элементов на ленте так, как ему удобно, через инструменты адаптации интерфейса.
Я своё решение по анимированным подсказкам делал для использования со вкладкой ленты, описанной в CUIX файле. При этом, гифки размещаются в dll в виде ресурсов и не требуют указания пути к файлу в настройках ленты.

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

  • ADN OPEN
  • ****
  • Сообщений: 379
  • Карма: 21
Re: ToolTip и GIF
« Ответ #20 : 27-05-2020, 10:42:18 »
А что конкретно не получилось?
У меня в лоб не получилось повторить пример из ссылки, не компилировался проект, поэтому я не стал особо углубляться в тему, а искал другие варианты. Но я смотрю Вы существенно поменяли код в примере, особенно то место, в котором мне VS не давал компилировать.

Пользователь не сможет изменить настройки элементов на ленте так, как ему удобно, через инструменты адаптации интерфейса.

В CUIX файле можно описать логику взаимодействия, например ComboBox, ToggleButton и записи в NOD чертежа?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ToolTip и GIF
« Ответ #21 : 27-05-2020, 12:25:02 »
В CUIX файле можно описать логику взаимодействия, например ComboBox, ToggleButton и записи в NOD чертежа?
В CUIX в принципе не может быть никакой логики. Только описание элементов интерфейса. Вся логика - в коде приложения. Приложение может найти элемент управления на ленте по его уникальному Id, управлять им, отслеживать его изменения. И приложение же выполняет действия с чертежом, включая записи в NOD.
P.S. Хотя нет, вру. В CUIX может быть логика в виде LISP и DIESEL кода.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: ToolTip и GIF
« Ответ #22 : 27-05-2020, 13:28:46 »
P.S. Хотя нет, вру. В CUIX может быть логика в виде LISP и DIESEL кода.
Если быть еще точнее, то в CUIX файле может быть что угодно, это контейнер, zip архив. И в теории, можно туда поместить cвои dll и автоматом их подгружать используя *.mnl файл.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ToolTip и GIF
« Ответ #23 : 27-05-2020, 13:31:23 »
И в теории, можно туда поместить cвои dll и автоматом их подгружать используя *.mnl файл.
Хм. А как ты их оттуда собираешься вытаскивать?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 379
  • Карма: 21
Re: ToolTip и GIF
« Ответ #24 : 27-05-2020, 13:37:51 »
В CUIX файле можно описать логику взаимодействия, например ComboBox, ToggleButton и записи в NOD чертежа?
В CUIX в принципе не может быть никакой логики. Только описание элементов интерфейса. Вся логика - в коде приложения. Приложение может найти элемент управления на ленте по его уникальному Id, управлять им, отслеживать его изменения. И приложение же выполняет действия с чертежом, включая записи в NOD.
P.S. Хотя нет, вру. В CUIX может быть логика в виде LISP и DIESEL кода.

Если быть еще точнее, то в CUIX файле может быть что угодно, это контейнер, zip архив. И в теории, можно туда поместить cвои dll и автоматом их подгружать используя *.mnl файл.
Как я понимаю ничего критичного нет. Перечисленные Дмитрием минусы для меня не существенны, писать интерфейсы кодом я приучился ещё со времён Mel, а если надо будет переделать закладку, то смогу переделать за несколько минут. Ну, а пользователь обойдётся без настроек, пока что  8)
Кстати, у кого-то есть статистика, хотя бы по своим организациям, сколько % из пользователей кастомизируют интерфейс?

PS И вообще хотел бы выразить благодарность всем отписавшимся за интересную информацию для размышлений.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: ToolTip и GIF
« Ответ #25 : 27-05-2020, 14:03:00 »
Хм. А как ты их оттуда собираешься вытаскивать?
Ну я написал что в теории. Пробовать пока не собирался.

Если решать в лоб, через лисп в mnl можно вызывать системную команду для разархивирования cuix, например так:
(startapp "путь к программу с ЕХЕ" "аргументы") //https://forum.dwg.ru/showthread.php?t=6459
или так
(vlax-invoke (vlax-get-or-create-object "wscript.shell") "run" "notepad.exe" 1 T) //https://forum.dwg.ru/showthread.php?t=71267

и выполнить, что-то типа WshShell.Exec("cmd.exe /c rar.exe x C:\Temp\arhiv.rar") //https://www.cyberforum.ru/vbscript-wsh/thread593358.html
а затем из папки (command "netload" ....)
..с виду не  сложно найти и реализовать.

Если не прокатит, то можно написать dll с командой для автокада, либо внешний exe, vbs, т.е. через "костыли"

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: ToolTip и GIF
« Ответ #26 : 27-05-2020, 14:43:36 »
Кстати, у кого-то есть статистика, хотя бы по своим организациям, сколько % из пользователей кастомизируют интерфейс?
Статистики не веду, примерно так:
Более 100 человек
3/4 используют интерфейс предоставленный ОИТ.  1/4 любят кастомизировать.
Из тех и тех пользователей примерно 50% используют ленту, другие 50% панели.