Innhold

# SFWidgets.Meny tjeneste

Tjenesten Meny kan brukes til å opprette og fjerne menyer fra menylinjen i et LibreOffice-dokumentvindu. Hver menyoppføring kan knyttes til et skript eller med en UNO-kommando. Denne tjenesten gir følgende funksjoner:

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

- Dekorasjon av menyelementer med ikoner og verktøytips.

Menyer opprettet med denne tjenesten er kun tilgjengelig for et spesifisert dokumentvindu. De lagres ikke i dokumentet eller som programinnstillinger. Å lukke og åpne dokumentet vil gjenopprette standard menylinjeinnstillinger.

Når OLE-objekter som Math-formler eller Calc-diagrammer redigeres fra et dokument, rekonfigurerer LibreOffice menylinjen i henhold til objektet. Når dette skjer, fjernes menyene som er opprettet med Meny-tjenesten og blir ikke gjenopprettet etter redigering av OLE-objektet.

## Tjenestepåkallelse

Før du bruker Meny-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 Meny instansieres ved å anrope CreateMenu-metoden fra Dokument-tjenesten. Kodebiten nedenfor oppretter en meny kalt Min meny i det gjeldende dokumentvinduet med to oppføringer Element A og Element B.

        Sub CreateMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim oDoc as Object, oMenu as Object
            Set oDoc = CreateScriptService("Document")
            Sett oMenu = oDoc.CreateMenu("Min meny")
            With oMenu
                .AddItem("Element A", Kommando := "Om")
                .AddItem("Element B", Script := "vnd.sun.star.script:Standard.Module1.ItemB_Listener?language=Basic&location=application")
                .Dispose()
            End With
        End Sub

Etter å ha opprettet menyen, anbefales det å kalle Kasser-metoden for å frigjøre ressursene som brukes av Meny-tjenesteforekomsten.

I eksemplet ovenfor er Item A assosiert med UNO-kommandoen .uno:About mens Item B er assosiert med skriptet ItemB_Listener definert i Module1 i Standard-biblioteket i Mine makroer-kontaineren.

Følgende eksempel definerer ItemB_Listener som vil bli kalt når Item B klikkes. Denne lytteren deler ganske enkelt argumentstrengen som sendes til Sub og viser dem i en meldingsboks.

        Sub ItemB_Listener(args As String)
            ' Behandle argumentstrengen som sendes til lytteren
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Menynavn: " & sArgs(0) & Chr(13) & _
                   "Menyelement: " & sArgs(1) & Chr(13) & _
                   "Item ID: " & sArgs(2) & Chr(13) & _
                   "Elementstatus: " & sArgs(3)
        End Sub

Som vist i eksempelet ovenfor, mottar menyoppføringer knyttet til et skript et kommadelt strengargument med følgende verdier:

- Toppnivånavnet på menyen.

- Streng-IDen til den valgte menyoppføringen.

- Den numeriske ID-en til den valgte menyoppføringen.

- Den nåværende tilstanden til menyelementet. Dette er nyttig for avmerkingsbokser og alternativknapper. Hvis varen er krysset av, returneres verdien "1", ellers returneres "0".

##### I Python

Eksemplene ovenfor kan skrives i Python som følger:

        from scriptforge import CreateScriptService

        def create_menu(args=None):
            oDoc = CreateScriptService("Document")
            oMenu = oDoc.CreateMenu("My Menu")
            oMenu.AddItem("Item A", command="About")
            oMenu.AddItem("Item B", script="vnd.sun.star.script:my_macros.py$item_b_listener?language=Python&location=user")
            oMenu.Dispose()

        def item_b_listener(args):
            bas = CreateScriptService("Basic")
            s_args = args.split(",")
            msg = f"Menynavn: {s_args[0]}\n"
            msg += f"Menyelement: {s_args[1]}\n"
            msg += f"Element-ID: {s_args[2]}\n"
            msg += f"Element status: {s_args[3]}"
            bas.MsgBox(msg)

## 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 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-/undermenyhierarkiet definert ovenfor:

        oMenu.AddItem("Item A")
        oMenu.AddItem("Item B>Item B.1")
        oMenu.AddItem("Item B>Item B.2")
        oMenu.AddItem("---")
        oMenu.AddItem("Item C>Item C.1>Item C.1.1")
        oMenu.AddItem("Item C>Item C.1>Item C.1.2")
        oMenu.AddItem("Item C>Item C.2>Item C.2.1")
        oMenu.AddItem("Item C>Item C.2>Item C.2.2")
        oMenu.AddItem("Item C>Item C.2>---")
        oMenu.AddItem("Item C>Item C.2>Item C.2.3")
        oMenu.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 menytjenesten
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

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

### Syntaks:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool, opt icon: str, opt tooltip: str, opt command: str, opt script: 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 brukes til å identifisere menyelementet. 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.

kommando: Navnet på en UNO-kommando uten prefikset .uno:. Hvis kommandonavnet ikke eksisterer, skjer ingenting.

script: URI for et Basic- eller Python-skript som vil bli utført når elementet klikkes.

Argumentene kommando og script utelukker hverandre, derfor kan bare ett av dem settes for hvert menyelement.

Les Scripting Framework URI Specification for å lære mer om URI-syntaksen som brukes i skript argument.

### Eksempel:

##### I Basic

          ' Menyoppføring knyttet til kommandoen .uno:Paste
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          ' Kjører det grunnleggende skriptet Standard.Module1.MyListener som er lagret i dokumentet
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' Kjører Python-skriptet MyListener som ligger i filen myScripts.py i brukerskriptmappen
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

##### I Python

          oMenu.AddCheckBox("Item A", status=True, tooltip="Paste values", command="Paste")
          oMenu.AddCheckBox("Item B", status=False, script="vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          oMenu.AddCheckBox("Item C", Status=True, Script="vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

## AddItem

Setter inn en etikettoppføring i menyen. Returnerer en heltallsverdi som identifiserer det innsatte elementet.

### Syntaks:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: str, opt command: str, opt script: 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.

kommando: Navnet på en UNO-kommando uten prefikset .uno:. Hvis kommandonavnet ikke eksisterer, skjer ingenting.

script: URI for et Basic- eller Python-skript som vil bli utført når elementet klikkes.

Argumentene kommando og script utelukker hverandre, derfor kan bare ett av dem settes for hvert menyelement.

Les Scripting Framework URI Specification for å lære mer om URI-syntaksen som brukes i skript argument.

### Eksempel:

##### I Basic

          oMenu.AddItem("Element A", Verktøytips := "En beskrivende melding")

##### I Python

          oMenu.AddItem("Element A", Verktøytips := "En beskrivende melding")

## AddRadioButton

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

### Syntaks:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: str, opt icon: str, opt tooltip: str, opt command: str, opt script: 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.

kommando: Navnet på en UNO-kommando uten prefikset .uno:. Hvis kommandonavnet ikke eksisterer, skjer ingenting.

skript: URI for et Basic- eller Python-skript som vil bli utført når elementet klikkes.

Argumentene kommando og script utelukker hverandre, derfor kan bare ett av dem settes for hvert menyelement.

Les Scripting Framework URI Specification for å lære mer om URI-syntaksen som brukes i skript argument.

### Eksempel:

##### I Basic

          oMenu.AddRadioButton("Item A", Name := "A", Status := True)

##### I Python

          oMenu.AddRadioButton("Item A", name="A", status=True)

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

SFWidgets.PopupMenu tjeneste

SFDocuments.Dokument tjeneste

Supporter oss!