Pomoč LibreOfficeDev 7.6
Storitev Dialog prispeva upravljanju pogovornih oken, ustvarjenih z Basicovim Urejevalnikom pogovornih oken. Vsaka instanca trenutnega razreda predstavlja posamezno pogovorno okno, prikazano uporabniku.
Pogovorno okno je lahko prikazano v modalnem ali ne modalnem načinu.
V modalnem načinu je okno prikazano in izvedba procesa makra je začasno ustavljena, dokler ni pritisnjen eden od gumbov V redu ali Prekliči. Medtem lahko dejanja uporabnika, izvedena v oknu, sprožijo določena dejanja.
V ne modalnem načinu pogovorno okno »plava« na namizju uporabnika in izvedba procesa makra se nemoteno nadaljuje. Ne modalno pogovorno okno se zapre, ko ga zaključite z metodo Terminate() ali ko se seja LibreOfficeDev konča. Gumb za zapiranje okna v ne modalnih pogovornih oknih ni aktivno.
Po eksplicitni prekinitvi pogovorno okni izgine iz pomnilnika.
Storitev SFDialogs.Dialog je tesno povezana s storitvijo SFDialogs.DialogControl.
Pred uporabo storitve Dialog je potrebno naložiti ali uvoziti knjižnico ScriptForge:
Storitev Dialog prikličete prek metode CreateScriptService. Zahteva tri položajne argumente, da določite pogovorno polje, ki ga želite aktivirati:
Container: "GlobalScope" za vnaprej nameščene knjižnice ali ime okna, kot je določeno s storitvijo ScriptForge.UI. Prazen niz "" privzeto predstavlja trenutni dokument.
Library: ime (razlikuje med velikimi in malimi črkami) knjižnice, vsebovane v hranilniku. Privzeta vrednost je "Standard".
DialogName: niz, ki opredeljuje ime pogovornega okna (razlikuje med velikimi in malimi črkami).
Spodnja primera v Basicu in Pythonu prikažeta pogovorno okno dlgConsole, ki pripada knjižnici ScriptForge v skupni rabi:
      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")
      '... inicializacija kontrolnikov sodi semkaj ...
      lButton = oDlg.Execute()
      'Privzeti način = modalni
      If lButton = oDlg.OKBUTTON Then
      '... Obdelaj kontrolnike in opravi, kar je tu potrebno
      End If
      oDlg.Terminate()
  Ali z uporabo Pythona:
    dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', 'ScriptForge', 'dlgConsole')
    # ... inicializacija kontrolnikov sodi semkaj ...
    rc = dlg.Execute()
    # Privzeti način je modalni (Modal)
    if rc == dlg.OKBUTTON:
        # ... Obdelaj kontrolnike in opravi, kar je tu potrebno
    dlg.Terminate()
  Uporabite niz »GlobalScope« kot argument container, če je pogovorno okno shranjeno v ali v .
Instanco storitve Dialog lahko pridobite tudi prek storitve SFDialogs.DialogEvent, če je pogovorno okno nastalo s storitvijo Dialog. V spodnjem primeru vsebuje oDlg instanco storitve ialog, ki je sprožila dogodek.
    Sub aDialogEventHander(ByRef poEvent As Object)
        Dim oDlg As Object
        Set oDlg = CreateScriptService("SFDialogs.DialogEvent", poEvent)
        ' ...
    End Sub
  Ali z uporabo Pythona:
    def control_event_handler(event: uno):
        dlg = CreateScriptService("SFDialogs.DialogEvent", event)
        # ...
  V prejšnjih primerih ste morda opazili, da lahko predpono "SFDialogs." izpustite, ko je to ustrezno.
Pri ustvarjanju krmilnika dogodkov za dogodke pogovornega okna je dobra praksa, da napake obravnavamo znotraj samega podprograma. Primer: predpostavimo, da se spodnji krmilnik dogodkov kliče, ko pritisnete gumb miške v oknu pogovornega okna.
    Sub OnMouseButtonPressed(ByRef oEvent As Object)
    On Local Error GoTo Catch
        Dim oDialog As Object
        oDialog = CreateScriptService("DialogEvent", oEvent)
        ' Obravnava dogodka
        Exit Sub
    Catch:
        MsgBox SF_Exception.Description
        SF_Exception.Clear
    End Sub
  Kličite SF_Exception.Clear, če ne želite, da se napaka širi naprej, potem ko se je izvajanje pogovornega okna zaključilo.
V Pythonu uporabite domorodne bloke try/except za ravnanje z izjemami, kot je prikazano spodaj:
    def on_mouse_button_pressed(event=None):
        try:
            dlg = CreateScriptService("DialogEvent", event)
            # Obravnava dogodka
        except Exception as e:
            # Predmet »bas« je instanca storitve Basic
            bas.MsgBox(str(e))
  | Ime | Samo za branje | Vrsta | Opis | 
|---|---|---|---|
| OKBUTTON | Da | Integer | Vrednost = 1. Pritisnjen je bil gumb V redu. | 
| CANCELBUTTON | Da | Integer | Vrednost = 0. Pritisnjen je bil gumb Prekliči. | 
| Caption | Ne | String | Določite naslov pogovornega okna. | 
| Height | Ne | Long | Določite višino pogovornega okna. | 
| Modal | Da | Boolean | Določa, ali je pogovorno okno trenutno v izvedbi v modalnem načinu. | 
| Name | Da | String | Ime pogovornega okna | 
| Page | Ne | Integer | Pogovorno okno ima lahko več strani, med katerimi uporabnik napreduje po korakih. Lastnost Page predmeta Dialog določa, katera stran pogovornega okna je aktivna. | 
| Visible | Ne | Boolean | Določa, ali je pogovorno okno vidno na namizju. Privzeto ni vidno, dokler ne izvedete metode Execute(); šele nato je vidno. | 
| XDialogModel | Da | UNO | Predmet UNO, ki predstavlja model pogovornega okna. Podrobnosti si oglejte v dokumentaciji API-ja za XControlModel in UnoControlDialogModel. | 
| XDialogView | Da | UNO | Predmet UNO, ki predstavlja pogled pogovornega okna. Podrobnosti si oglejte v dokumentaciji API-ja za vmesnika XControl in UnoControlDialog. | 
| Width | Ne | Long | Določite širino pogovornega okna. | 
Vrne niz URI s sklicem na skript, ki ga je dogodek sprožil. Preberite njegovo specifikacijo v specifikaciji URI ogrodja skriptanja (v angl.).
| Ime | Samo za branje | Opis Basic IDE | 
|---|---|---|
| OnFocusGained | Da | Ob pridobljeni pozornosti | 
| OnFocusLost | Da | Ob izgubljeni pozornosti | 
| OnKeyPressed | Da | Tipka pritisnjena | 
| OnKeyReleased | Da | Tipka sproščena | 
| OnMouseDragged | Da | Miška premaknjena ob pritisnjeni tipki | 
| OnMouseEntered | Da | Miškin kazalec znotraj | 
| OnMouseExited | Da | Miškin kazalec zunaj | 
| OnMouseMoved | Da | Miška premaknjena | 
| OnMousePressed | Da | Gumb miške pritisnjen | 
| OnMouseReleased | Da | Gumb miške sproščen | 
| Seznam metod v storitvi Dialog | ||
|---|---|---|
Pozornost nastavi na trenutno instanco Dialog. Vrne True, če je bilo določanje pozornosti uspešno.
To metodo kliče dogodek pogovornega okna ali kontrolnika oz. ko je pogovorno okno prikazano v ne modalnem načinu.
svc.Activate(): bool
      Dim oDlg As Object
      Set oDlg = CreateScriptService(,, "myDialog")
      oDlg.Execute()
      ' ...
      oDlg.Activate()
   Primeri v Pythonu in LibreOfficeDev Basicu predvidevajo, da je pogovorno okno shranjeno v knjižnici Standardno trenutnega dokumenta.
     dlg = CreateScriptService(,,'myDialog')
     dlg.Execute()
     # ...
     dlg.Activate()
   Osredini instanco trenutnega pogovornega okna na sredo nadrejenega okna. Metoda brez argumentov osredini pogovorno okno na sredo trenutnega okna.
Vrne True, če uspe.
svc.Center(opt Parent: obj): bool
Parent: neobvezni predmet, ki je lahko ...
predmet pogovornega okna ScriptForge,
predmet dokumenta ScriptForge (Calc, Base, ...).
     Sub TriggerEvent(oEvent As Object)
         Dim oDialog1 As Object, oDialog2 As Object, lExec As Long
         Set oDialog1 = CreateScriptService("DialogEvent", oEvent) ' Pogovorno okno, ki je povzročilo dogodek
         Set oDialog2 = CreateScriptService("Dialog", ...) ' Odpre drugo pogovorno okno
         oDialog2.Center(oDialog1)
         lExec = oDialog2.Execute()
         Select Case lExec
             ...
     End Sub
  
     def triggerEvent(event: uno):
       dlg1 = CreateScriptService('DialogEvent.Dialog', event)  # Pogovorno okno, ki je povzročilo dogodek
       dlg2 = CreateScriptService('Dialog', ...)  # Odpre drugo pogovorno okno
       dlg2.Center(dlg1)
       rc = dlg2.Execute()
       if rc is False:
         # ...
   Vrne lahko:
seznam kontrolnikov, ki jih vsebuje pogovorno okno, ali
instanco razreda kontrolnika pogovornega okna DialogControl glede na njegovo ime.
svc.Controls(): str[0..*]
svc.Controls(controlname: str): svc
ControlName: ime veljavnega kontrolnika kot niz, razlikuje med velikimi in malimi črkami. Če ni podano, vrne seznam imen kontrolnikov kot ničelno polje.
      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')
   Vrne prikaz modalnega pogovornega okna in vrne argument kot vrnjeno vrednost trenutne izvedenega dejanja Execute().
EndExecute() je običajno vsebovana v obdelavi makra, ki jo proži dogodek pogovornega okna ali kontrolnika.
svc.EndExecute(returnvalue: int)
returnvalue: vrednost, podana izvajani metodi Execute().
Z uporabo LibreOfficeDev Basica:
      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
   Z uporabo Pythona:
     from com.sun.star.lang import EventObject
     def on_event(event: EventObject):
         dlg = CreateScriptService("SFDialogs.DialogEvent", event)
         dlg.EndExecute(25)
   Zgornje omembe com.sun.star.lang.EventObject so neobvezne. Takšni zaznamki so v pomoč pri identificiranju API-ja LibreOfficeDev.
Prikaže pogovorno okno in, če je podrejeno oz. modalno, počaka na njegovo zaprtje na strani uporabnika. Vrnjena vrednost je lahko le:
0: pritisnjen gumb Prekliči
1: pritisnjen gumb V redu
Sicer se je pogovorno okno ustavilo z ukazom EndExecute(), ki ga je izdalo pogovorno okno ali dogodek kontrolnika.
Za ne modalna pogovorna okna metoda vedno vrne 0, izvajanje makra pa se nadaljuje.
svc.Execute(modal: bool = True): int
modal: False, če gre za glavno oz. ne-modalno okno. Privzeto = True.
Ta primer PogovornoOkno1 v Basicu je shranjen v knjižnici Standardno trenutnega dokumenta.
      Dim oDlg As Object, lReturn As Long
      Set oDlg = CreateScriptService("SFDialogs.Dialog", , , "myDialog")
      lReturn = oDlg.Execute(Modal := False)
      Select Case lReturn
          ' ...
      End Select
   Ta koda Python prikaže modalno pogovorno okno DlgConvert iz knjižnice Basic Euro, ki je v skupni rabi.
     dlg = CreateScriptService("SFDialogs.Dialog", 'GlobalScope', 'Euro', "DlgConvert")
     rc = dlg.Execute()
     if rc == dlg.CANCELBUTTON:
         # ...
   Zamenja vse nespremenljive nize besedila v pogovornem oknu z njihovimi prevedenimi različicami glede na instanco storitve L10N. Ta metoda prevede naslednje nize:
Metoda vrne True, če uspe.
Če želite ustvariti seznam nizov, ki jih je mogoče v pogovornem oknu prevesti, uporabite metodo AddTextsFromDialog iz storitev L10N.
svc.GetTextsFromL10N(l10n: svc): bool
l10n: instanca storitve L10N, iz katere bodo pridobljeni prevedeni nizi.
Naslednji primer naloži prevedene nize in jih uporabi v pogovornem oknu »MyDialog«.
     oDlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "MyDialog")
     myPO = CreateScriptService("L10N", "/home/user/po_files/")
     oDlg.GetTextsFromL10N(myPO)
     oDlg.Execute()
   
     dlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "MyDialog")
     myPO = CreateScriptService("L10N", "/home/user/po_files/")
     dlg.GetTextsFromL10N(myPO)
     dlg.Execute()
   Preverite stran pomoči storitve L10N, da izveste več o ravnanju z datotekami PO in POT.
Premakne levi vrhnji kot pogovornega okna na nove koordinate in/ali spremeni njegove mere. Vse razdalje so izražene v 1/100 mm. Metoda brez argumentov ponastavi začetne mere. Vrne True, če je sprememba velikosti uspela.
svc.Resize(opt Left: num, opt Top: num, opt Width: num, opt Height: num): bool
Left: vodoravna razdalja do levega zgornjega kota.
Top: navpična razdalja do levega zgornjega kota.
Width: širina pravokotnika, ki vsebuje pogovorno okno.
Height: višina pravokotnika, ki vsebuje pogovorno okno.
Negativni ali manjkajoči argumenti ostanejo nespremenjeni
     oDialog.Resize(1000, 2000, Height := 6000) ' Širina je nespremenjen
   S Pythonom:
     oDialog.Resize(1000, 2000, Height = 6000) # Širina je nespremenjen
   Določa, kateri kontrolniki v pogovornem oknu so odgovorni za preklapljanje med stranmi, zaradi česar je enostavneje upravljati lastnost Page pogovornega okna in njegovih kontrolnikov.
Pogovorna okna imajo lahko več strani in trenutno vidno stran določa lastnost pogovornega okna Page. Če ostane lastnost Page nespremenjena, je privzeta vidna stran enaka 0 (nič), kar pomeni, da nobena posamična stran ni določena in da so vsi vidni kontrolniki prikazani, ne glede na vrednost, nastavljeno z njihovo posamično lastnostjo Page.
Če je lastnost Page pogovornega okna spremenjena v neko drugo vrednost, ko so 1, 2, 3 itn., se prikažejo samo kontrolniki, katerih lastnost Page se ujema s trenutno stranjo pogovornega okna.
Z uporabo metode SetPageManager je možno določiti štiri vrste upraviteljev strani:
Seznamsko polje ali kombinirano polje: v tem primeru vsak vnos v seznamskem oz. kombiniranem polju predstavlja eno stran. Prvi element se sklicuje na stran 1, drugi element na stran 2 itn.
Skupina izbirnih gumbov: določa skupino izbirnih gumbov, ki nadzirajo, katera stran je vidna.
Zaporedje gumbov: določa množico gumbov, vsak od njih ustreza drugi strani pogovornega okna. Uporabite jih lahko tudi za posnemanje vmesnika v zavihkih, tako da gumbe v pogovornem oknu postavite enega ob drugega.
Gumbi Prejšnji/Naslednji: določa, kateri gumbi v pogovornem oknu bodo uporabljeni za krmarjenje na prejšnjo/naslednjo stran pogovornega okna.
Možno je uporabiti več kot en mehanizem upravljanja strani naenkrat.
To metodo naj bi klicali le enkrat pred klicem metode Execute. Nadaljnji klici so prezrti.
Metoda vrne True, če uspe.
svc.SetPageManager(pilotcontrols: str = "", tabcontrols: str = "", wizardcontrols: str = "", opt lastpage: int): bool
pilotcontrols: z vejicami ločen seznam imen kontrolnikov ListBox (seznamsko polje), ComboBox (kombinirano polje) in RadioButton (izbirni gumb), ki bodo uporabljeni kot upravitelji strani. Za kontrolnike izbirnih gumbov RadioButton določite ime prvega kontrolnika v skupini, ki bo uporabljen.
tabcontrols: z vejico ločen seznam imen gumbov, ki bodo uporabljeni kot upravitelji strani. Mesto v zaporedju, v katerem so navedeni v tem argumentu, ustreza številki strani, s katero so povezani.
wizardcontrols: z vejicami ločen seznam z imeni dveh gumbov, ki bosta uporabljena kot gumba Prejšnji/Naslednji.
lastpage: številka nazadnje razpoložljive strani. To vrednost je priporočljivo navesti, če uporabljate upravitelja strani Prejšnji/Naslednji.
Zamislimo si pogovorno okno s tremi stranmi. Pogovorno okno ima kontrolnik seznamskega polja ListBox z imenom »aPageList«, ki bo uporabljen za nadzor vidne strani. Poleg tega sta še dva gumba z imenoma »btnPrevious« in »btnNext«, ki bosta v pogovornem oknu služila kot gumba Prejšnji/Naslednji.
    oDialog.SetPageManager(PilotControls := "aPageList", _
                           WizardControls := "btnPrevious,btnNext", _
                           LastPage := 3)
    oDialog.Execute()
  
    dlg.SetPageManager(pilotcontrols="aPageList",
                       wizardcontrols="btnPrevious,btnNext",
                       lastpage=3)
    dlg.Execute()
  Zaključi izvajanje storitve Dialog za trenutno instanco. Vrne True, če je končanje izvajanja uspelo.
svc.Terminate(): bool
Spodnja primera v Basicu in Pythonu odpreta ne modalni pogovorni okni DlgConsole in dlgTrace. Slednji sta shranjeni v knjižnicah skupne rabe, in sicer prvi v ScriptForge, drugi pa v Access2Base. Gumbi za zapiranje pogovornega okna so onemogočeni in izrecen zaključek se izvrši ob koncu procesa, ki je v teku.
V tem primeru gumb v DlgConsole nadomešča inhibirano zapiranje okna:
     oDlg = CreateScriptService("SFDialogs.Dialog","GlobalScope","ScriptForge","DlgConsole")
     oDlg.Execute(modal:=False)
     Wait 5000
     oDlg.Terminate()
   S Pythonom:
     from time import sleep
     dlg = CreateScriptService('SFDialogs.Dialog',"GlobalScope",'Access2Base',"dlgTrace")
     dlg.Execute(modal=False)
     sleep 5
     dlg.Terminate()