Vsebina
Kazalo 🔎︎

# Storitev SFDialogs.DialogControl

Storitev DialogControl upravlja s kontrolniki, ki pripadajo pogovornemu oknu, določenemu z Urejevalnikom pogovornih oken Basica. Vsaka instanca trenutne storitve predstavlja posamezen kontrolnik v pogovornem oknu.

Pozornost je nastavljena na pridobivanje in določanje vrednosti, prikazanih na kontrolnikih pogovornega okna. Oblikovanje je dostopno prek lastnosti XControlModel in XControlView.

Upoštevajte, da so enkratne vsebine lastnosti DialogControl.Value razlikujejo glede na vrsto kontrolnika.

Posebna pozornost velja za drevesne kontrolnike. Drevo je enostavno napolniti: vejo po vejo ali pa z množico vej naenkrat. Napolnjevanje drevesnega kontrolnika se lahko izvede statično ali dinamično.

Storitev SFDialogs.DialogControl je sorodna s storitvijo SFDialogs.Dialog.

## Priklic storitve

Storitev DialogControl prikličemo iz obstoječe instance storitve Dialog prek njene metode Controls(). Pogovorno okno mora biti inicializirano s storitvijo SFDialogs.Dialog.

          Dim myDialog As Object, myControl As Object
          Set myDialog = CreateScriptService("SFDialogs.Dialog", "GlobalScope", myLibrary, DialogName)
          Set myControl = myDialog.Controls("myTextBox")
          myControl.Value = "Pogovorno okno zagnano: " & Now()
          myDialog.Execute()
          ' ... obdelaj trenutne vrednosti kontrolnikov
          myDialog.Terminate()

         from time import localtime, strftime
         dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', lib_name, dlg_name)
         text = dlg.Controls('myTextBox')
         text.Value = "Pogovorno okno zagnano: " + strftime("%a, %d %b %Y %H:%M:%S", localtime())
         dlg.Execute()
         # ... obdelaj trenutne vrednosti kontrolnikov
         dlg.Terminate()

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

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

         def some_event(event: uno):
             ctrl = CreateScriptService('SFDialogs.DialogEvent', event)
             # ...

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

## Vrste kontrolnikov

Storitev DialogControl je na voljo za naslednje vrste kontrolnikov:

- Button

- CheckBox

- ComboBox

- CurrencyField

- DateField

- FileControl

- FixedLine

- FixedText

- FormattedField

- GroupBox

- ImageControl

- ListBox

- NumericField

- PatternField

- ProgressBar

- RadioButton

- ScrollBar

- TableControl

- TextField

- TimeField

- TreeControl

## Lastnosti

Ime | Samo za branje | Vrsta | Uporabno za | Opis
Cancel | Ne | Boolean | Button | Določa, ali ima ukazni gumb vlogo gumba Prekliči.
Caption | Ne | String | Button, CheckBox, FixedLine, FixedText, GroupBox, RadioButton | Določa besedilo, povezano s kontrolnikom.
ControlType | Da | String | Vse | Ena od zgoraj navedenih vrst.
CurrentNode | Ne | Predmet UNO | TreeControl | Trenutno najvišje izbrano vozlišče v drevesnem kontrolniku. Podrobnosti si oglejte v dokumentaciji API-ja (Application Programming Interface) XmutableTreeNode.
Default | Ne | Boolean | Button | Določa, ali je gumb za uka privzeti gumb (V redu oz. OK).
Enabled | Ne | Boolean | Vse | Določa, ali je kontrolnik dosegljiv s kazalko.
Format | Ne | String | DateField, TimeField, FormattedField (samo za branje) | Določa obliko za prikaz datumov in časov. Možni so le naslednji nizi: Za datume: "Standard (short)" (standardni kratki), "Standard (short YY)" (standardni kratki LL), "Standard (short YYYY)" (standardni kratki LLLL), "Standard (long)" (standardni dolgi), "DD/MM/YY" (DD/MM/LL), "MM/DD/YY" (MM/DD/LL), "YY/MM/DD" (LL/MM/DD), "DD/MM/YYYY" (DD/MM/LLLL), "MM/DD/YYYY" (MM/DD/LLLL), "YYYY/MM/DD" (LLLL/MM/DD), "YY-MM-DD" (LL-MM-DD), "YYYY-MM-DD" (LLLL-MM-DD). Za čase: "24h short" (kratek 24-urni), "24h long" (dolgi 24-urni), "12h short" (kratki 12-urni), "12h long" (dolgi 12-urni).
ListCount | Da | Long | ComboBox, ListBox, TableControl | Določa število vrstic v seznamskem polju (ListBox), kombiniranem polju (ComboBox) ali kontrolniku tabele (TableControl).
ListIndex | Ne | Long | ComboBox, ListBox, TableControl | Določa, kateri element je izbran v seznamskem polju, kombiniranem polju ali kontrolniku tabele).
Locked | Ne | Boolean | ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, TextField, TimeField | Določa, ali je kontrolnik samo za branje.
MultiSelect | Ne | Boolean | ListBox | Določa, ali lahko uporabnik v seznamskem polju izbere več možnosti.
Name | Da | String | Vse | Ime kontrolnika.
Page | Ne | Integer | Vse | Pogovorno okno ima lahko več strani, med katerimi uporabnik napreduje po korakih. Lastnost Page predmeta Dialog določa, katera stran pogovornega okna je aktivna. Lastnost Page kontrolnika določa stran pogovornega okna, na kateri je kontrolnik viden.
Parent | Da | Storitev Dialog | Vse | Nadrejena instanca predmeta razreda SFDialogs.Dialog.
Picture | Ne | String | Button, ImageControl | Določa ime datoteke, ki vsebuje bitno sliko ali drugo vrsto grafike, ki bo prikazana v navedenem kontrolniku. Ime datoteke mora biti skladno z atributom FileNaming storitve ScriptForge.FileSystem.
RootNode | Da | Predmet UNO | TreeControl | Predmet, ki predstavlja najnižje korensko vozlišče (običajno obstaja le eno takšno korensko vozlišče). Podrobnosti si oglejte v dokumentaciji API-ja (Application Programming Interface) XmutableTreeNode.
RowSource | Ne | Array of strings | ComboBox, ListBox | Določa podatke, vsebovane v kombiniranem ali seznamskem polju.
Text | Da | String | ComboBox, FileControl, FormattedField, PatternField, TextField | Omogoča dostop do besedila, ki ga prikaže kontrolnik.
TipText | Ne | String | Vse | Določa besedilo, ki bo prikazano kot namig, ko s kazalcem miške postojite nad kontrolnikom.
TripleState | Ne | Boolean | CheckBox | Določa, ali se kontrolnik potrditvenega polja lahko izriše matirano (osivelo).
Value | Ne | Variant |  | Glejte lastnost Value
Visible | Ne | Boolean | Vse | Določa, ali je kontrolnik skrit ali viden.
XControlModel | Da | Predmet UNO | Vse | Predmet UNO, ki predstavlja model kontrolnika. Podrobnosti si oglejte v dokumentaciji API-ja za XControlModel in UnoControlDialogModel.
XControlView | Da | Predmet UNO | Vse | Predmet UNO, ki predstavlja pogled kontrolnika. Podrobnosti si oglejte v dokumentaciji API-ja za XControl in UnoControlDialog.
XTreeDataModel | Da | Predmet UNO | TreeControl | Predmet UNO, ki predstavlja podatkovni model drevesnega kontrolnika. Podrobnosti si oglejte v dokumentaciji API-ja za XMutableTreeDataModel.

## Lastnost Value

Vrsta kontrolnika | Vrsta | Opis
Button | Boolean | Samo za preklopne gumbe
CheckBox | Logična vrednost ali celo število | 0, False: ni preverjeno 1, True: preverjeno 2: osivelo, ni znano
ComboBox | String | Izbrana vrednost. Lastnost ListIndex je alternativna možnost.
CurrencyField | Številska |
DateField | Date |
FileControl | String | Ime datoteke, oblikovano v skladu z lastnostjo FileNaming storitve ScriptForge.FileSystem.
FormattedField | Niz ali številska |
ListBox | Niz ali polje nizov | Izbrane vrstice kot skalar ali polje, odvisno od atributa MultiSelect
NumericField | Številska |
PatternField | String |
ProgressBar | Številska | Mora biti v okviru vnaprej določenih meja
RadioButton | Boolean | Vsak gumb ima svoje ime. Povezani so, če so njihovi položaji tabulatorjev zvezni. Če je izbirni gumb nastavljen na True, se drugi povezani izbirni gumbi samodejno nastavijo na False
ScrollBar | Številska | Mora biti v okviru vnaprej določenih meja
TableControl | Array | Enodimenzionalno polje s podatki trenutno izbrane vrstice.
TextField | String | Besedilo, ki se pojavi v polju
TimeField | Date |

## Lastnosti dogodka

Vrne niz URI s sklicem na skript, ki ga je dogodek sprožil. Preberite njegovo specifikacijo v specifikaciji URI ogrodja skriptanja.

Ime | Samo za branje | Opis, kot je označen v Basic IDE
OnActionPerformed | Da | Izvrši dejanje
OnAdjustmentValueChanged | Da | Med prilagajanjem
OnFocusGained | Da | Ob pridobljeni pozornosti
OnFocusLost | Da | Ob izgubljeni pozornosti
OnItemStateChanged | Da | Stanje elementa spremenjeno
OnKeyPressed | Da | Tipka pritisnjena
OnKeyReleased | Da | Tipka sproščena
OnMouseDragged | Da | Miška premaknjena ob pritisnjeni tipki
OnMouseEntered | Da | Miška znotraj
OnMouseExited | Da | Miška zunaj
OnMouseMoved | Da | Miška premaknjena
OnMousePressed | Da | Gumb miške pritisnjen
OnMouseReleased | Da | Gumb miške sproščen
OnNodeExpanded | Ne | (Ni v Basic IDE) ko je pritisnjen gumb razpostiranja v drevesnem kontrolniku
OnNodeSelected | Ne | (Ni v Basic IDE) ko je vozlišče v drevesnem kontrolniku izbrano
OnTextChanged | Da | Besedilo spremenjeno

## Metode

Seznam metod storitve DialogControl
AddSubNode AddSubTree CreateRoot | FindNode SetFocus | SetTableData WriteLine

## AddSubNode

Ustvari in vrne novo vozlišče kontrolnika drevesa kot podrejenega predmeta UNO nadrejenemu vozlišču+. Podrobnosti si oglejte v dokumentaciji API-ja za XMutableTreeNode.

To metodo lahko pokličete pred prikazom pogovornega okna, da zgradite začetno drevo. Pokličete jo lahko tudi iz pogovornega okna ali dogodka kontrolnika z uporabo dogodka OnNodeExpanded, da dinamično dokončate drevo.

### Skladnja:

svc.AddSubNode(parentnode: uno, displayvalue: str, opt datavalue: any): uno

### Parametri:

parentnode: predmet vozlišč UNO vrste com.sun.star.awt.tree.XMutableTreeNode.

displayvalue: besedilo, ki se pojavi v polju kontrolnika drevesa.

datavalue: poljubna vrednost, povezana z novim vozliščem. datavalue je lahko niz, število ali datum. Argument lahko izpustite, če ni relevanten.

### Primer:

Primera LibreOffice Basic in Python prevzameta pogovorno okno trenutnega dokumenta myDialog iz knjižnice Standard.

##### V Basicu

          Dim oDlg As Object, myTree As Object, myNode As Object, theRoot As Object
          Set oDlg = CreateScriptService("Dialog",,, "myDialog")
          Set myTree = oDlg.Controls("myTreeControl")
          Set theRoot = myTree.CreateRoot("Tree top")
          Set myNode = myTree.AddSubNode(theRoot, "A branch ...")

##### V Pythonu

         dlg = CreateScriptService('SFDialogs.Dialog', None, None, 'myDialog')
         tree = dlg.Controls('myTreeControl')
         root = tree.CreateRoot('Tree top')
         node = tree.AddSubNode(root, 'A branch ...')

## AddSubTree

Vrne True, če je poddrevo, podrejeno nadrejenemu vozlišču, uspešno vstavljeno v drevesni kontrolnik. Če je imelo nadrejeno vozlišče že podrejena vozlišča pred klicem te metode, se podrejena vozlišča izbrišejo.

To metodo lahko pokličete pred prikazom pogovornega okna, da zgradite začetno drevo. Pokličete jo lahko tudi iz pogovornega okna ali dogodka kontrolnika z uporabo dogodka OnNodeExpanded, da dinamično dokončate drevo.

### Skladnja:

svc.AddSubTree(parentnode: uno, flattree: any, opt withdatavalue: bool): bool

### Parametri:

parentnode: predmet vozlišč UNO vrste com.sun.star.awt.tree.XMutableTreeNode.

flattree: dvodimenzionalno polje, razvrščeno po stolpcih, ki vsebujejo prikazane vrednosti. Tako polje lahko izdela metoda GetRows, uporabljena na storitviSFDatabases.Database. Če je element polja, ki vsebuje besedilo za izpis, enak Empty ali Null, novo vozlišče ni ustvarjeno in preostanek vrstice je preskočen.

          Plosko drevo    >>>>    Končno poddrevo
          A1	B1	C1             |__   A1
          A1	B1	C2                   |__   B1
          A1	B2	C3                         |__  C1
          A2	B3	C4                         |__  C2
          A2	B3	C5                   |__   B2
          A3	B4	C6                         |__  C3
                                 |__   A2
                                       |__   B3
                                             |__  C4
                                             |__  C5
                                 |__   A3
                                       |__   B4
                                             |__  C6

withdatavalue: če je False, je uporabljena privzeta vrednost, vsak stolpec flattree vsebuje besedilo, ki bo prikazano v kontrolniku drevesa. Če je True, so besedila, ki bodo prikazana (displayvalue), v stolpcih 0, 2, 4, ..., podatkovne vrednosti (datavalue) pa v stolpcih 1, 3, 5, ...

### Primer:

##### V Basicu

          Dim myTree As Object, theRoot As Object, oDb As Object, vData As Variant
          Set myTree = myDialog.Controls("myTreeControl")
          Set theRoot = myTree.CreateRoot("By product category")
          Set oDb = CreateScriptService("SFDatabases.Database", "/home/.../mydatabase.odb")
          vData = oDb.GetRows("SELECT [Category].[Name], [Category].[ID], [Product].[Name], [Product].[ID] " _
              & "FROM [Category], [Product] WHERE [Product].[CategoryID] = [Category].[ID] " _
              & "ORDER BY [Category].[Name], [Product].[Name]")
          myTree.AddSubTree(theRoot, vData, WithDataValue := True)

##### V Pythonu

         SQL_STMT = "SELECT [Category].[Name], [Category].[ID], [Product].[Name], [Product].[ID] \
             FROM [Category], [Product] WHERE [Product].[CategoryID] = [Category].[ID] \
             ORDER BY [Category].[Name], [Product].[Name]"
         tree = dlg.Controls('myTreeControl')
         root = tree.CreateRoot('By Product category')
         db = CreateScriptService('SFDatabases.Database', '/home/.../mydatabase.odb')
         sub_tree = db.GetRows(SQL_STMT)
         tree.AddSubTree(root, sub_tree, withdatavalue=True)

## CreateRoot

Vrne novo korensko vozlišče drevesnega kontrolnika kot UNO-predmet vozlišča vrste com.sun.star.awt.tree.XMutableTreeNode. Nov koren drevesa je vstavljen pod predobstoječe korene dreves. Podrobnosti si oglejte v dokumentaciji API-ja za XMutableTreeNode.

To metodo lahko pokličete pred prikazom pogovornega okna, da zgradite začetno drevo. Pokličete jo lahko tudi iz pogovornega okna ali dogodka kontrolnika, da dinamično dokončate drevo.

### Skladnja:

svc.CreateRoot(displayvalue: str, opt datavalue: any): uno

### Parametri:

displayvalue: besedilo, ki se pojavi v polju kontrolnika drevesa.

datavalue: poljubna vrednost, povezana z novim vozliščem. datavalue je lahko niz, število ali datum. Argument lahko izpustite, če ni relevanten.

### Primer:

##### V Basicu

          Dim myTree As Object, myNode As Object
          Set myTree = myDialog.Controls("myTreeControl")
          Set myNode = myTree.CreateRoot("Tree starts here ...")

##### V Pythonu

         tree = dlg.Controls('myTreeControl')
         node = tree.CreateRoot('Tree starts here ...')

## FindNode

Preči drevo in rekurzivno, z začetkom v korenu, najde vozlišče, ki ustreza pogojem. Lahko se - 1 zadetek zadostuje - prikazana vrednost ujema z vzorcem displayvalue ali pa je njegova podatkovna vrednost enaka datavalue. Primerjava lahko razlikuje med velikimi in malimi črkami ali pa ne. Prvi zadetek je vrnjen kot predmet vozlišča UNO vrste com.sun.star.awt.tree.XMutableTreeNode. Podrobnosti si oglejte v dokumentaciji API-ja za XMutableTreeNode.

Če ne najde zadetka, metoda vrne Nothing, kar lahko preverite z vgrajeno funkcijo IsNull().

To metodo lahko pokličete pred prikazom pogovornega okna, da zgradite začetno drevo. Pokličete jo lahko tudi iz pogovornega okna ali dogodka kontrolnika.

### Skladnja:

svc.FindNode(displayvalue: str = '', opt datavalue: any, casesensitive = False): uno

### Parametri:

Določen mora biti eden izmed argumentov displayvalue in datavalue. Če sta prisotna oba, je dovolj en zadetek, da bo vozlišče izbrano.

displayvalue: vzorec, ki ga želimo najti. Glejte metodo SF_String.IsLike(), kjer najdete seznam možnih nadomestnih znakov. Če je enak nizu ničelne dolžine (privzeto), te prikazane vrednosti ne išče.

datavalue: poljubna vrednost, povezana z novim vozliščem. datavalue je lahko niz, število ali datum. Argument lahko izpustite, če ni relevanten.

casesensitive: privzeta vrednost je False.

### Primer:

##### V Basicu

          Dim myTree As Object, myNode As Object
          Set myTree = myDialog.Controls("myTreeControl")
          Set myNode = myTree.FindNode("*Sophie*", CaseSensitive := True)

##### V Pythonu

         tree = dlg.Controls('myTreeControl')
         node = FindNode('*Sophie*', casesensitive=True)
         if node is None:
             # ...

## SetFocus

Določite pozornost na kontrolnik. Vrne True, če je bilo določanje pozornosti uspešno.

To metodo pogosto kličejo pogovorna okna ali dogodki kontrolnika.

### Skladnja:

svc.SetFocus(): bool

### Primer:

##### V Basicu

          Dim oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.SetFocus()

##### V Pythonu

          dlg = CreateScriptService('Dialog', None, None, 'myDialog')
          ctrl = dlg.Controls('thisControl')
          ctrl.SetFocus()

## SetTableData

Zapolni tabelo TableControl z danimi podatki. Vsi poprejšnji podatki se počistijo pred vstavljanjem novih podatkov, podanih kot argument.

Če je kontrolnik TableControl dodan v pogovorno okno, lahko uporabite razvojno okolje Basic IDE za določitev, ali naj bodo v tabeli prikazane glave stolpcev in vrstic. Če ima TableControl glave stolpcev in/ali vrstic, se prvi stolpec in/ali prva vrstica v podanem podatkovnem polju uporabi za oznake za glave tabele.

Metoda vrne True, če uspe.

### Skladnja:

svc.SetTableData(dataarray: any[0..*, 0..*], widths: int[0..*], alignments: str): bool

### Parametri:

dataarray: podatki, ki naj bodo vneseni v tabelo, predstavljeni kot polje polj v Basicu ali kot n-terica n-teric v Pythonu. Podatki morajo vsebovati glave stolpcev in vrstic, če jih želite prikazati v kontrolniku TableControl.

widths: polje, ki vsebuje relativne širine vsakega stolpca posebej. Povedano drugače, widths = Array(1, 2) pomeni, da je drugi stolpec dvakrat širši od prvega. Če je število vrednosti v polju manjše od števila vseh stolpcev v tabeli, se zadnja vrednost v polju uporabi za določitev širine preostalih stolpcev.

alignments: določa poravnavo v vsakem stolpcu posebej kot niz, v katerem je lahko vsak znak »L« (levo), »C« (sredinsko), »R« (desno) ali » « (presledek, privzeto, kar predstavlja levo za nize in desno za številske vrednosti). Če je dolžina niza manjša od števila stolpcev v tabeli, se zadnji znak v nizu uporabi za določitev poravnave preostalih stolpcev.

### Primer:

##### V Basicu

Naslednji primer predvideva, da ima pogovorno okno myDialog kontrolnik tabele TableControl z imenom Grid1 in lastnostma »Pokaži vrstico glave« in »Pokaži vrstico stolpcev«, nastavljenima na »Da«.

         Dim myDialog As Object, oTable As Object, tableData As Variant
         myDialog = CreateScriptService("Dialog", "GlobalScope", "Standard", "myDialog")
         oTable = myDialog.Controls("Grid1")
         tableData = Array("Column A", "Column B", "Column C")
         tableData = SF_Array.AppendRow(tableData, Array("Row 1", 1, 2))
         tableData = SF_Array.AppendRow(tableData, Array("Row 2", 3, 4))
         tableData = SF_Array.AppendRow(tableData, Array("Row 3", 5, 6))
         vAlignments = "LCC"
         vWidths = Array(2, 1, 1)
         oTable.SetTableData(tableData, vWidths, vAlignments)
         myDialog.Execute()

Lastnost Value vrne izbrano vrstico v tabeli. Če ni izbrana nobena vrstica, vrne prazen predmet Array. Naslednji odlomek kode kaže, kako lahko preizkusite, če je v tabeli izbrana kakšna vrstica.

         rowValues = oTable.Value
         If UBound(rowValues) < 0 Then
             MsgBox "Nobena vrstica ni izbrana."
         Else
             MsgBox "Izbrana je vrstica " & oTable.ListIndex & "."
         End If

##### V Pythonu

         dlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "myDialog")
         table_control = dlg.Controls("Grid1")
         table_data = (("Column A", "Column B", "Column C"),
                       ("Row 1", 1, 2),
                       ("Row 2", 3, 4),
                       ("Row 3", 5, 6))
         alignments = "LCC"
         widths = (100, 50, 50)
         table_control.SetTableData(table_data, widths, alignments)
         dlg.Execute()

         bas = CreateScriptService("Basic")
         row_values = table_control.Value
         if len(row_values) == 0:
             bas.MsgBox("No row selected.")
         else:
             bas.MsgBox(f"Row {table_control.ListIndex} is selected.")

## WriteLine

Doda novo vrstico na konec večvrstičnega besedilnega polja. Znak nove vrstice bo vstavljen po potrebi. Metoda vrne True, če uspe.

Če dejanski kontrolnik ni vrste TextField ali ni večvrstičen, prikliče napako.

### Skladnja:

svc.WriteLine(opt line: str): bool

### Parametri:

Line: niz, ki ga želite vstaviti. Privzeto je prazna vrstica.

### Primer:

##### V Basicu

          Dim oDlg As Object, oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.WriteLine("a new line")

##### V Pythonu

         dlg = CreateScriptService('SFDialogs.Dialog', None, None, 'myDialog')
         ctrl = dlg.Controls('thisControl')
         ctr.WriteLine("a new line")

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

Storitev ScriptForge.String

Storitev ScriptForge.UI