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

tip

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


Prosimy o wsparcie!