Добавить кнопку в понтекстное меню

Автор Тема: Добавить кнопку в понтекстное меню  (Прочитано 5464 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Можно ли через API добавить кнопку в контекстное меню для выделенных выносок в чертеже?

P.S. Меня уже задолбала эта измененная система выравнивания позиционных выносок в чертеже - вот написал свой код и хотелось бы прикрутить кнопку для нее.

Отмечено как Решение filat 05-07-2016, 13:39:52

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Можно, но там несколько муторно.
Генерится своя команда в меню динамически, т.е. тебе нужно все время обрабатывать событие:

Код - C++ [Выбрать]
  1. UserInputEvents.OnLinearMarkingMenu

В сигнатуре события есть переменная
Код - C++ [Выбрать]
  1. LinearMenu
типа
Код - C++ [Выбрать]
  1. CommandControls

в ней можно команду добавить.

Не помню был ли пример в хэлпе или нет, но у тя должно получится, филат, я в тебя верю!


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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
у тя должно получится, филат, я в тебя верю!
С таким-то учителем - это даже не вопрос!  ;)
Все получилось! Правда неприятным сюрпризом было отсутствие имени у контекстного меню и пришлось городить огород из условий для вылавливания именно нужного мне меню...
Но вопрос еще остался вот какой: AddButton - добавляет кнопку в конце списка. А есть ли способ управляемого добавления кнопки по нужному порядковому номеру?

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
А есть ли способ управляемого добавления кнопки по нужному порядковому номеру?
Я на кад.ру приводил пример добавления кнопки для размеров. Вот оттуда код на VBA, тут и условия отлавливания и порядок вставки:
Код - Visual Basic [Выбрать]
  1. Option Explicit
  2. Private WithEvents oConMenu As UserInputEvents
  3.  
  4. Private Sub Class_Initialize()
  5.     Set oConMenu = ThisApplication.CommandManager.UserInputEvents
  6. End Sub
  7.  
  8. Private Sub Class_Terminate()
  9.   Set oConMenu = Nothing
  10. End Sub
  11.  
  12. Private Sub oConMenu_OnLinearMarkingMenu(ByVal SelectedEntities As ObjectsEnumerator, _
  13.         ByVal SelectionDevice As SelectionDeviceEnum, ByVal LinearMenu As CommandControls, _
  14.         ByVal AdditionalInfo As NameValueMap)
  15.     If ThisApplication.ActiveDocumentType <> kDrawingDocumentObject Then Exit Sub
  16.     If SelectedEntities.count > 0 Then
  17.         If SelectedEntities.Item(1).Type = kLinearGeneralDimensionObject Then
  18.            Dim myButton As ButtonDefinition
  19.            Set myButton = ThisApplication.CommandManager.ControlDefinitions.Item("AppZoomAllCmd")
  20.  
  21.            Call LinearMenu.AddButton(myButton, , , "DrawingNewDimensionStyleCtxCmd", True)
  22.         End If
  23.     End If
  24. End Sub

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Код - Visual Basic [Выбрать]
  1. ... .AddButton(myButton, , , "DrawingNewDimensionStyleCtxCmd", True)
И это получилось реализовать. Стоит только уточнить, что нужно указывать имя команды, перед которой желаеете вставить новую кнопку. Хотя мне логика твердила, чно нужно указать имя команды ПОСЛЕ которой нужно сделать вставку...
И еще вопрос: как выполнить добавление черты "----" в этом меню?

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Стоит только уточнить, что нужно указывать имя команды, перед которой желаеете вставить новую кнопку. Хотя мне логика твердила, чно нужно указать имя команды ПОСЛЕ которой нужно сделать вставку...
Код - Visual Basic [Выбрать]
  1. Call LinearMenu.AddButton(myButton, , , "DrawingNewDimensionStyleCtxCmd")
  2. Call LinearMenu.AddButton(myButton, , , "DrawingNewDimensionStyleCtxCmd", True)
  3. Call LinearMenu.AddSeparator("DrawingNewDimensionStyleCtxCmd", True)
В первой строке кнопка вставляется после указанной команды, во второй перед командой, в третьей вставляется черта...