Vsebina
Kazalo 🔎︎

# Storitev SFDialogs.Dialog

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

## Priklic storitve in raba

Pred uporabo storitve Dialog je potrebno naložiti ali uvoziti knjižnico ScriptForge:

• Za makre Basic mora biti naložena knjižnica ScriptForge z naslednjim ukazom:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Za skripte Python mora biti opravljen uvoz iz modula scriptforge:
from scriptforge import CreateScriptService

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 LibreOffice Basic in Python 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()

Instanco Dialog lahko pridobite tudi prek storitve SFDialogs.DialogEvent, če je pogovorno okno nastalo s storitvijo Dialog. DialogEvent vrne instanco storitve SFDialogs.Dialog, ki je sprožila dogodek.

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

s Pythonom:

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

V prejšnjih primerih ste morda opazili, da lahko predpono "SFDialogs." izpustite, ko je to ustrezno.

## Lastnosti

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 object | Predmet UNO, ki predstavlja model pogovornega okna. Podrobnosti si oglejte v dokumentaciji API-ja za XControlModel in UnoControlDialogModel.
XDialogView | Da | UNO object | 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.

## Lastnosti dogodka

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

| Metode |
--- | --- | ---
Activate Center Controls | EndExecute Execute GetTextsFromL10N | Resize Terminate

## Activate

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.

### Skladnja:

svc.Activate(): bool

### Primer:

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

Primeri v Pythonu in LibreOffice Basicu predvidevajo, da je pogovorno okno shranjeno v knjižnici Standardno trenutnega dokumenta.

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

## Center

Osredini instanco trenutnega pogovornega okna na sredo nadrejenega okna. Metoda brez argumentov osredini pogovorno okno na sredo trenutnega okna.

Vrne True, če uspe.

### Skladnja:

svc.Center(opt Parent: obj): bool

### Parametri:

Parent: neobvezni predmet, ki je lahko ...

- predmet pogovornega okna ScriptForge,

- predmet dokumenta ScriptForge (Calc, Base, ...).

### Primer:

##### V Basicu

         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

##### V Pythonu

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

## Controls

Vrne lahko:

- seznam kontrolnikov, ki jih vsebuje pogovorno okno, ali

- instanco razreda kontrolnika pogovornega okna DialogControl glede na njegovo ime.

### Skladnja:

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

svc.Controls(controlname: str): svc

### Parametri:

ControlName: ime veljavnega kontrolnika kot niz, razlikuje med velikimi in malimi črkami. Če ni podano, vrne seznam imen kontrolnikov kot ničelno polje.

### Primer:

          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

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.

### Skladnja:

svc.EndExecute(returnvalue: int)

### Parametri:

returnvalue: vrednost, podana izvajani metodi Execute().

### Primer:

Z uporabo LibreOffice 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 LibreOffice.

## Execute

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.

### Skladnja:

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

### Parametri:

modal: False, če gre za glavno oz. ne-modalno okno. Privzeto = True.

### Primer:

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

## GetTextsFromL10N

Zamenja vse nespremenljive nize besedila v pogovornem oknu z njihovimi prevedenimi različicami glede na instanco storitve L10N. Ta metoda prevede naslednje nize:

- Naziv pogovornega okna.

- Napisi iz naslednjih vrst kontrolnikov: gumb (Buttin), potrditveno polje (CheckBox), fiksna vrstica (FixedLine), skupinsko polje (GroupBox) in izbirni gumb (RadioButtin).

- Nespremenljivi nizi v seznamskih poljih in kombiniranih poljih.

- Namig oz. besedilo pomoči, ki se prikazuje, če se z miško ustavite nad kontrolnikom.

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.

### Skladnja:

svc.GetTextsFromL10N(l10n: svc): bool

### Parametri:

l10n: instanca storitve L10N, iz katere bodo pridobljeni prevedeni nizi.

### Primer:

Naslednji primer naloži prevedene nize in jih uporabi v pogovornem oknu »MyDialog«.

##### V Basicu

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

##### V Pythonu

         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.

## Resize

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.

### Skladnja:

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

### Parametri:

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

### Primer:

##### V Basicu

         oDialog.Resize(1000, 2000, Height := 6000) ' Širina je nespremenjen

##### V Pythonu

S Pythonom:

         oDialog.Resize(1000, 2000, Height = 6000) # Širina je nespremenjen

## Terminate

Zaključi izvajanje storitve Dialog za trenutno instanco. Vrne True, če je končanje izvajanja uspelo.

### Skladnja:

svc.Terminate(): bool

### Primer:

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:

##### V Basicu

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

S Pythonom:

##### V Pythonu

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

Vsi podprogrami ali identifikatorji ScriptForge Basic s predpono podčrtaja (»_«) so rezervirani za interno uporabo. Uporabi v makrih Basic ali skriptih Python niso namenjeni.

Podobne teme

Storitev SFDialogs.DialogControl

Storitev ScriptForge.UI