Spis treści
Indeks 🔎︎

# Usługa SFWidgets.PopupMenu

Usługa PopupMenu może zostać wykorzystana do tworzenia wyskakujących menu, które można powiązać ze zdarzeniami lub wykonać za pomocą skryptów. Ta usługa zapewnia następujące możliwości:

- Tworzenie wyskakujących menu z niestandardowymi wpisami, polami wyboru i przyciskami radiowymi.

- Dodanie ikon i podpowiedzi do pozycji menu.

## Wywoływanie usługi

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

• 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ługę PopupMenu można utworzyć na wiele sposobów. Poniższy przykład tworzy wyskakujące menu bez kojarzenia go ze zdarzeniem myszy lub aplikacji.

        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("Identyfikator wybranego elementu: " & vResponse)
            myPopup.Dispose()
        End Sub

Uruchomienie zdefiniowanego powyżej Sub spowoduje utworzenie wyskakującego menu z dwoma wpisami w pozycjach X=300 i Y=300 na ekranie.

Przedrostek SFWidgets można pominąć podczas wywoływania usługi PopupMenu.

Poniższy przykład definiuje Sub, który można powiązać ze zdarzeniem myszy:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            ' Wypełnij wyskakujące menu elementami
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' Zrób coś w oparciu o vResponse
            ' ...
            myPopup.Dispose()
        End Sub

Użyj metody Dispose, aby zwolnić zasoby po uruchomieniu menu podręcznego.

Możliwe jest także powiązanie wyskakującego menu ze zdarzeniami wywoływanymi przez aplikacje LibreOffice, formanty formularzy i okien dialogowych. Zdarzenia takie jak „Naciśnięcie przycisku myszy” i „Zwolnienie przycisku myszy” są często kojarzone z wyskakującymi menu.

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

##### W języku Python

Powyższe przykłady można zapisać w Pythonie w następujący sposób:

        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)
            # Wypełnij wyskakujące menu elementami
            response = my_popup.Execute()
            # Zrób coś w oparciu o reakcję
            my_popup.Dispose()

## Właściwości

Nazwa | Tylko do odczytu | Typ | Opis
--- | --- | --- | ---
ShortcutCharacter | Nie | String | Znak używany do określenia klawisza skrótu dla elementu menu. Domyślnym znakiem jest ~.
SubmenuCharacter | Nie | 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 podręczne z podmenu, użyj znaku zdefiniowanego we właściwości SubmenuCharacter podczas tworzenia pozycji menu, aby określić, gdzie zostanie ona umieszczona. 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:

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

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

## Korzystanie z ikon

Elementy menu mogą mieć ikony określone jako argumenty w metodach AddCheckBox, AddItem i AddRadioButton

Ze wszystkich ikon dostępnych w LibreOffice można skorzystać podając ich ścieżkę względem folderu, w którym znajdują się pliki ikon, w folderze instalacyjnym. Ikony znajdują się w następującym folderze:

INSTALLDIR/share/config

Użyj właściwości InstallFolder usługi FileSystem, aby określić, gdzie w systemie jest zainstalowany LibreOffice.

Ten folder zawiera serię plików ZIP zawierających pliki obrazów każdego dostępnego zestawu ikon. Obrazy znajdujące się w tych plikach ZIP są zorganizowane w folderach. Aby użyć ikony, określ plik ikony ze ścieżką do jej lokalizacji w pliku ZIP.

Poniższy przykład wykorzystuje ikonę "sc_newdoc.svg", która znajduje się w folderze "cmd". Znak ukośnika "/" jest używany jako separator ścieżki niezależnie od systemu operacyjnego.

##### W języku Basic

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

##### W języku Python

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

Wszystkie zestawy ikon mają tę samą strukturę wewnętrzną. Rzeczywista wyświetlana ikona zależy od aktualnie używanego zestawu ikon.

## Metody

Lista metod w usłudze PopupMenu
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

Wstawia pole wyboru w wyskakującym menu. Zwraca wartość całkowitą identyfikującą wstawiony element.

### Składnia:

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

### Parametry:

menuitem: definiuje tekst, który ma być wyświetlany w menu. Ten argument określa również hierarchię elementu wewnątrz menu za pomocą znaku podmenu.

name: wartość ciągu, którą należy zwrócić po kliknięciu elementu. Domyślnie używany jest ostatni element hierarchii menu.

status: określa, czy element jest wybierany po utworzeniu menu (domyślnie = False).

icon: ścieżka i nazwa ikony, które należy wyświetlić bez wiodącego separatora ścieżki. Rzeczywista pokazana ikona zależy od zastosowanego zestawu ikony.

tooltip: tekst do wyświetlenia jako podpowiedź.

### Przykład:

##### W języku Basic

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

##### W języku Python

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

## AddItem

Wstawia pozycję menu do wyskakującego menu. Zwraca wartość całkowitą identyfikującą wstawiony element.

### Składnia:

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

### Parametry:

menuitem: definiuje tekst, który ma być wyświetlany w menu. Ten argument określa również hierarchię elementu wewnątrz menu za pomocą znaku podmenu.

name: wartość ciągu, którą należy zwrócić po kliknięciu elementu. Domyślnie używany jest ostatni element hierarchii menu.

icon: ścieżka i nazwa ikony, które należy wyświetlić bez wiodącego separatora ścieżki. Rzeczywista pokazana ikona zależy od zastosowanego zestawu ikony.

tooltip: tekst do wyświetlenia jako podpowiedź.

### Przykład:

##### W języku Basic

          myPopup.AddItem("Element A", Tooltip := "Komunikat opisowy")

##### W języku Python

          my_popup.AddItem("Element A", tooltip = "Komunikat opisowy")

## AddRadioButton

Wstawia pozycję przycisku radiowego w menu podręcznym. Zwraca wartość całkowitą identyfikującą wstawiony element.

### Składnia:

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

### Parametry:

menuitem: definiuje tekst, który ma być wyświetlany w menu. Ten argument określa również hierarchię elementu wewnątrz menu za pomocą znaku podmenu.

name: wartość ciągu, którą należy zwrócić po kliknięciu elementu. Domyślnie używany jest ostatni element hierarchii menu.

status: określa, czy element jest wybierany po utworzeniu menu (domyślnie = False).

icon: ścieżka i nazwa ikony, które należy wyświetlić bez wiodącego separatora ścieżki. Rzeczywista pokazana ikona zależy od zastosowanego zestawu ikony.

tooltip: tekst do wyświetlenia jako podpowiedź.

### Przykład:

##### W języku Basic

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

##### W języku Python

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

## Execute

Wyświetla wyskakujące menu i czeka na akcję użytkownika. Zwraca element kliknięty przez użytkownika.

Jeśli użytkownik kliknie poza wyskakującym menu lub naciśnie klawisz Esc, wówczas żaden element nie zostanie wybrany. W takich przypadkach zwracana wartość zależy od parametru returnid. Jeśli returnid = True i nie wybrano żadnego elementu, zwracana jest wartość 0 (zero). W przeciwnym razie zwracany jest pusty ciąg znaków "".

### Składnia:

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

### Parametry:

returnid: jeśli True, zwracany jest identyfikator wybranego elementu. Jeśli False, metoda zwraca nazwę elementu (Domyślnie = True).

### Przykład:

W poniższych przykładach tworzone jest wyskakujące menu i zwracana jest nazwa elementu, ponieważ argument returnid jest ustawiony na False.

##### W języku Basic

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

##### W języku Python

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

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.

Tematy pokrewne

Usługa SFDialogs.Dialog

Usługa SFDialogs.DialogControl

Usługa SFWidgets.Menu