Tjenesten SFWidgets.ContextMenu

Kontekstmenuer er forhåndsdefinerede ved LibreOffice-installation. De kan tilpasse i dialogen Funktioner + Tilpas.

Tjenesten ContextMenu tilbyder følgende funktioner:

De nye menuindstillinger gemmes ikke noget sted. Hverken i dokumentet eller i LibreOffice-indstillingerne.

En kontekstmenu udløses normalt af et højreklik på et bestmet område af et dokument. Tænk på at klikke i en celle eller på en arkfane i et Calc-dokument.

Kald af tjeneste

Før du bruger ContextMenu-tjenesten, skal ScriptForge-biblioteket være indlæst eller importeret:

Noteikon

• Basic-makroer kræver, at biblioteket ScriptForge indlæses med følgende udtryk:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python-scripts kræver import af scriptforge-modulet:
from scriptforge import CreateScriptService


I Basic

Tjenesten ContextMenu instantieres kun fra metoderne 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
  

Kører du den Sub, som er defineret ovenfor, omdefineres kontekstmenuen hørende til et bestemt område i dokumentet, i dette tilfælde en celler i et Calc-dokument.

Den nye definition forbliver aktiv indtil dokumentet lukkes, eller indtil kontekstmenuen bliver omdefineret igen.

Tipikon

Brug Dispose-metoden til at frigive ressourcer efter du har udført kontekstmenuen.


I Python

Eksemplet ovenfor kan skrives i Python på denne måde:


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

Egenskaber

Navn

Readonly (Skrivebeskyttet)

Type

Beskrivelse

ParentDocument

Ja

Object

Instansen af den overordnede dokumentklasse (eller en af dens underklasser).

ShortcutCharacter

Ja

String

Tegn som bruges til at definere genvejstast for et menuelement. Standardtegnet er ~.

SubmenuCharacter

Ja

String

Tegn eller streng, som definerer hvordan menuelementer er indlejret (undermenuer). Standardtegnet er > .


Menuer og undermenuer

For at oprette en kontekstmenu med undermenuer, brug tegnet defineret i SubmenuCharacter-egenskaben, når du opretter det menu-element, hvor undermenuen skal placeres. Som eksempel, se det følgende menu/undermenu-hierarki.


    ' 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 bruger standard-undermenutegnet > til at oprette menu/undermenu-hierarkiet defineret 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")
  
Noteikon

Strengen --- bruges til at definere skillelinjer i menuer eller undermenuer.


Brug af ikoner

I modsætning til pop op-menuer, må kontekstmenuer ikke indeholde nogen ikoner.

Metoder

Liste over metoder i ContextMenu-tjenesten

Activate

AddItem

RemoveAllItems


Activate

Gør de tilføjede elementer fra kontekstmenuen gemt i dokumentet tilgængelige for udførelse, eller modsat, deaktivér dem, afhængigt af argumentet.

Syntaks:

svc.Activate(opt enable: bool = True)

Parametre:

enable (aktivér): Når True (standardværdi) bliver den lokale menu, som er gemt i dokumentet, gjort aktiv. Når False, ignoreres den lokale menu, og den globale menu defineret på LibreOffice-niveau har forrang.

AddItem

Indsætter et menuelement i kontekstmenuen.

Syntaks:

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

Parametre:

menuitem (menuelement): Angiver den tekst, som skal vises i menuen. Dette argument definerer også hierarkiet af elementet i menuen ved hjælp af undermenu-tegnet. Sæt den sidste komponent til "---" for at definere en skillelinje.

command (kommando): Navnet på den UNO-kommando, som skal køres, når der klikkes på elementet, uden .uno-præfikset. Hvis kommandonavnet ikke eksisterer eller ikke er er aktuelt, vil ingenting ske.

script: URI'en (adressen) for et Basic- eller Python-script, der bliver udført, når der klikkes på elementet. Bemærk at det givne script ikke vil modtage nogen argumenter.

Eksempel:

I Basic

      menu.AddItem("Menu top>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("Menu top>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 elementer, begge

Denne handling kan ikke fortrydes undtagen ved at lukke og genåbne dokumentet.

Bagefter, brug AddItem() til at indsætte nye menuelementer., når det er relevant.

Syntaks:

svc.RemoveAllItems()

Eksempel:

Tilknyt næste Sub/def med højreklik-hændelsen for et ark. Den tilpassede menu vises når der højreklikkes i kolonne C på Calc-arket, ellers bevares den normale opfø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)
    
Advarselsikon

Alle ScriptForge Basic-rutiner eller identifikatorer, der indledes med et understregstegn "_" er reserveret til internt brug. Det er ikke meningen, at de skal bruges i Basic-makroer eller Python-scripts.


Støt os venligst!

Støt os venligst!