SFDialogs.Dialog zerbitzua

Dialog zerbitzuak Basic lengoaiaren elkarrizketa-koadroen editorearekin sortutako elkarrizketa-koadroak kudeatzen laguntzen du. Uneko klasearen instantzia bakoitzak erabiltzaileari erakutsiko zaion elkarrizketa-koadro bat ordezkatzen du.

tip

Elkarrizketa-koadroak modu modalean edo ez modalean bistaratu daiteke.


Modu modalean, elkarrizketa-koadroa bistaratu eta makro-prozesuaren exekuzioa gelditu egingo da 'Ados' edo 'Utzi' botoia sakatu arte. Bitartean, elkarrizketa-koadroaren barruan erabiltzaileak exekutatutako ekintzek beste ekintza batzuk abiarazi ditzakete.

Modu ez modalean, elkarrizketa-koadroak "flotatu" egingo du erabiltzailearen mahaigainean eta makro-prozesuaren exekuzioak aurrera jarraituko du. Elkarrizketa-koadro ez modalak ixteko, Terminate() metodoa erabili behar da edo LibreOffice saioa amaitu behar da. Leihoa ixteko botoia desaktibatuta ageri da elkarrizketa-koadro ez modaletan.

Elkarrizketa-koadro bat memoriatik desagertzen da hura esplizituki amaitu ondoren.

tip

SFDialogs.Dialog zerbitzua SFDialogs.DialogControl zerbitzuarekin estuki erlazionatuta dago.


Zerbitzuari deitzea eta hura erabiltzea

Dialog zerbitzua erabiltzeko, ScriptForge liburutegia kargatu edo inportatu behar da:

note

• Basic makroak erabiltzkeo, ScriptForge liburutegia kargatu behar da honako instrukzioa erabiliz:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python scriptak erabiltzeko, berriz, scriptforge modulu baten inportazioa behar dute:
from scriptforge import CreateScriptService


Dialog zerbitzuari CreateScriptService metodoarekin deitzen zaio. Posizioko hiru argumentu behar ditu aktibatuko den elkarrizketa-koadroa zehazteko:

Container: "GlobalScope" aurretik instalatutako liburutegietarako, edo ScriptForge.UI zerbitzuak definitzen duen moduko leiho-izen bat. Balio lehenetsiak, "" kate hutsak, uneko dokumentuari dagokio.

Library: Edukiontziak duen liburutegi baten izena, maiuskulak/minuskulak bereizten ditu. Balio lehenetsia "Standard" da.

DialogName: Elkarrizketa-koadroa izendatzeko erabilitako kate bat, maiuskulak/minuskulak bereizten ditu.

The examples below in Basic and Python display the dlgConsole dialog that belongs to the ScriptForge shared library:


      Dim oDlg As Object, lButton As Long
      Dim Container As String, Library As String, DialogName As String
      Set oDlg = CreateScriptService("SFDialogs.Dialog", "GlobalScope", "ScriptForge", "dlgConsole")
      '...kontrolen hasieratzea hemen doa...
      lButton = oDlg.Execute()
      'Modu lehenetsia = Modal
      If lButton = oDlg.OKBUTTON Then
      '...Prozestatu kontrolak prozesatu eta egin egin beharrekoa hemen
      End If
      oDlg.Terminate()
  

Edo Python erabilita:


    dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', 'ScriptForge', 'dlgConsole')
    # ...kontrolen hasieratzea hemen doa...
    rc = dlg.Execute()
    # Modu lehenetsia Modal da
    if rc == dlg.OKBUTTON:
        #...Prozestatu kontrolak prozesatu eta egin egin beharrekoa hemen
    dlg.Terminate()
  
note

Use the string "GlobalScope" as the container argument when the dialog is stored either in My Macros & Dialogs or in Application Macros & Dialogs.


Retrieving the Dialog instance that triggered a dialog event

An instance of the Dialog service can be retrieved via the SFDialogs.DialogEvent service, provided that the dialog was initiated with the Dialog service. In the example below, oDlg contains the Dialog instance that triggered the dialog event.


    Sub aDialogEventHander(ByRef poEvent As Object)
        Dim oDlg As Object
        Set oDlg = CreateScriptService("SFDialogs.DialogEvent", poEvent)
        ' ...
    End Sub
  

Or using Python:


    def control_event_handler(event: uno):
        dlg = CreateScriptService("SFDialogs.DialogEvent", event)
        # ...
  

Note that in the previous examples, the prefix "SFDialogs." may be omitted when deemed appropriate.

Handling exceptions in event handlers

When creating an event handler for dialog events it is good practice to handle errors inside the subroutine itself. For instance, suppose the event handler below is called when the mouse button is pressed in the dialog window.


    Sub OnMouseButtonPressed(ByRef oEvent As Object)
    On Local Error GoTo Catch
        Dim oDialog As Object
        oDialog = CreateScriptService("DialogEvent", oEvent)
        ' Process the event
        Exit Sub
    Catch:
        MsgBox SF_Exception.Description
        SF_Exception.Clear
    End Sub
  
tip

Call SF_Exception.Clear if you do not want the error to propagate after the dialog execution ended.


In Python use native try/except blocks for exception handling as shown below:


    def on_mouse_button_pressed(event=None):
        try:
            dlg = CreateScriptService("DialogEvent", event)
            # Process the event
        except Exception as e:
            # The object "bas" is an instance of the Basic service
            bas.MsgBox(str(e))
  

Propietateak

Izena

Irakurtzeko soilik

Mota

Deskribapena

OKBUTTON

Bai

Integer

Balioa = 1. 'Ados' botoi bat sakatu da.

CANCELBUTTON

Bai

Integer

Balioa = 0. 'Utzi' botoi bat sakatu da.

Caption

Ez

String

Elkarrizketa-koadroaren izenburua zehazten du.

Height

Ez

Long

Elkarrizketa-koadroaren altuera zehazten du.

Modal

Bai

Boolean

Elkarrizketa-koadroa unean modu modalean exekutatzen ari den zehazten du.

Name

Bai

String

Elkarrizketa-koadroaren izena.

Page

Ez

Integer

Elkarrizketa-koadro batek orri bat baino gehiago eduki dezake, eta erabiltzaileak urratsez urrats zehazkatu behar ditu. 'Dialog' objektuaren 'Page' propietateak definitzen du elkarrizketa-koadroaren zein orri dagoen aktibo.

Visible

Ez

Boolean

Elkarrizketa-koadroa mahaigainean ikusgai dagoen zehazten du. Modu lehenetsian ez da ikusgai egongo 'Exekute()' metodoa exekutatu arte.

XDialogModel

Bai

UNO
object

Elkarrizketa-koadroa ordezkatzen duen UNO objektua. Begiratu APIaren dokumentazioko XControlModel eta UnoControlDialogModel informazio xeheagorako.

XDialogView

Bai

UNO
object

Elkarrizketa-koadroaren bista ordezkatzen duen UNO objektua. Begiartu APIaren dokumentazioko XControl eta UnoControlDialog informazio xeheagorako.

Width

Ez

Long

Elkarrizketa-koadroaren zabalera zehazten du.


Gertaeraren propietateak

Gertaerak abiarazi duen scriptaren erreferentzia duen URI kate bat itzultzen du. Irakurri espezifikazioak scriptgintzako lan-markoaren URI espezifikazioan.

Izena

Irakurtzeko soilik

Basic IDEaren deskribapena

OnFocusGained

Bai

Fokua hartzean

OnFocusLost

Bai

Fokua galtzean

OnKeyPressed

Bai

Tekla sakatuta

OnKeyReleased

Bai

Tekla askatuta

OnMouseDragged

Bai

Tekla sakatuta dagoenean sagua arrastatzean

OnMouseEntered

Bai

Sagua barnean dagoenean

OnMouseExited

Bai

Sagua kanpoan dagoenean

OnMouseMoved

Bai

Sagua mugitzean

OnMousePressed

Bai

Saguaren botoia sakatzean

OnMouseReleased

Bai

Saguaren botoia askatzean


Metodoak

Activate
Center
Controls

EndExecute
Execute
GetTextsFromL10N

Resize
SetPageManager
Terminate


Activate

Ezarri fokua uneko Dialog instantzian. Itzuli True fokuratzeko ongi egin bada.

Metodo honi elkarrizketa-koadro batetik edo kontrol-gertaera batetik deitzen zaio, edo elkarrizketa-koadro bat modu ez modalean bistaratzen denean.

Sintaxia:

svc.Activate(): bool

Adibidea:


      Dim oDlg As Object
      Set oDlg = CreateScriptService(,, "myDialog")
      oDlg.Execute()
      ' ...
      oDlg.Activate()
   

Python zein LibreOffice Basic adibideek espero dute elkarrizketa-koadroa uneko dokumentuaren Standard liburutegian biltegiratuta egongo dela.


     dlg = CreateScriptService(,,'myDialog')
     dlg.Execute()
     # ...
     dlg.Activate()
   

Center

Uneko elkarrizketa-koadroa leiho gurasoaren erdian zentratzen du. Argumenturik gabe, metodoak uneko leihoaren erdian zentratuko du elkarrizketa-koadroa.

True (egia) itzultzen du ongi gauzatzen denean.

Sintaxia:

svc.Center(opt Parent: obj): bool

Parametroak:

Parent: Aukerako objektu bat, hauetako bat izan daiteke…

Adibidea:

Basic lengoaian

     Sub TriggerEvent(oEvent As Object)
         Dim oDialog1 As Object, oDialog2 As Object, lExec As Long
         Set oDialog1 = CreateScriptService("DialogEvent", oEvent) ' Gertaera eragin duen elkarrizketa-koadroa
         Set oDialog2 = CreateScriptService("Dialog", ...) ' Ireki bigarren elkarrizketa-koadro bat
         oDialog2.Center(oDialog1)
         lExec = oDialog2.Execute()
         Select Case lExec
             ...
     End Sub
  
Python lengoaian

     def triggerEvent(event: uno):
       dlg1 = CreateScriptService('DialogEvent.Dialog', event)  # Gertaera eragin duen elkarrizketa-koadroa
       dlg2 = CreateScriptService('Dialog', ...)  # Ireki bigarren elkarrizketa-koadro bat
       dlg2.Center(dlg1)
       rc = dlg2.Execute()
       if rc is False:
         # ...
   

Controls

Hauetako bat itzultzen du:

Sintaxia:

svc.Controls(): str[0..*]

svc.Controls(controlname: str): svc

Parametroak:

ControlName : Baliozko kontrol-izen bat, maiuskulak/minuskulak bereizita, kate gisa. Ez badago, itzuliko den kontrol-izenen zerrenda zeron oinarritutako matrize bat izango da.

Adibidea:


      Dim myDialog As Object, myList As Variant, myControl As Object
      Set myDialog = CreateScriptService("SFDialogs.Dialog", , "Standard", "Dialog1")
      myList = myDialog.Controls()
      Set myControl = myDialog.Controls("myTextBox")
   

     dlg = CreateScriptService('SFDialogs.Dialog','', 'Standard', 'Dialog1')
     ctrls = dlg.Controls()
     ctrl = dlg.Controls('myTextBox')
   

EndExecute

Elkarrizketa-koadro modal baten bistaratzea amaitzen du eta argumentua bueltatzen du uneko Execute() exekuzio-ekintzaren itzulera-balio gisa.

EndExecute() normalean elkarrizketa-koadro batek edo kontrol-gertaera batek abiarazitako makro baten prozesatzean egoten da.

Sintaxia:

svc.EndExecute(returnvalue: int)

Parametroak:

returnvalue: Exekutatzen ari den Execute() metodoari pasatutako balioa.

Adibidea:

LibreOffice Basic erabilita:


      Sub OnEvent(poEvent As com.sun.star.lang.EventObject)
          Dim oDlg As Object
          Set oDlg = CreateScriptService("SFDialogs.DialogEvent", poEvent)
          oDlg.EndExecute(ReturnValue := 25)
      End Sub
   

Python erabilita:


     from com.sun.star.lang import EventObject
     def on_event(event: EventObject):
         dlg = CreateScriptService("SFDialogs.DialogEvent", event)
         dlg.EndExecute(25)
   
tip

Above com.sun.star.lang.EventObject aipamenak aukerakoak dira. Holako oharpenek LibreOffice Application Programming Interface APIa identifikatzen laguntzen dute.


Execute

Bistaratu elkarrizketa-koadroa eta, modala bada, itxaron erabiltzaileak hura amaitu dezan. Itzulitako balioa hauetako bat da:

Modalak ez diren elkarrizketa-koadroen kasuan, metodoak beti 0 itzultzen du eta makroaren exekuzioak aurrera jarraitzen du.

Sintaxia:

svc.Execute(modal: bool = True): int

Parametroak:

modal: False elkarrizketa-koadroa ez modala denean. Balio lehenetsia = True.

Adibidea:

Hurrengo Basic adibidean, myDialog elkarrizketa-koadroa uneko dokumentuaren Standard liburutegian biltegiratzen da.


      Dim oDlg As Object, lReturn As Long
      Set oDlg = CreateScriptService("SFDialogs.Dialog", , , "myDialog")
      lReturn = oDlg.Execute(Modal := False)
      Select Case lReturn
          ' ...
      End Select
   

Hurrengo Python kodeak Euro Basic liburutegi partekatutik bistaratzen duDlgConvert elkarrizketa-koadro modala.


     dlg = CreateScriptService("SFDialogs.Dialog", 'GlobalScope', 'Euro', "DlgConvert")
     rc = dlg.Execute()
     if rc == dlg.CANCELBUTTON:
         # ...
   

GetTextsFromL10N

Elkarrizketa-koadro bateko testu-kate finko guztiak ordezkatzen ditu itzulitako bertsioekin, L10N zerbitzu-instantzia batean oinarrituta. Metodo honek honako kateak itzultzen ditu:

Metodoak True itzultzen du arrakasta badu.

Elkarrizketa-koadro bateko kateak itzuli ahal izan daitezen, erabili L10N zerbitzuaren AddTextsFromDialog metodoa.

Sintaxia:

svc.GetTextsFromL10N(l10n: svc): bool

Parametroak:

l10n: L10N zerbitzuaren instantzia bat, itzuliko diren kateak hortik atzituko dira.

Adibidea:

Hurrengo adibidean, itzulitako kateak kargatzen dira eta "MyDialog" elkarrizketa-koadroari aplikatzen zaizkio.

Basic lengoaian

     oDlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "MyDialog")
     myPO = CreateScriptService("L10N", "/home/user/po_files/")
     oDlg.GetTextsFromL10N(myPO)
     oDlg.Execute()
   
Python lengoaian

     dlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "MyDialog")
     myPO = CreateScriptService("L10N", "/home/user/po_files/")
     dlg.GetTextsFromL10N(myPO)
     dlg.Execute()
   
tip

Irakurri L10N zerbitzuaren laguntza-orria PO eta POT fitxategiak nola erabiltzen diren ikasteko.


Resize

Elkarrizketa-koadro baten goiko ezkerreko izkina koordenatu berrietara eramaten du eta/edo bere dimentsioak aldatzen ditu. Distantzia guztiak 1/100 mm-tan daude adierazita. Argumenturik gabe, metodoak hasierako dimentsioak berrezartzen ditu. True itzultzen du tamaina aldatzea ongi gauzatu bada.

Sintaxia:

svc.Resize(opt Left: num, opt Top: num, opt Width: num, opt Height: num): bool

Parametroak:

Left: Distantzia horizontala goiko ezkerreko izkinatik

Top: Distantzia bertikala goiko ezkerreko izkinatik

Width: Elkarrizketa-koadroa duen laukizuzenaren zabalera

Height: Elkarrizketa-koadroa duen laukizuzenaren altuera

Argumentu negatiboak edo falta direnak ez dira aldatzen

Adibidea:

Basic lengoaian

     oDialog.Resize(1000, 2000, Height := 6000) ' Zabalera ez da aldatzen
   
Python lengoaian

Python bidez:


     oDialog.Resize(1000, 2000, Height = 6000)  # Zabalera ez da aldatzen
   

SetPageManager

Defines which controls in a dialog are responsible for switching pages, making it easier to manage the Page property of a dialog and its controls.

Dialogs may have multiple pages and the currently visible page is defined by the Page dialog property. If the Page property is left unchanged, the default visible page is equal to 0 (zero), meaning that no particular page is defined and all visible controls are displayed regardless of the value set in their own Page property.

When the Page property of a dialog is changed to some other value such as 1, 2, 3 and so forth, then only the controls whose Page property match the current dialog page will be displayed.

By using the SetPageManager method it is possible to define four types of page managers:

tip

It is possible to use more than one page management mechanism at the same time.


This method is supposed to be called just once before calling the Execute method. Subsequent calls are ignored.

If successful this method returns True.

Sintaxia:

svc.SetPageManager(pilotcontrols: str = "", tabcontrols: str = "", wizardcontrols: str = "", opt lastpage: int): bool

Parametroak:

pilotcontrols: a comma-separated list of ListBox, ComboBox or RadioButton control names used as page managers. For RadioButton controls, specify the name of the first control in the group to be used.

tabcontrols: a comma-separated list of button names that will be used as page managers. The order in which they are specified in this argument corresponds to the page number they are associated with.

wizardcontrols: a comma-separated list with the names of two buttons that will be used as the Previous/Next buttons.

lastpage: the number of the last available page. It is recommended to specify this value when using the Previous/Next page manager.

Adibidea:

Consider a dialog with three pages. The dialog has a ListBox control named "aPageList" that will be used to control the visible page. Additionally, there are two buttons named "btnPrevious" and "btnNext" that will be used as the Previous/Next buttons in the dialog.

Basic lengoaian

    oDialog.SetPageManager(PilotControls := "aPageList", _
                           WizardControls := "btnPrevious,btnNext", _
                           LastPage := 3)
    oDialog.Execute()
  
Python lengoaian

    dlg.SetPageManager(pilotcontrols="aPageList",
                       wizardcontrols="btnPrevious,btnNext",
                       lastpage=3)
    dlg.Execute()
  

Terminate

Amaitu Dialog zerbitzua uneko instantziarako. Itzuli True ongi amaitu bada.

Sintaxia:

svc.Terminate(): bool

Adibidea:

Beheko Basic eta Python adibideek DlgConsole eta dlgTrace elkarrizketa-koadro ez modalak irekitzen dituzte. ScriptForge eta Access2Base liburutegi partekatuetan biltegiratzen dira, hurrenez hurren. Elkarrizketa-koadroa ixteko botoiak desgaituta daude eta amaitze esplizitua gauzatzen da exekutatzen ari den prozesu baten amaieran.

Hurrengo adibidean, inhibitutako leiho-ixtea DlgConsole elkarrizketa-koadroko botoi batek ordezten du:

Basic lengoaian

     oDlg = CreateScriptService("SFDialogs.Dialog","GlobalScope","ScriptForge","DlgConsole")
     oDlg.Execute(modal:=False)
     Wait 5000
     oDlg.Terminate()
   

Python bidez:

Python lengoaian

     from time import sleep
     dlg = CreateScriptService('SFDialogs.Dialog',"GlobalScope",'Access2Base',"dlgTrace")
     dlg.Execute(modal=False)
     sleep 5
     dlg.Terminate()
   
warning

Azpimarraren karaktere bat, "_", aurrizki gisa duten ScriptForge Basic errutina edo identifikatzaile guztiak barneko erabilerarako erreserbatuta daude. Ez dira Basic makroetan edo Python scriptetan erabili behar.