17/02/2014
Как оставить видимыми элементы Ленты во время выполнения?
AutoCAD API для работы с Лентой - достаточно удобен для настройки интерфейса. Однако изменения в интерфейсе не являются постоянными. Это значит, что есть ситуации когда требуется дополнительный код для того, чтобы элементы Ленты, созданные через этот API, оставались видимыми: обычно это при переключении Рабочего пространства или когда что-то изменено в командах НПИ (_CUI) и БЫСТРНПИ (_QUICKCUI).Вот как можно оставить эти элементы видимыми и убедиться, что ваша Лента остается видимой.
Код - C#: [Выделить]
- [CommandMethod("SimpleButton")]
- public void SimpleButton()
- {
- Autodesk.AutoCAD.ApplicationServices.Application.
- SystemVariableChanged +=
- new Autodesk.AutoCAD.ApplicationServices.
- SystemVariableChangedEventHandler(
- Application_SystemVariableChanged);
- Autodesk.AutoCAD.ApplicationServices.Application.
- DocumentManager.MdiActiveDocument.CommandEnded +=
- new CommandEventHandler(MdiActiveDocument_CommandEnded);
- CreateSimpleButton();
- }
- void MdiActiveDocument_CommandEnded(
- object sender, CommandEventArgs e)
- {
- if (e.GlobalCommandName == "QUICKCUI" ||
- e.GlobalCommandName == "CUI")
- {
- Autodesk.AutoCAD.ApplicationServices.Application.Idle +=
- new EventHandler(Application_Idle);
- }
- }
- void Application_Idle(object sender, EventArgs e)
- {
- if (Autodesk.Windows.ComponentManager.Ribbon != null)
- {
- Autodesk.AutoCAD.ApplicationServices.Application.Idle -=
- new EventHandler(Application_Idle);
- CreateSimpleButton();
- }
- }
- void Application_SystemVariableChanged(
- object sender,
- Autodesk.AutoCAD.ApplicationServices.
- SystemVariableChangedEventArgs e)
- {
- if (e.Name == "WSCURRENT")
- {
- string cmdNames =
- (string)Autodesk.AutoCAD.ApplicationServices.Application.
- GetSystemVariable(
- "CMDNAMES");
- // Если команда QUICKCUI или CUI активна - выходим
- if (cmdNames.ToUpper().IndexOf("QUICKCUI") >= 0 ||
- cmdNames.ToUpper().IndexOf("CUI") >= 0)
- return;
- CreateSimpleButton();
- }
- }
- public void CreateSimpleButton()
- {
- Autodesk.Windows.RibbonControl ribbonControl =
- Autodesk.Windows.ComponentManager.Ribbon;
- RibbonTab Tab = new RibbonTab();
- Tab.Title = "Проверяем Ленту ";
- Tab.Id = "TESTRIBBON_TAB_ID";
- ribbonControl.Tabs.Add(Tab);
- Autodesk.Windows.RibbonPanelSource srcPanel =
- new RibbonPanelSource();
- srcPanel.Title = "Панель1";
- RibbonPanel Panel = new RibbonPanel();
- Panel.Source = srcPanel;
- Tab.Panels.Add(Panel);
- Autodesk.Windows.RibbonButton button1 = new RibbonButton();
- button1.Text = "Кнопка";
- button1.Size = RibbonItemSize.Large;
- button1.Image =
- getBitmap(Properties.Resources.Apps, 16, 16);
- button1.LargeImage =
- getBitmap(Properties.Resources.Apps, 32, 32);
- button1.ShowText = true;
- button1.CommandParameter = "._LINE ";
- button1.CommandHandler = new SimpleButtonCmdHandler();
- srcPanel.Items.Add(button1);
- Tab.IsActive = true;
- }
- // Использование: getBitmap(Properties.Resources.a_large);
- BitmapImage getBitmap(Bitmap bitmap, int height, int width)
- {
- MemoryStream stream = new MemoryStream();
- bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
- BitmapImage bmp = new BitmapImage();
- bmp.BeginInit();
- bmp.StreamSource = new MemoryStream(stream.ToArray());
- bmp.DecodePixelHeight = height;
- bmp.DecodePixelWidth = width;
- bmp.EndInit();
- return bmp;
- }
- public class SimpleButtonCmdHandler :
- System.Windows.Input.ICommand
- {
- public bool CanExecute(object parameter)
- {
- return true;
- }
- public event EventHandler CanExecuteChanged;
- public void Execute(object parameter)
- {
- if (parameter is RibbonButton)
- {
- // Создаем последовательность из ESC для завершения активной команды
- string esc = "";
- string cmds =
- (string)Autodesk.AutoCAD.ApplicationServices.Application.
- GetSystemVariable("CMDNAMES");
- if (cmds.Length > 0)
- {
- int cmdNum = cmds.Split(new char[] { '\'' }).Length;
- for (int i = 0; i < cmdNum; i++)
- esc += '\x03';
- }
- RibbonButton button = parameter as RibbonButton;
- Document doc =
- Autodesk.AutoCAD.ApplicationServices.Application.
- DocumentManager.MdiActiveDocument;
- doc.SendStringToExecute(esc + button.CommandParameter,
- true, false, false);
- }
- }
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=534
Опубликовано 17.02.2014Отредактировано 17.02.2014 в 11:21:48