Innhold

# SFWidgets.PopupMenu tjeneste

Tjenesten PopupMenu kan brukes til å lage popup-menyer som kan assosieres med hendelser eller utføres av skript. Denne tjenesten gir følgende funksjoner:

- Oppretting av popup-menyer med egendefinerte oppføringer, avmerkingsbokser og radioknapper.

- Dekorasjon av menyelementer med ikoner og verktøytips.

## Tjenestepåkallelse

Før du bruker PopupMenu-tjenesten, må ScriptForge-biblioteket lastes eller importeres:

• Grunnleggende makroer krever å laste ScriptForge-biblioteket ved hjelp av følgende setning:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-skript krever import fra scriptforge-modulen:
fra scriptforge import CreateScriptService

##### I Basic

Tjenesten PopupMenu kan instansieres på flere måter. Eksemplet nedenfor lager en popup-meny uten å knytte den til en mus- eller programhendelse.

        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("Valgt element-ID: " & vResponse)
            myPopup.Dispose()
        End Sub

Å kjøre Sub definert ovenfor vil lage en popup-meny med to oppføringer i posisjonene X=300 og Y=300 på skjermen.

Prefikset SFWidgets kan undertrykkes mens du starter PopupMenu-tjenesten.

Følgende eksempel definerer en Sub som kan assosieres med en musehendelse:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            ' Fyll popup-menyen med elementer
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            Gjør noe basert på vResponse
            ' ...
            myPopup.Dispose()
        End Sub

Bruk metoden Kasser for å frigjøre ressurser etter at du har kjørt popup-menyen.

Det er også mulig å knytte en popup-meny til hendelser utløst av LibreOffice-applikasjoner, skjema- og dialogkontroller. Hendelser som "Museknapp trykket" og "Museknapp sluppet" er ofte knyttet til popup-menyer.

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

##### I Python

Eksemplene ovenfor kan skrives i Python som følger:

        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)
            # Fyll popupmeny med elementer
            response = my_popup.Execute()
            # Gjør noe basert på respons
            my_popup.Dispose()

## Egenskaper

Navn | Skrivebeskyttet | Type | Beskrivelse
--- | --- | --- | ---
ShortcutCharacter | Nei | String | Tegn som brukes til å definere tilgangsnøkkelen til et menyelement. Standardtegnet er ~.
SubmenuCharacter | Nei | String | Tegn eller streng som definerer hvordan menyelementer er nestet. Standardtegnet er >.

## Meny og undermenyer

For å lage en popup-meny med undermenyer, bruk tegnet som er definert i egenskapen SubmenuCharacter mens du oppretter menyoppføringen for å definere hvor den skal plasseres. Tenk for eksempel på følgende meny-/undermenyhierarki.

        ' 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

Koden nedenfor bruker standard undermeny-tegnet > for å lage meny-/undermeny-hierarkiet definert ovenfor:

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

Strengen --- brukes til å definere skillelinjer i menyer eller undermenyer.

## Ved hjelp av ikoner

Elementer i menyen kan ha ikoner, som er spesifisert som argumenter i metodene AddCheckBox, AddItem og AddRadioButton.

Alle ikoner som er tilgjengelige i LibreOffice kan brukes ved å spesifisere banen deres i forhold til mappen der ikonfilene er plassert i installasjonsmappen. Ikoner er plassert i følgende mappe:

INSTALLDIR/share/config

Bruk egenskapen InstallFolder til FileSystem-tjenesten for å finne ut hvor LibreOffice er installert i systemet ditt.

Denne mappen inneholder en serie ZIP-filer som inneholder bildefilene til hvert tilgjengelige ikonsett. Bildene i disse ZIP-filene er organisert i mapper. For å bruke et ikon, spesifiser ikonfilen med banen til plasseringen i ZIP-filen.

Eksemplet nedenfor bruker ikonet "sc_newdoc.svg" som ligger inne i "cmd"-mappen. Skråstreken "/" brukes som baneskilletegn uavhengig av operativsystemet.

##### I Basic

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

##### I Python

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

Alle ikonsett har samme interne struktur. Det faktiske ikonet som vises avhenger av ikonsettet som er i bruk.

## Metoder

Liste over metoder i PopupMenu-tjenesten
AddCheckBox AddItem | AddRadioButton | Execute

## AddCheckBox

Setter inn en avmerkingsboks i hurtigmenyen. Returnerer en heltallsverdi som identifiserer det innsatte elementet.

### Syntaks:

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

### Parametre:

menuitem: Definerer teksten som skal vises i menyen. Dette argumentet definerer også hierarkiet til elementet inne i menyen ved å bruke undermeny-tegnet.

navn: Strengverdi som skal returneres når elementet klikkes. Som standard brukes den siste komponenten i menyhierarkiet.

status: Definerer om elementet er valgt når menyen opprettes (Standard = Usann).

ikon: Bane og navn på ikonet som skal vises uten baneskilletegn. Det faktiske ikonet som vises avhenger av ikonsettet som brukes.

verktøytips: Tekst som skal vises som verktøytips.

### Eksempel:

##### I Basic

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

##### I Python

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

## AddItem

Setter inn en menyoppføring i hurtigmenyen. Returnerer en heltallsverdi som identifiserer det innsatte elementet.

### Syntaks:

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

### Parametre:

menuitem: Definerer teksten som skal vises i menyen. Dette argumentet definerer også hierarkiet til elementet inne i menyen ved å bruke undermeny-tegnet.

navn: Strengverdi som skal returneres når elementet klikkes. Som standard brukes den siste komponenten i menyhierarkiet.

ikon: Bane og navn på ikonet som skal vises uten baneskilletegn. Det faktiske ikonet som vises avhenger av ikonsettet som brukes.

verktøytips: Tekst som skal vises som verktøytips.

### Eksempel:

##### I Basic

          myPopup.AddItem("Vare A", Verktøytips := "En beskrivende melding")

##### I Python

          my_popup.AddItem("Vare A", tooltip = "En beskrivende melding")

## AddRadioButton

Setter inn en alternativknappoppføring i hurtigmenyen. Returnerer en heltallsverdi som identifiserer det innsatte elementet.

### Syntaks:

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

### Parametre:

menuitem: Definerer teksten som skal vises i menyen. Dette argumentet definerer også hierarkiet til elementet inne i menyen ved å bruke undermeny-tegnet.

navn: Strengverdi som skal returneres når elementet klikkes. Som standard brukes den siste komponenten i menyhierarkiet.

status: Definerer om elementet er valgt når menyen opprettes (Standard = Usann).

ikon: Bane og navn på ikonet som skal vises uten baneskilletegn. Det faktiske ikonet som vises avhenger av ikonsettet som brukes.

verktøytips: Tekst som skal vises som verktøytips.

### Eksempel:

##### I Basic

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

##### I Python

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

## Execute

Viser popup-menyen og venter på en brukerhandling. Returnerer elementet som brukeren har klikket på.

Hvis brukeren klikker utenfor popup-menyen eller trykker på Esc-tasten, er ingen element valgt. I slike tilfeller avhenger den returnerte verdien av parameteren returnid. Hvis returnid = Sann og ingen gjenstand er valgt, returneres verdien 0 (null). Ellers returneres en tom streng "".

### Syntaks:

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

### Parametre:

returnid: Hvis True returneres den valgte vare-ID-en. Hvis False returnerer metoden elementets navn (Standard = Sann).

### Eksempel:

I eksemplene nedenfor opprettes en popup-meny og elementets navn returneres fordi argumentet returnid er satt til False.

##### I Basic

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

##### I Python

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

Alle ScriptForge Grunnleggende rutiner eller identifikatorer som er prefikset med et understrekingstegn "_" er reservert for intern bruk. De er ikke ment å brukes i grunnleggende makroer eller Python-skript.

Lignende emner

SFDialoger.Dialog tjeneste

SFDialogs.DialogControl tjeneste

SFWidgets.Meny tjeneste

Supporter oss!