Włącz JavaScript w przeglądarce, aby wyświetlić strony pomocy LibreOfficeDev.

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:

Wywoływanie usługi

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

note

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

tip

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
  
tip

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 LibreOfficeDev, 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")
  
note

Ciąg --- służy do definiowania wiersza 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 LibreOfficeDev 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

tip

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


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

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

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.