LibreOffice 24.8 Hjelp
I tillegg til tilordna makroar til hendingar eller oppretta hendingslyttarar kan du bruka handsamarane for dialogvindauge som har som prinsipp å definera UNO-nøkkelord eller -metodar som er knytte til hendingar som skal overvakast. Hendingshandsamaren er ansvarleg for å utføre metodar ved å bruka protokollen vnd.sun.star.UNO: method_name. I motsetning til lyttarar, som må definere alle støtta metodar, treng handsamaren for dialogvindauge berre to metodar i tillegg til dei tiltenkte control hook skripta.
Fordelane med denne tilgangen er:
Koden som handsamar handlingsdrivne makroar vert pakka,
det løyser hendingar frå makronamn, noko som gjer vedlikehald eller oppdatering enklare, spesielt når du flyttar makroar eller modular.
Denne mekanismen vert med dette illustrert her for Basic- og Python-språk ved hjelp av ein importert kopi av dialogvindauget Access2BasedlgTrace. Unntakshandsaming og lokalisering er ikkje teke med for å gjera resultatet tydlegare..
Eksporterer dialogvindauget Access2Base dlgTrace og importerer det til programbiblioteket MyLib.
I panelet for kontrolleigenskapar i Dialog Editor brukar du fana hendingar til å erstatta makro-tilvisingane med komponent-tilvisingar og skriv inn dei ønskte metodenamna.
Set metodenamnet for dialogknappen Dump to file til _dump2File
Eventuelt kan du definera metodenamna for hendingskomponenten «tast trykt ned» txtTracelog og den trykte museknappen som _openHelp
Du kan også definera at knappen Ok får fokus med komponentmetodenamnet onOkHasfocus
Hendingar som har handlingar knytt til seg, bør nemna protokollen vnd.sun.star.UNO:.
Metoden createDialogWithHandler for com.sun.star.awt.DialogProvider2-tenesta vert brukt for å setja dialogvindauget og handsamaren. Handsamaren er ansvarleg for å implementera brujkargrensesnittet com.sun.star.awt.XDialogEventHandler.
Når du brukar ein handsamar for dialogvindauge, må alle namna på komponentmetodar deklarerast eksplisitt.
I dette eksempelet er dialogvindauget plassert på datamaskinen.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, unohelper
from com.sun.star.awt import XDialogEventHandler
_DLG_PROVIDER = "com.sun.star.awt.DialogProvider2"
class Console(unohelper.Base, XDialogEventHandler):
""" Access2Base konsollhandsamar """
''' henta og tilpassa frå « Créer un dialogue avec gestionnaire d'événements » av JM Zambon
https://wiki.openoffice.org/wiki/FR/Documentation/Python/Creating_Dialog_with_Handler '''
def show(self):
dialog = self.getDialog("MyLib.dlgTrace", embedded=True)
dialog.Title = "Konsole"
dialog.execute()
def callHandlerMethod(self, dialog, event, method):
if method == '_dump2File':
event.Source.setLabel("dump requested")
scr = getBasicScript(script="_DumpToFile", module="Trace",
library='Access2Base')
scr.invoke((event,), (), ())
elif method == '_openHelp':
_msgbox('Not yet implemented')
dialog.endDialog(1)
else:
return False
def getSupportedMethodNames(self):
return ('_dump2File', '_openHelp')
def getDialog(self, libr_dlg: str, embedded=False):
""" Laga eit dialogvindauge ut frå kvar det er plassert """
smgr = XSCRIPTCONTEXT.getComponentContext().ServiceManager
if embedded:
model = XSCRIPTCONTEXT.getDocument()
dp = smgr.createInstanceWithArguments(_DLG_PROVIDER, (model,))
location = "?location=document"
else:
dp = smgr.createInstanceWithContext(_DLG_PROVIDER, ctx)
location = "?location=application"
dlg = dp.createDialogWithHandler("vnd.sun.star.script:"+libr_dlg+location, self)
return dlg
# def getBasicScript() # see note
def _msgbox(prompt='', title=''):
''' Stygg MsgBox '''
import msgbox
mb = msgbox.MsgBox(uno.getComponentContext())
mb.addButton('Howdy')
mb.show(prompt,0,title)
def ConsoleHandler():
Console().show()
g_exportedScripts = (ConsoleHandler,)
Som venta utløyser den manglande metoden onOkHasFocus eit unntak.
Sjå sida Python-oppkall til LibreOffice Basic for omtale av rutinane i getBasicScript og detaljer om korleis ein kan laga skripta på tvers av programmeringsspråka.
I dette eksempelet er dialogvindauget innebygd i eit dokument, men kan også plasserast i datamaskinen.
' <MyLib>.<Handler> module
Public Sub Console_Show()
Dim dp as Object ' com.sun.star.awt.DialogProvider2
Dim dialog As Object ' com.sun.star.awt.XDialog, com.sun.star.awt.XDialogEventHandler
Dim eventHandler As Object ' com.sun.star.awt.XDialogEventHandler
dp = CreateUnoService("com.sun.star.awt.DialogProvider2")
dp.Initialize(Array(ThisComponent)) 'viss dialogvindauget er innebygd i dokumentet
eventHandler = CreateUnoListener("Console_", "com.sun.star.awt.XDialogEventHandler")
dialog = dp.createDialogWithHandler("vnd.sun.star.script:MyLib.dlgTrace?location=document", eventHandler)
dialog.Title = "Konsole"
dialog.execute()
End Sub ' <Handler>.Console_Show()
Private Function Console_callHandlerMethod(dialog as Object, _
event As com.sun.star.document.DocumentEvent, _
method As String) As Boolean
''' Intercept dialog events using .UNO protocol '''
Console_callHandlerMethod = True
Select Case method
Case "_dump2File"
event.Source.setLabel("dump requested")
With GlobalScope.BasicLibraries
If Not .IsLibraryLoaded("Access2Base") Then .LoadLibrary("Access2Base")
End With
Access2Base.Trace._DumpToFile
Case "_openHelp"
MsgBox "Not yet implemented",0 , "Howdy"
'dialog.endDialog(1) viss dialogvindauget er i datamaskinen
Case Else : Console_callHandlerMethod = False
End Select
End Function ' <Handler>.Console_callHandlerMethod
Private Function Console_getSupportedMethodNames()
Console_getSupportedMethodNames = Array("_dump2File", "_openHelp")
End Function ' <Handler>.Console _getSupportedMethodNames
' tilpassa frå « Créer un dialogue avec gestionnaire d'événements » av JM Zambon
' https://wiki.openoffice.org/wiki/FR/Documentation/Python/Creating_Dialog_with_Handler
Som venta gjev den manglande metoden onOkHasFocus eit unntak.