SFWidgets.ContextMenu service

Innhold

# SFWidgets.Kontekstmeny-tjeneste

Kontekstmenyer er forhåndsdefinerte ved installasjon av LibreOfficeDev. De kan tilpasses i dialogboksen Verktøy + Tilpass.

ContextMenu-tjenesten tilbyr følgende funksjoner:

- Erstatt midlertidig alle menyelementene i en bestemt kontekstmeny.

- Legg midlertidig til nye menyelementer nederst i en forhåndsdefinert kontekstmeny.

- Gjør kontekstmenyen midlertidig inaktiv.

De nye menyinnstillingene lagres ikke noe sted. Verken i dokumentet eller i LibreOfficeDev-innstillingene.

En hurtigmeny utløses vanligvis ved å høyreklikke på et bestemt område i et dokument. Tenk deg å klikke i en celle eller på en arkfane i et Calc-dokument.

## Tjenestepåkallelse

Før du bruker ContextMenu-tjenesten, må ScriptForge-biblioteket lastes inn 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

ContextMenu-tjenesten instansieres kun fra metodene SF_Document.ContextMenus() og SF_Datasheet.ContextMenus().

        Sub DefineContextMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim calc As Object, menu As Object
            Set calc = CreateScriptService("Document", ThisComponent)
            Set menu = calc.ContextMenus("cell")  ' Right-click on a cell
            '  ... Define the context menu ...
            menu.Dispose()
        End Sub

Å kjøre Sub som er definert ovenfor, omdefinerer kontekstmenyen relatert til et bestemt område i dokumentet, her en celle som tilhører et Calc-dokument.

Den nye definisjonen vil forbli aktiv til dokumentet lukkes eller til kontekstmenyen defineres på nytt.

Bruk Dispose-metoden for å frigjøre ressurser etter at du har kjørt kontekstmenyen.

##### I Python

Eksemplet ovenfor kan skrives i Python som følger:

        from scriptforge import CreateScriptService

        def DefineContextMenu(args=None):
            basic = CreateScriptService("Basic")
            calc = CreateScriptService("Document", basic.ThisComponent)
            menu = calc.ContextMenus("cell")  # Right-click on a cell
            #  ... Define the context menu ...
            menu.Dispose()

## Egenskaper

Navn | Skrivebeskyttet | Type | Beskrivelse
--- | --- | --- | ---
ParentDocument | Ja | Object | Forekomsten av den overordnede dokumentklassen (eller en av dens underklasser).
ShortcutCharacter | Ja | String | Tegn som brukes til å definere tilgangstasten til et menyelement. Standardtegnet er ~.
SubmenuCharacter | Ja | String | Tegn eller streng som definerer hvordan menyelementer nestes. Standardtegnet er >.

## Meny og undermenyer

For å opprette en kontekstmeny med undermenyer, bruk tegnet som er definert i SubmenuCharacter-egenskapen når du oppretter menyoppføringen for å definere hvor den skal plasseres. Tenk deg for eksempel 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 undermenytegnet > for å opprette meny-/undermenyhierarkiet som er definert ovenfor:

        menu.AddItem("Item A")
        menu.AddItem("Item B>Item B.1")
        menu.AddItem("Item B>Item B.2")
        menu.AddItem("---")
        menu.AddItem("Item C>Item C.1>Item C.1.1")
        menu.AddItem("Item C>Item C.1>Item C.1.2")
        menu.AddItem("Item C>Item C.2>Item C.2.1")
        menu.AddItem("Item C>Item C.2>Item C.2.2")
        menu.AddItem("Item C>Item C.2>---")
        menu.AddItem("Item C>Item C.2>Item C.2.3")
        menu.AddItem("Item C>Item C.2>Item C.2.4")

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

## Bruk av ikoner

I motsetning til popup-menyer, må ikke kontekstmenyelementer inneholde noen ikoner.

## Metoder

Liste over metoder i kontekstmenytjenesten
Activate | AddItem | RemoveAllItems

## Activate

Gjør de tillagte elementene fra kontekstmenyen som er lagret i dokumentet tilgjengelige for utførelse, eller, omvendt, deaktiver dem, avhengig av argumentet.

### Syntaks:

svc.Activate(opt enable: bool = True)

### Parametre:

aktiver: Når Sann er satt til (standard), blir den lokale menyen som er lagret i dokumentet aktiv. Når Falsk er satt til, ignoreres den lokale menyen, og den globale menyen som er definert på LibreOfficeDev-nivå, prioriteres.

## AddItem

Setter inn en menyoppføring i hurtigmenyen.

### Syntaks:

svc.AddItem(menuitem: str, opt command: str, opt script: str)

### Parametre:

menuitem: Definerer teksten som skal vises i menyen. Dette argumentet definerer også hierarkiet til elementet i menyen ved å bruke undermenytegnet. Sett den siste komponenten til "---" for å definere et linjeskilletegn.

kommando: Navnet på UNO-kommandoen som kjøres når elementet klikkes på, uten prefikset .uno:. Hvis kommandonavnet ikke finnes eller ikke er aktuelt, vil ingenting skje.

script: URI-en for et Basic- eller Python-skript som kjøres når elementet klikkes. Merk at det gitte skriptet ikke vil få noen argumenter.

### Eksempel:

##### I Basic

          menu.AddItem("Meny øverst>Element 1", command := "Om")
          menu.AddItem("Menu top>Item 2", script := "vnd.sun.star.script:myLib.Module1.ThisSub?language=Basic&location=document")

##### I Python

          menu.AddItem('Toppmeny>Element 1', command = 'Om')
          menu.AddItem('Menu top>Item 2', script = 'vnd.sun.star.script:Module1.py$thisdef?language=Python&location=document')

## RemoveAllItems

Fjern alle gjenstander, begge

- forhåndsdefinert med Verktøy + Tilpass og lagret i dokumentet

- lagt til med contextmenu.AddItem()

Denne handlingen kan ikke angres uten å lukke og åpne dokumentet på nytt.

Etterpå, når det er relevant, bruk AddItem() for å sette inn nye menyelementer.

### Syntaks:

svc.RemoveAllItems()

### Eksempel:

Knytt neste Sub/def til høyreklikk-hendelsen i et ark. Den tilpassede menyen vises når du høyreklikker i kolonne C i Calc-arket, ellers bevares normal oppførsel.

##### I Basic

          Sub OnRightClick1(Optional XRange)  '  Xrange is a com.sun.star.table.XCellRange object
          Dim calc As Object, menu As Object, in_column As Boolean
          Set calc = CreateScriptService("Calc", ThisComponent)
          Set menu = calc.ContextMenus("cell")
          menu.RemoveAllItems()
          in_column = ( Len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
          If in_column Then
              menu.AddItem("A", script := "vnd.sun.star.script:Standard.Module1.EnterA?language=Basic&location=document")
              ' ...
          End If
          menu.Activate(in_column)
          End Sub

##### I Python

            def OnRightClick1(XRange = None)  #  Xrange is a com.sun.star.table.XCellRange object
                basic = CreateScriptService('basic')
                calc = CreateScriptService('Calc', basic.ThisComponent)
                menu = calc.ContextMenus('cell')
                menu.RemoveAllItems()
                in_column = ( len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
                if in_column:
                    menu.AddItem('A', script = 'vnd.sun.star.script:Module1.py$EnterA?language=Python&location=document")
                    # ...
                menu.Activate(in_column)

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

SFWidgets.Meny tjeneste

Supporter oss!