LibreOffice Calc. Как узнать какой макрос назначен пункту меню.

Автор ost, 12 июля 2022, 11:22

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

ost

Доброго.
Собственно, сабж.

Если о макросах, назначенных клавиатуре или событиям, можно узнать из соответствующей вкладки окна "Настройка"(ПКМ на любой панели инструментов --> "Настройка панелей инструментов"), то о макросах, назначенных пунктам меню, таким образом не узнать. Или я не знаю как. =(

Спасибо.

mikekaganski

Никак.

В баге 108458 мы добавили всплывающие подсказки для элементов при наведении мыши. Но не в правом списке настройки меню.

Пишите баг ;)
С уважением,
Михаил Каганский

sokol92

А до исправления (надеюсь, написанного) бага можно покопаться в подкаталоге инсталлированного LibreOffice \share\config\soffice.cfg\modules\scalc.  :)

Альтернатива - макросы. Отличный старт - раздел "Toolbars" книги А.Питоньяка AndrewMacro.odt.
Владимир.

sokol92

#3
Нашел один из первых моих макросов, который показывает содержание меню. Просьба отнестись с пониманием к стилю написания.  :)
Sub ShowAllUIElements
  Dim oSupplier, oModuleCfgMgr, oDoc, oSettings, v, v2, v3, v4, i As Long, j as Long, k As Long, s as String
  oSupplier = CreateUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
  oModuleCfgMgr = oSupplier.getUIConfigurationManager("com.sun.star.sheet.SpreadsheetDocument")
  oDoc=StarDesktop.LoadComponentFromUrl("private:factory/scalc", "_blank", 0, Array())     
  For Each v In oModuleCfgMgr.getUIElementsInfo(0)
    i=i+1 ' номер строки
   
    oDoc.Sheets(0).getCellByPosition(0, i).setString v(0).Value
    v2=oModuleCfgMgr.getSettings(v(0).Value, False)
    i=i+1
    For j=0 To v2.Count-1
      i=i+1
      k=0
      v3=v2.getByIndex(j)
      For Each v4 In v3
        k=k+1
        If Not IsNull(v4.Value) Then
          If IsObject(v4.Value) Then  ' для свойства ItemDescriptorContainer значение - контейнер для вложенного меню
            s="Object"
          Else
            s=v4.Value
          End If
          If Len(s)=1 And (k=1 Or k=2 And oDoc.Sheets(0).getCellByPosition(k-1, i).string="") Then
            Exit For   
          End If 
          oDoc.Sheets(0).getCellByPosition(k, i).setString s
          If j=0 Then oDoc.Sheets(0).getCellByPosition(k, i-1).setString v4.Name ' в первой строке для Toolbar показываем имена свойств
        End If 
      Next v4 
    Next j 
  Next v
End Sub
Владимир.

sokol92

#4
Цитата: mikekaganski от 12 июля 2022, 11:41Пишите баг
tdf#112237.

Кстати, открываем диалог Customize, вкладка Tollbars. Элемент управления с заголовком "Available Commands" показывает Uno-команды при наведении курсора мыши, элемент с заголовком Assigned Commands пока не научился. Лайфхак:

Хотим, к примеру, узнать, какая Uno-команда прячется за именем "Export Directly as PDF" в инструментальной линейке "Standard".

1. Правая кнопка мыши по названию / Rename / Ctrl+Ins / Esc (скопировали название команды в буфер обмена).
2. Вставляем в элемент управления с заголовком Search текст из буфера обмена (название команды).
3. Наводим в окне с заголовком "Available Commands" курсор мыши на свою команду ("Export Directly as PDF") и в всплывающем окне видим, что ей соответствует ".uno:ExportDirectToPDF".  Если в окне "Available Commands" выделить интересующую нас команду, то мы ее описание увидим о окне "Description" (откуда можно скопировать в буфер обмена).
Владимир.

ost

sokol92, до макроса пока не добрался.
Пока переназначил макросы на меню снова. =) Код, конечно, поразглядывал предварительно.

Спасибо всем.