Inhalte

# 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:

- Erstellung von Popup-Menüs mit benutzerdefinierten Einträgen, Markier- und Optionsfeldern.

- Dekoration von Menüeinträgen mit Icons und Infotexten.

## Dienstaufruf

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

• 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.

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

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

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

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

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)

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.

Verwandte Themen

Dienst SFDialogs.Dialog

Dienst SFDialogs.DialogControl

Dienst SFWidgets.Menu