LibreOffice 7.6 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.