Dienst SFWidgets.ContextMenu

Kontextmenüs sind bei der Installation von LibreOfficeDev vordefiniert. Sie können im Dialog unter Extras – Anpassen… angepasst werden.

Der Dienst ContextMenu bietet folgende Funktionen:

Die neuen Menüeinstellungen werden nirgends gespeichert. Weder im Dokument noch in den LibreOfficeDev-Einstellungen.

Ein Kontextmenü wird üblicherweise durch einen Rechtsklick auf einen bestimmten Bereich eines Dokuments aufgerufen. Beispielsweise durch Klicken in eine Zelle oder auf ein Tabellenregister in einem Calc-Dokument.

Dienstaufruf

Bevor der Dienst ContextMenu verwendet werden kann, muss die Bibliothek ScriptForge geladen oder importiert werden:

Notizsymbol

• Grundlegende Makros erfordern das Laden der Bibliothek ScriptForge mit der folgenden Anweisung:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python-Skripte erfordern einen Import aus dem Modul scriptforge:
from scriptforge import CreateScriptService


In Basic

Der Dienst ContextMenu wird ausschließlich über die Methoden SF_Document.ContextMenus() und SF_Datasheet.ContextMenus() instanziiert.


    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
  

Durch Ausführen des oben definierten Sub wird das Kontextmenü für einen bestimmten Bereich im Dokument neu definiert, hier für eine Zelle, die zu einem Calc-Dokument gehört.

Die neue Definition bleibt so lange aktiv, bis das Dokument geschlossen oder das Kontextmenü erneut definiert wird.

Tippsymbol

Die Methode Dispose verwenden, um Ressourcen nach dem Aufruf des Kontextmenüs freizugeben.


In Python

Das obige Beispiel kann in Python wie folgt geschrieben werden:


    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()
  

Eigenschaften

Name

Schreibgeschützt

Typ

Beschreibung

ParentDocument

Ja

Object

Die übergeordnete Dokumentklasse (oder eine ihrer Unterklassen) als Instanz.

ShortcutCharacter

Ja

String

Zu verwendendes Zeichen, um die Zugriffstaste eines Menüpunkts festzulegen. Das Standardzeichen ist ~.

SubmenuCharacter

Ja

String

Zeichen oder Zeichenfolge, die festlegt, wie Menüelemente verschachtelt sind. Das Standardzeichen ist >.


Menü und Untermenüs

Um ein Kontextmenü mit Untermenüs zu erstellen, beim Erstellen des Menüeintrags das in der Eigenschaft SubmenuCharacter definierte Zeichen verwenden, um dessen Position festzulegen. Beispielsweise bei folgender Menü-/Untermenühierarchie.


    ' 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
  

Der folgende Code verwendet das standardmäßige Untermenüzeichen >, um die oben definierte Menü-/Untermenühierarchie zu erstellen:


    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")
  
Notizsymbol

Die Zeichenfolge --- wird verwendet, um Trennlinien in Menüs oder Untermenüs festzulegen.


Symbole verwenden

Im Gegensatz zu Popup-Menüs dürfen Kontextmenüpunkte keine Symbole enthalten.

Methoden

Liste der Methoden im Dienst „ContextMenu“

Activate

AddItem

RemoveAllItems


Activate

Je nach Argument können die hinzugefügten Elemente des im Dokument gespeicherten Kontextmenüs zur Ausführung bereitgestellt oder deaktiviert werden.

Syntax:

svc.Activate(opt enable: bool = True)

Parameter:

enable: Wenn True (Standard), wird das im Dokument gespeicherte lokale Menü aktiviert. Wenn False, wird das lokale Menü ignoriert und das auf der Ebene LibreOfficeDev definierte globale Menü hat Vorrang.

AddItem

Fügt einen Menüeintrag in das Kontextmenü ein.

Syntax:

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

Parameter:

menuitem: Legt den im Menü anzuzeigenden Text fest. Dieses Argument legt außerdem die Hierarchie der Menüpunkte mithilfe des Untermenüzeichens fest. Die letzte Komponente auf "---" setzen, um einen Zeilenumbruch festzulegen.

command: Der Name des UNO-Befehls, der beim Anklicken des Elements ausgeführt wird, ohne das Präfix .uno:. Existiert der Befehlsname nicht oder ist er nicht anwendbar, geschieht nichts.

script: Die URI für ein Basic- oder Python-Skript, das beim Anklicken des Elements ausgeführt wird. Das angegebene Skript benötigt keine Argumente.

Beispiel:

In 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")
    
In 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

Alle Einträge entfernen, beide

Diese Aktion kann nur durch Schließen und erneutes Öffnen des Dokuments rückgängig gemacht werden.

Anschließend können gegebenenfalls mit der Funktion AddItem() neue Menüpunkte eingefügt werden.

Syntax:

svc.RemoveAllItems()

Beispiel:

Das nächste Sub/def mit dem Rechtsklick-Ereignis einer Tabelle verknüpfen. Das benutzerdefinierte Menü wird beim Rechtsklick in Spalte C der Calc-Tabelle angezeigt; ansonsten bleibt das normale Verhalten erhalten.

In 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
    
In 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)
    
Warnsymbol

Alle ScriptForge Basic-Routinen oder Bezeichner, denen ein Unterstrich "_" vorangestellt ist, sind für den internen Gebrauch reserviert. Sie sind nicht für die Verwendung in Basic-Makros oder Python-Skripten vorgesehen.


Bitte unterstützen Sie uns!

Bitte unterstützen Sie uns!