SFWidgets.Kontekstmeny-tjeneste

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

ContextMenu-tjenesten tilbyr følgende funksjoner:

De nye menyinnstillingene lagres ikke noe sted. Verken i dokumentet eller i LibreOffice-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:

Merknadsikon

• 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.

Tipsikon

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

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å LibreOffice-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

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

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.


Supporter oss!

Supporter oss!