Laga ein handsamar for dialogvindauge

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:

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

Tilordna dialogvindaugemetodar

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.

Hendingar som har handlingar knytt til seg, bĂžr nemna protokollen vnd.sun.star.UNO:.

Oppretta handsaminga

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.

warning

NÄr du brukar ein handsamar for dialogvindauge, mÄ alle namna pÄ komponentmetodar deklarerast eksplisitt.


Med Python

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,)
          
      
note

Som venta utlĂžyser den manglande metoden onOkHasFocus eit unntak.


tip

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.


Med LibreOffice Basic

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
      
note

Som venta gjev den manglande metoden onOkHasFocus eit unntak.