Usługa SFWidgets.ContextMenu

Menu kontekstowe są predefiniowane podczas instalacji LibreOffice. Można je dostosować w oknie dialogowym Narzędzia + Dostosuj.

Usługa ContextMenu zapewnia następujące możliwości:

Nowe ustawienia menu nie są nigdzie zapisywane. Ani w dokumencie, ani w ustawieniach LibreOffice.

Menu kontekstowe zazwyczaj uruchamia się po kliknięciu prawym przyciskiem myszy w określonym obszarze dokumentu. Rozważ kliknięcie w komórce lub na karcie arkusza w dokumencie Calc.

Wywoływanie usługi

Przed użyciem usługi ContextMenu należy załadować lub zaimportować bibliotekę ScriptForge:

Ikona notatki

• Podstawowe makra wymagają załadowania biblioteki ScriptForge przy użyciu następującej instrukcji:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Skrypty Pythona wymagają importu z modułu scriptforge:
from scriptforge import CreateScriptService


W języku Basic

Usługa ContextMenu jest tworzona wyłącznie na podstawie metod SF_Document.ContextMenus() i SF_Datasheet.ContextMenus().


    Sub DefineContextMenu()
        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim calc As Object, menu As Object
        Set calc = CreateScriptService("Document", ThisComponent)
        Set menu = calc.ContextMenus("cell")  ' Right-click on a cell
        '  ... Define the context menu ...
        menu.Dispose()
    End Sub
  

Uruchomienie funkcji Sub określonej powyżej powoduje ponowne zdefiniowanie menu kontekstowego powiązanego z konkretnym obszarem w dokumencie, w tym przypadku komórką należącą do dokumentu Calc.

Nowa definicja pozostanie aktywna do momentu zamknięcia dokumentu lub ponownego zdefiniowania menu kontekstowego.

Ikona wskazówki

Użyj metody Dispose, aby zwolnić zasoby po wykonaniu menu kontekstowego.


W języku Python

Powyższy przykład można zapisać w języku Python w następujący sposób:


    from scriptforge import CreateScriptService
    
    def DefineContextMenu(args=None):
        basic = CreateScriptService("Basic")
        calc = CreateScriptService("Document", basic.ThisComponent)
        menu = calc.ContextMenus("cell")  # Right-click on a cell
        #  ... Define the context menu ...
        menu.Dispose()
  

Właściwości

Nazwa

Tylko do odczytu

Typ

Opis

ParentDocument

Tak

Object

Instancja klasy dokumentu nadrzędnego (lub jednej z jej podklas).

ShortcutCharacter

Tak

String

Znak używany do określenia klawisza skrótu dla elementu menu. Domyślnym znakiem jest ~.

SubmenuCharacter

Tak

String

Znak lub ciąg znaków określający sposób zagnieżdżenia elementów menu. Domyślnym znakiem jest >.


Menu i podmenu

Aby utworzyć menu kontekstowe z podmenu, użyj znaku zdefiniowanego we właściwości SubmenuCharacter podczas tworzenia wpisu menu, aby określić jego miejsce umieszczenia. Rozważmy na przykład następującą hierarchię menu/podmenu.


    ' Item A
    ' Item B > Item B.1
    '          Item B.2
    ' ------ (line separator)
    ' Item C > Item C.1 > Item C.1.1
    '                     Item C.1.2
    ' Item C > Item C.2 > Item C.2.1
    '                     Item C.2.2
    '                     ------ (line separator)
    '                     Item C.2.3
    '                     Item C.2.4
  

Poniższy kod wykorzystuje domyślny znak podmenu > do utworzenia hierarchii menu/podmenu zdefiniowanej powyżej:


    menu.AddItem("Item A")
    menu.AddItem("Item B>Item B.1")
    menu.AddItem("Item B>Item B.2")
    menu.AddItem("---")
    menu.AddItem("Item C>Item C.1>Item C.1.1")
    menu.AddItem("Item C>Item C.1>Item C.1.2")
    menu.AddItem("Item C>Item C.2>Item C.2.1")
    menu.AddItem("Item C>Item C.2>Item C.2.2")
    menu.AddItem("Item C>Item C.2>---")
    menu.AddItem("Item C>Item C.2>Item C.2.3")
    menu.AddItem("Item C>Item C.2>Item C.2.4")
  
Ikona notatki

Ciąg --- służy do definiowania wiersza separatora w menu lub podmenu.


Korzystanie z ikon

W przeciwieństwie do menu podręcznych, elementy menu kontekstowego nie mogą zawierać żadnych ikon.

Metody

Lista metod w usłudze ContextMenu

Activate

AddItem

RemoveAllItems


Activate

Udostępnij dodane elementy menu kontekstowego zapisanego w dokumencie do wykonania lub przeciwnie, wyłącz je w zależności od argumentu.

Składnia:

svc.Activate(opt enable: bool = True)

Parametry:

enable: gdy wartość wynosi True (domyślnie), menu lokalne zapisane w dokumencie jest aktywowane. Gdy wartość wynosi False, menu lokalne jest ignorowane, a pierwszeństwo ma menu globalne zdefiniowane na poziomie LibreOffice.

AddItem

Wstawia wpis menu do menu kontekstowego.

Składnia:

svc.AddItem(menuitem: str, opt command: str, opt script: str)

Parametry:

menuitem: określa tekst wyświetlany w menu. Ten argument definiuje również hierarchię elementu w menu za pomocą znaku podmenu. Ustaw ostatni komponent na "---", aby zdefiniować separator wiersza.

command: nazwa polecenia UNO, które zostanie uruchomione po kliknięciu elementu, bez prefiksu .uno:. Jeśli nazwa polecenia nie istnieje lub jest nieodpowiednia, nic się nie stanie.

script: URI skryptu języka Basic lub Python, który zostanie wykonany po kliknięciu elementu. Należy pamiętać, że podany skrypt nie otrzyma żadnego argumentu.

Przykład:

W języku Basic

      menu.AddItem("Menu top>Item 1", command := "About")
      menu.AddItem("Menu top>Item 2", script := "vnd.sun.star.script:myLib.Module1.ThisSub?language=Basic&location=document")
    
W języku Python

      menu.AddItem('Menu top>Item 1', command = 'About')
      menu.AddItem('Menu top>Item 2', script = 'vnd.sun.star.script:Module1.py$thisdef?language=Python&location=document')
    

RemoveAllItems

Usuń wszystkie elementy, oba

Tej czynności nie można cofnąć inaczej niż poprzez zamknięcie i ponowne otwarcie dokumentu.

Następnie, gdy będzie to konieczne, użyj AddItem(), aby wstawić nowe pozycje menu.

Składnia:

svc.RemoveAllItems()

Przykład:

Powiąż następnie Sub/def ze zdarzeniem kliknięcia arkusza prawym przyciskiem myszy. Menu niestandardowe pojawia się po kliknięciu prawym przyciskiem myszy w kolumnie C arkusza Calc, w przeciwnym razie normalne zachowanie jest zachowane.

W języku Basic

      Sub OnRightClick1(Optional XRange)  '  Xrange is a com.sun.star.table.XCellRange object
      Dim calc As Object, menu As Object, in_column As Boolean
      Set calc = CreateScriptService("Calc", ThisComponent)
      Set menu = calc.ContextMenus("cell")
      menu.RemoveAllItems()
      in_column = ( Len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
      If in_column Then
          menu.AddItem("A", script := "vnd.sun.star.script:Standard.Module1.EnterA?language=Basic&location=document")
          ' ...
      End If
      menu.Activate(in_column)
      End Sub
    
W języku Python

        def OnRightClick1(XRange = None)  #  Xrange is a com.sun.star.table.XCellRange object
            basic = CreateScriptService('basic')
            calc = CreateScriptService('Calc', basic.ThisComponent)
            menu = calc.ContextMenus('cell')
            menu.RemoveAllItems()
            in_column = ( len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
            if in_column:
                menu.AddItem('A', script = 'vnd.sun.star.script:Module1.py$EnterA?language=Python&location=document")
                # ...
            menu.Activate(in_column)
    
Ikona ostrzeżenia

Wszystkie podstawowe procedury lub identyfikatory ScriptForge poprzedzone znakiem podkreślenia „_” są zarezerwowane do użytku wewnętrznego. Nie należy ich używać w makrach Basic ani skryptach Pythona.


Prosimy o wsparcie!

Prosimy o wsparcie!