Dienst SFWidgets.PopupMenu

Der Dienst PopupMenu kann verwendet werden, um Popup-Menüs zu erstellen, die Ereignissen zugeordnet oder von Skripten ausgeführt werden können. Dieser Dienst bietet die folgenden Funktionen:

Dienstaufruf

Vor der Verwendung des Dienstes PopupMenu muss die Bibliothek ScriptForge geladen oder importiert werden:

note

• 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 Service PopupMenu kann auf mehrere Arten instanziiert werden. Das folgende Beispiel erstellt ein Popup-Menü, ohne es mit einem Maus- oder Anwendungsereignis zu verknüpfen.


    Sub ShowPopup
        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim myPopup As Object
        Set myPopup = CreateScriptService("SFWidgets.PopupMenu", , 300, 300)
        myPopup.AddItem("Item ~A")
        myPopup.AddItem("Item ~B")
        vResponse = myPopup.Execute()
        MsgBox("Ausgewählte Element-ID: " & vResponse)
        myPopup.Dispose()
    End Sub
  

Wenn Sie das oben definierte Sub ausführen, wird ein Popup-Menü mit zwei Einträgen an den Positionen X=300 und Y=300 auf dem Bildschirm erstellt.

tip

Das Präfix SFWidgets kann beim Aufruf des Dienstes PopupMenu unterdrückt werden.


Das folgende Beispiel definiert ein Sub, das einem Mausereignis zugeordnet werden kann:


    Sub MyPopupClick(Optional poMouseEvent as Object)
        Dim myPopup As Object
        Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
        ' Popupmenü mit Einträgen füllen
        Dim vResponse As Variant
        vResponse = myPopup.Execute(False)
        ' Etwas tun, das auf vResponse basiert
        ' ...
        myPopup.Dispose()
    End Sub
  
tip

Verwenden Sie die Methode Dispose, um Ressourcen nach dem Ausführen des Popup-Menüs freizugeben.


Es ist auch möglich, ein Popup-Menü mit Ereignissen zu verknüpfen, die von LibreOffice-Anwendungen, Formular- und Dialogsteuerungen ausgelöst werden. Ereignisse wie „Maustaste gedrückt“ und „Maustaste losgelassen“ werden üblicherweise mit Popup-Menüs in Verbindung gebracht.


    Sub MyPopupClick(Optional poEvent as Object)
        Dim myPopup As Object
        Set myPopup = CreateScriptService("PopupMenu", poEvent)
        ' ...
    End Sub
  
In Python

Die obigen Beispiele können wie folgt in Python geschrieben werden:


    from scriptforge import CreateScriptService
    
    def show_popup(args=None):
        my_popup = CreateScriptService("SFWidgets.PopupMenu", None, 300, 300)
        bas = CreateScriptService("Basic")
        my_popup.AddItem("Item ~A")
        my_popup.AddItem("Item ~B")
        response = my_popup.Execute()
        bas.MsgBox(f"Selected item ID: {response}")
        my_popup.Dispose()
  

    def my_popup_click(poEvent=None):
        my_popup = CreateScriptService("SFWidgets.PopupMenu", poEvent)
        # Popupmenü mit Elementen füllen
        response = my_popup.Execute()
        # Etwas basierend auf der Antwort machen
        my_popup.Dispose()
  

Eigenschaften

Name

Schreibgeschützt

Typ

Beschreibung

ShortcutCharacter

Nein

String

Zeichen, das verwendet wird, um die Zugriffstaste eines Menüpunkts zu definieren. Das Standardzeichen ist ~.

SubmenuCharacter

Nein

String

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


Menü und Untermenüs

Um ein Popup-Menü mit Untermenüs zu erstellen, verwenden Sie das in der Eigenschaft SubmenuCharacter definierte Zeichen, während Sie den Menüeintrag erstellen, um zu definieren, wo er platziert wird. Betrachten Sie beispielsweise die folgende 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:


    myPopup.AddItem("Item A")
    myPopup.AddItem("Item B>Item B.1")
    myPopup.AddItem("Item B>Item B.2")
    myPopup.AddItem("---")
    myPopup.AddItem("Item C>Item C.1>Item C.1.1")
    myPopup.AddItem("Item C>Item C.1>Item C.1.2")
    myPopup.AddItem("Item C>Item C.2>Item C.2.1")
    myPopup.AddItem("Item C>Item C.2>Item C.2.2")
    myPopup.AddItem("Item C>Item C.2>---")
    myPopup.AddItem("Item C>Item C.2>Item C.2.3")
    myPopup.AddItem("Item C>Item C.2>Item C.2.4")
  
note

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


Symbole verwenden

Elemente im Menü können Symbole haben, die als Argumente in den Methoden AddCheckBox, AddItem und AddRadioButton angegeben werden.

Alle in LibreOffice verfügbaren Symbole können verwendet werden, indem ihr Pfad relativ zu dem Ordner festgelegt wird, in dem sich die Symboldateien im Installationsordner befinden. Symbole befinden sich im folgenden Ordner:

INSTALLDIR/share/config

tip

Verwenden Sie die Eigenschaft InstallFolder des Dienstes FileSystem, um festzustellen, wo LibreOffice in Ihrem System installiert ist.


Dieser Ordner enthält eine Reihe von ZIP-Dateien, welche die Bilddateien jedes verfügbaren Symbolsatzes enthalten. Die Bilder in diesen ZIP-Dateien sind in Ordnern organisiert. Um ein Symbol zu verwenden, legen Sie die Symboldatei mit dem Pfad zu ihrem Speicherort in der ZIP-Datei fest.

Das folgende Beispiel verwendet das Symbol „sc_newdoc.svg“, das sich im Ordner „cmd“ befindet. Der Schrägstrich „/“ wird unabhängig vom Betriebssystem als Pfadtrennzeichen verwendet.

In Basic

      myMenu.AddItem("Item A", Icon := "cmd/sc_newdoc.svg")
    
In Python

      myMenu.AddItem("Item A", icon="cmd/sc_newdoc.svg")
    
note

Alle Icon-Sets haben die gleiche interne Struktur. Das tatsächlich angezeigte Symbol hängt von dem derzeit verwendeten Symbolsatz ab.


Methoden

Liste der Methoden im Dienst PopupMenu

AddCheckBox
AddItem

AddRadioButton

Execute


AddCheckBox

Fügt ein Markierfeld in das Popup-Menü ein. Gibt einen ganzzahligen Wert zurück, der das eingefügte Element identifiziert.

Syntax:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: str): int

Parameter:

menuitem: Definiert den im Menü anzuzeigenden Text. Dieses Argument definiert auch die Hierarchie des Elements innerhalb des Menüs, indem es das Untermenüzeichen verwendet.

name: Zeichenfolge, die zurückgegeben wird, wenn auf das Element geklickt wird. Standardmäßig wird die letzte Komponente der Menühierarchie verwendet.

status: Legt fest, ob das Element ausgewählt ist, wenn das Menü erstellt wird (Standard = False).

icon: Pfad und Name des anzuzeigenden Symbols ohne führenden Pfadtrenner. Das tatsächlich angezeigte Symbol hängt vom verwendeten Symbolsatz ab.

tooltip: Text, der als Infotext angezeigt werden soll.

Beispiel:

In Basic

      myPopup.AddCheckBox("Option A", Status := True)
    
In Python

      my_popup.AddCheckBox("Option A", status=True)
    

AddItem

Fügt einen Menüeintrag in das Popup-Menü ein. Gibt einen ganzzahligen Wert zurück, der das eingefügte Element identifiziert.

Syntax:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: str): int

Parameter:

menuitem: Definiert den im Menü anzuzeigenden Text. Dieses Argument definiert auch die Hierarchie des Elements innerhalb des Menüs, indem es das Untermenüzeichen verwendet.

name: Zeichenfolge, die zurückgegeben wird, wenn auf das Element geklickt wird. Standardmäßig wird die letzte Komponente der Menühierarchie verwendet.

icon: Pfad und Name des anzuzeigenden Symbols ohne führenden Pfadtrenner. Das tatsächlich angezeigte Symbol hängt vom verwendeten Symbolsatz ab.

tooltip: Text, der als Infofeld angezeigt werden soll.

Beispiel:

In Basic

      myPopup.AddItem("Element A", Tooltip := "Eine beschreibende Nachricht")
    
In Python

      my_popup.AddItem("Eintrag A", Tooltip = "Eine beschreibende Nachricht")
    

AddRadioButton

Fügt einen Optionsfeld-Eintrag in das Popup-Menü ein. Gibt einen ganzzahligen Wert zurück, der das eingefügte Element identifiziert.

Syntax:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: str): int

Parameter:

menuitem: Definiert den im Menü anzuzeigenden Text. Dieses Argument definiert auch die Hierarchie des Elements innerhalb des Menüs, indem es das Untermenüzeichen verwendet.

name: Zeichenfolge, die zurückgegeben wird, wenn auf das Element geklickt wird. Standardmäßig wird die letzte Komponente der Menühierarchie verwendet.

status: Definiert, ob das Element ausgewählt ist, wenn das Menü erstellt wird (Standard = False).

icon: Pfad und Name des anzuzeigenden Symbols ohne führenden Pfadtrenner. Das tatsächlich angezeigte Symbol hängt vom verwendeten Symbolsatz ab.

tooltip: Text der als Infobox angezeigt werden soll.

Beispiel:

In Basic

      myPopup.AddRadioButton("Option A", Name := "A", Status := True)
    
In Python

      my_popup.AddRadioButton("Option A", name="A", status=True)
    

Execute

Zeigt das Popup-Menü an und wartet auf eine Benutzeraktion. Gibt das Element zurück, auf das der Benutzer geklickt hat.

Wenn der Benutzer außerhalb des Popup-Menüs klickt oder die Taste Esc drückt, wird kein Element ausgewählt. In solchen Fällen hängt der zurückgegebene Wert vom Parameter returnid ab. Wenn returnid = True und kein Eintrag ausgewählt ist, dann wird der Wert 0 (Null) zurückgegeben. Andernfalls wird eine leerer Zeichenfolge "" zurückgegeben.

Syntax:

svc.Execute(opt returnid: bool = True): any

Parameter:

returnid: Bei True wird die ausgewählte Element-ID zurückgegeben. Wenn False, gibt die Methode den Namen des Elements zurück (Standard = True).

Beispiel:

In den folgenden Beispielen wird ein Popup-Menü erstellt und der Name des Elements zurückgegeben, da das Argument returnid auf False gesetzt ist.

In Basic

      myPopup.AddItem("Item A", Name := "A")
      myPopup.AddItem("Item B", Name := "B")
      Dim vResponse as Variant
      vResponse = myPopup.Execute(False)
    
In Python

      my_popup.AddItem("Item A", name="A")
      my_popup.AddItem("Item B", name="B")
      response = my_popup.Execute(False)
    
warning

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!