18/06/2020
Переопределение клавиши вызова Помощи при помощи CUI API
Существует общая потребность изменить назначение клавиши вызова Помощи с F1 на какую-нибудь другую клавишу (или сочетание клавиш), так как на клавиатуре F1 и ESC находятся рядом, а клавиша ESC используется для отмены запущенной команды или отмены выбранных объектов. Поскольку клавиша F1 соседствует с ESC - шансы нажатия этой клавиши случайно довольно высоки. F1 приводит к появлению окно справки, что в указанных случаях является контрпродуктивным.Чтобы избежать этого, мы можем присвоить F1 команде Отмена, а CTRL + ALT + H для справки.
Код - C#: [Выделить]
- public static void RedefineHelpKey()
- {
- string mainCuiFile = (string)Application.GetSystemVariable("MENUNAME");
- mainCuiFile += ".cuix";
- var doc = Application.DocumentManager.MdiActiveDocument;
- var db = doc.Database;
- var ed = doc.Editor;
- CustomizationSection cs = new CustomizationSection(mainCuiFile);
- AcceleratorCollection acCollection = cs.MenuGroup.Accelerators;
- // Получаем макро для меню Помощь.
- var macros = from MacroGroup mg in cs.MenuGroup.MacroGroups
- from MenuMacro mm in mg.MenuMacros
- where mm.ElementID.Equals("ID_Help") || mm.ElementID.Equals("ID_Cancel")
- select mm;
- foreach (MenuMacro menuMacro in macros)
- {
- if (menuMacro.ElementID.Equals("ID_Help"))
- {
- MenuAccelerator macHelp = new MenuAccelerator(menuMacro,
- /*ShortCutKeyCombination*/"CTRL+ALT+H",
- cs.MenuGroup);
- if (acCollection.Contains(macHelp))
- {
- ed.WriteMessage($"\n Уже содержит клавиши.");
- }
- else
- {
- acCollection.Add(macHelp);
- }
- }
- if (menuMacro.ElementID.Equals("ID_Cancel"))
- {
- //Assigning Cancel to F1
- MenuAccelerator macCancel =
- new MenuAccelerator(menuMacro,
- /*ShortCutKeyCombination*/"F1",
- cs.MenuGroup);
- if (acCollection.Contains(macCancel))
- {
- ed.WriteMessage($"\n Уже содержит клавиши.");
- }
- else
- {
- acCollection.Add(macCancel);
- }
- }
- }
- // Сохраняем CUIX - это создаст и его бэкап.
- cs.Save(true);
- }
Замечание:
Причина того, что изменения не произошли сразу же, связана с тем, что мы меняем основное меню, так что требуется перезапуск AutoCAD.
Примечание переводчика: Можно воспользоваться методом Application.ReloadAllMenus для перезагрузки всех меню без перезапуска AutoCAD
А это команда показывает переопределённые нами клавиши:
Код - C#: [Выделить]
- [CommandMethod("LISTMAC")]
- public static void ListMenuAccelerators()
- {
- var doc = Application.DocumentManager.MdiActiveDocument;
- var db = doc.Database;
- var ed = doc.Editor;
- string mainCuiFile = (string)Application.GetSystemVariable("MENUNAME");
- mainCuiFile += ".cuix";
- CustomizationSection cs = new CustomizationSection(mainCuiFile);
- AcceleratorCollection acCollection = cs.MenuGroup.Accelerators;
- var q = from MenuAccelerator menuAcltr in acCollection
- where menuAcltr.Name.Contains("Help") ||
- menuAcltr.Name.Contains("Cancel")
- select menuAcltr;
- if (q != null && q.ToList().Count > 0)
- {
- foreach (var m in q.ToList())
- {
- ed.WriteMessage($"\n Имя: {m.Name}\n\tКлавиши: {m.AcceleratorShortcutKey}");
- }
- }
- }
Источник: https://adndevblog.typepad.com/autocad/2020/06/redefining-help-shortcut-key-with-cui-api.html
Автор перевода: Александр Ривилис
Опубликовано 18.06.2020
Опубликовано 18.06.2020