Innhald
Innhaldsliste 🔎︎

# Tenesta SFDialogs.DialogControl

Tenesta DialogControl handsamar dei kontrollelementa som høyrer til eit dialogvindauge som er definert med Dialog Editor i Basic. Kvar førekomst av den gjeldande tenesta representerer eitt kontrollelement i eit dialogvindauge.

Fokus vert sett på å hente verdiane som vert viste av kontrollelementa i dialogvindauget. Formatering er tilgjengeleg via eigenskapane XControlModel og XControlView.

Merk at innhaldet av den unike eigenskapen DialogControl.Value varierer i høve til type kontrollelement.

Kontrollar av typen trekontroll får spesiell merksemd. Det er enkelt å fylla eit tre, anten forgreina etter grein eller med eit sett med greiner samstundes. Utfylling av ein trekontroll kan gjerast statisk eller dynamisk.

Tenesta SFDialogs.DialogControl er i nær slekt med tenesta SFDialogs.Dialog.

## Oppkall av tenester

Før du brukar tenesta DialogControl må biblioteket ScriptForge vera lasta inn eller importert:

• Grunnleggjande makroar krev innlasting av biblioteket ScriptForge ved hjelp av denne setninga:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-skript krev import frå scriptforge-modulen:
from scriptforge import CreateScriptService

Tenesta DialogControl vert opna frå ei Dialog-teneste som finst frå før, med Controls() -metoden. Dialogvindauget må opnast med tenesta SFDialogs.Dialog.

          Dim myDialog As Object, myControl As Object
          Set myDialog = CreateScriptService("SFDialogs.Dialog", "GlobalScope", myLibrary, DialogName)
          Set myControl = myDialog.Controls("myTextBox")
          myControl.Value = "Dialogvindauget byrja " & Now()
          myDialog.Execute()
          ' … handsamar dei aktuelle verdiane for kontrollelementet
          myDialog.Terminate()

         from time import localtime, strftime
         dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', lib_name, dlg_name)
         text = dlg.Controls('myTextBox')
         text.Value = "Dialogvindauget byrja " + strftime("%a, %d %b %Y %H:%M:%S", localtime())
         dlg.Execute()
         ' … handsamar dei aktuelle verdiane for kontrollelementet
         dlg.Terminate()

Alternativt kan ein kontrollførekomst hentast via tenesta SFDialogs.DialogEvent viss dialogvindauget vart initiert med tenesta Dialog. DialogEvent returnerer den førekomsten av tenesta SFDialogs.Dialog som utløyste hendinga.

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

Merk at i dei tidlegare eksempla kan prefikset "SFDialogs." sløyfast.

## Kontrolltypar

Tenesta DialogControl er tilgjengeleg for desse kontrolltypane:

- Button

- CheckBox

- ComboBox

- CurrencyField

- DateField

- FileControl

- FixedLine

- FixedText

- FormattedField

- GroupBox

- ImageControl

- ListBox

- NumericField

- PatternField

- ProgressBar

- RadioButton

- ScrollBar

- TableControl

- TextField

- TimeField

- TreeControl

## Eigenskapar

Namn | Skriveverna | Type | Gjeld for | Beskriving
--- | --- | --- | --- | ---
Cancel | Nei | Boolean | Button | Bestemmer om ein kommandoknapp har eller ikkje har verkemåten til ein Avbryt-knapp.
Caption | Nei | String | Button, CheckBox, FixedLine, FixedText, GroupBox, RadioButton | Viser teksten som er knytt til kontrollen.
ControlType | Ja | String | Alle | Ein av typane lista opp ovanfor.
CurrentNode | Nei | UNO objekt | TreeControl | Den øvste noden som er vald i trekontrollen. Sjå XmutableTreeNode i dokumentasjonen til Application Programming Interface (API).
Default | Nei | Boolean | Button | Viser om ein kommandoknapp er standardknappen (OK).
Enabled | Nei | Boolean | Alle | Viser om kontrollen er tilgjengeleg med markøren.
Format | Nei | String | DateField, TimeField, FormattedField (skriveverna) | Spesifiserer formatet som vert brukt for å visa datoar og klokkeslett. Det må vera ein av desse strengane: For datoar: "Standard (kort)", "Standard (kort ÅÅ)", "Standard (kort ÅÅÅÅ)", "Standard (lang)", "DD/MM/ÅÅ", "MM/DD/ÅÅ", "ÅÅ/MM/DD", "DD/MM/ÅÅÅÅ", "MM/DD/ÅÅÅÅ" , "ÅÅÅÅ/MM/DD", "ÅÅ-MM-DD", "ÅÅÅÅ-MM-DD". Til klokkeslett: "24t kort", "24t lang", "12t kort", "12t lang".
ListCount | Ja | Long | ComboBox, ListBox, TableControl | Spesifiserer talet på rader i ein listeboks, ein komboboks eller ein tabellkontroll.
ListIndex | Nei | Long | ComboBox, ListBox, TableControl | Spesifiserer kva for element som er merkt i ein listeboks, ein komboboks eller ein tabellkontroll.
Locked | Nei | Boolean | ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, TextField, TimeField | Spesifiserer om kontrollelementet er skriveverna.
MultiSelect | Nei | Boolean | ListBox | Spesifiserer om ein brukar kan gjera fleire val i ein listeboks.
Name | Ja | String | Alle | Namnet på kontrollelementet
Page | Nei | Integer | Alle | Eit dialogvindauge kan ha fleire sider som brukaren kan gå gjennom steg for steg. Kva side i dialogvindauget som er gjeldande, vert definert i sideeigenskapen. Side-eigenskapen til eit kontrollelement definerer kva side i dialogvindauget kontrollelementet er synleg.
Parent | Ja | Tenesta Dialog | Alle | Foreldreklassen SFDialogs.Dialog sin objektførekomst.
Picture | Nei | String | Button, ImageControl | Spesifiserer at filnamnet som inneheld punktgrafikk eller ein annan type grafikk vert vist på det gjevne kontrollelementet. Filnamnet må vera i samsvar med FileNaming for tenesta ScriptForge.FileSystem.
RootNode | Ja | UNO object | TreeControl | Eit objekt som representerer den lågaste rotnoden (til vanleg finst det berre éin slik rotnode). Sjå lXmutableTreeNode i API-dokumentasjonen (Application Programming Interface) for detaljert informasjon.
RowSource | Nei | Array of strings | ComboBox, ListBox | Spesifiserer dataa i ein kombinasjonsboks eller ein listeboks.
Text | Ja | String | ComboBox, FileControl, FormattedField, PatternField, TextField | Gjev tilgang til teksten som vert vist av kontrollelementet.
TipText | Nei | String | Alle | Spesifiserer teksten som vert vist som eit verktøytips når du held musepeikaren over kontrollelementet.
TripleState | Nei | Boolean | CheckBox | Bestemmer om kontrollelementet for avkryssingsboksen kan vera nedtona (gråa ut) eller ikkje.
Value | Nei | Variant |  | Sjå Verdieigenskapar
Visible | Nei | Boolean | Alle | Bestemmer om kontrollelementet skal vera gøymt eller synleg.
XControlModel | Ja | UNO objekt | Alle | Det UNO-objektet som representer modellen for kontrollelementet. Sjå detaljert informasjon iXControlModel og UnoControlDialogModel i dokumentasjonen for API-en ( Application Programming Interface).
XControlView | Ja | UNO objekt | Alle | Det UNO-objektet som representer visinga av kontrollelementet. Sjå detaljert informasjon i XControl og UnoControlDialog i dokumentasjonen for API-en ( Application Programming Interface).
XTreeDataModel | Ja | UNO objekt | TreeControl | UNO-objektet som representerer trekontrolldatamodellen. Sjå detaljert informasjon om dette i XMutableTreeDataModel i dokumentasjonen for API-en (Application Programming Interface).

## Value-eigenskapen

Kontrolltype | Type | Beskriving
--- | --- | ---
Button | Boolean | Berre for veksleknappar
CheckBox | Boolsk eller heiltal | 0, Usann: ikkje merkt 1, Sann: merkt 2: nedtona, veit ikkje
ComboBox | String | Den valde verdien. Eigenskapen ListIndex er eit alternativt val.
CurrencyField | Numerisk |
DateField | Date |
FileControl | String | Eit filnamn formatert etter eigenskapen FileNaming i tenesta ScriptForge.FileSystem
FormattedField | Streng eller numerisk |
ListBox | Streng eller ei matrise av strengar | Den(e) valde rada(radene) som ein skalar eller som ei matrise, avhengig av attributtet MultiSelect
NumericField | Numerisk |
PatternField | String |
ProgressBar | Numerisk | Må vera innføre dei førehandsdefinerte grensene
RadioButton | Boolean | Kvar knapp har sitt eige namn. Dei er knytt saman viss tabulatorposisjonane deira er samanhengande. Viss ein radioknapp er sett til Sann vert dei andre relaterte knappane automatisk sette til Usann.
ScrollBar | Numerisk | Må vera innføre dei førehandsdefinerte grensene
TableControl | Array | Eindimensjonal tabell med dataa frå den merkte rada.
TextField | String | Teksten som vert vist i feltet
TimeField | Date |

## Hendingseigenskapar

Returnerer ein URI-streng som refererer til skriptet som er utløyst av hendinga. Les spesifikasjonen i scripting framework URI specification.

Namn | Skriveverna | Beskriving ut frå etiketten i Basic IDE
--- | --- | ---
OnActionPerformed | Ja | Utfør handling
OnAdjustmentValueChanged | Ja | Ved justering
OnFocusGained | Ja | Når han får fokus
OnFocusLost | Ja | Når han mistar fokus
OnItemStateChanged | Ja | Elementstatus endra
OnKeyPressed | Ja | Ved tastetrykk
OnKeyReleased | Ja | Etter tastetrykk
OnMouseDragged | Ja | Muserørsle medan ein tast er trykt
OnMouseEntered | Ja | Mus innanfor
OnMouseExited | Ja | Mus utanfor
OnMouseMoved | Ja | Mus flytt
OnMousePressed | Ja | Museknapp trykt ned
OnMouseReleased | Ja | Museknapp sloppe
OnNodeExpanded | Nei | (Ikkje i Basic IDE) når utvidingsknappen vert trykt på ein node i ein trekontroll
OnNodeSelected | Nei | (Ikkje i Basic IDE) når ein node i ein trekontroll er vald
OnTextChanged | Ja | Tekst endra

## Metodar

Liste over metodar i tenesta DialogControl
AddSubNode AddSubTree CreateRoot | FindNode SetFocus | SetTableData WriteLine

## AddSubNode

Opprett og returner ein ny node av trekontrollen som eit UNO-objekt underordna ein overordna node. Sjå detaljert informasjon om XMutableTreeNode i dokumentasjonen til Application Programming Interface (API).

Du kan kalla opp denne metoden før du viser dialogfeltett for å byggja det første treet. Han kan også kallast opp frå ei dialog- eller kontrollhending ved å bruka hendinga OnNodeExpanded for å fullføra treet dynamisk.

### Syntaks:

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

### Parametrar:

overordna_node: Eit UNO nodeobjekt av typen com.sun.star.awt.tree.XMutableTreeNode.

visingsverdi: Teksten vert vist i kontrollfeltet for treet.

dataverdi: Kva verdi som helst som er knytt saman med den nye noden. dataverdi kan vera ein streng, eit tal eller ein dato. Sløyf argumentet når det ikkje er bruk for det.

### Eksempel:

LibreOffice Basic- og Python-eksempel hentar minDialog frå Standard-biblioteket for det gjeldande dolumentet.

##### I Basic

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

##### I Python

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

## AddSubTree

Returnerer Sann når eit undertre, som er underordna ein overordna node, kan setjast inn i ein trekontroll. Viss den overordna noden har underordna noder frå før metoden vart brukt, vert dei underordna nodane sletta.

Du kan kalla opp denne metoden før du viser dialogfeltett for å byggja det første treet. Han kan også kallast opp frå ei dialog- eller kontrollhending ved å bruka hendinga OnNodeExpanded for å fullføra treet dynamisk.

### Syntaks:

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

### Parametrar:

overordna_node: Eit UNO nodeobjekt av typen com.sun.star.awt.tree.XMutableTreeNode.

flatt_tre: Ei to-dimensjonal matrise sortert etter kolonnane som inneheld visingsverdiane. Ei slik matrise kan sendast av metoden GetRows brukt på tenesta SFDatabases.Database. Når eit matriseelement som inneheld teksten som skal visast, er Empty eller Null vert det ikkje laga ein ny undermetode og resten av rada vert hoppa over.

          Flat tree    >>>>    Resulting subtree
          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

med_dataverdi: Når standardverdien Usann vert brukt, inneheld kvar kolonne i flatt_tre den teksten som skal visast i kontrolltreet. Når Sann vert brukt, er tekstane (displayvalue som skal visast i kolonnane 0, 2, 4, … , medan dataverdiane (dataverdi) er i kolonnane 1, 3, 5, …

### Eksempel:

##### I Basic

          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)

##### I Python

         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

Returnerer ein ny rotnode for trekontrollen som eit UNO-nodeobjekt av typen com.sun.star.awt.tree.XMutableTreeNode. Den nye trerota vert sett inn under rotnodar som finst frå før. Sjå detaljert informasjon om XMutableTreeNode i dokumentasjonen til Application Programming Interface (API).

Du kan kalla opp denne metoden før du viser dialogfeltet for å byggja det første treet. Han kan også kallast opp frå ei dialog- eller kontrollhending ved å bruka hendinga OnNodeExpanded for å fullføra treet dynamisk.

### Syntaks:

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

### Parametrar:

visingsverdi: Teksten som vert vist i kontrollfeltet for treet.

dataverdi: Kva verdi som helst som er knytt saman med den nye noden. dataverdi kan vera ein streng, eit tal eller ein dato. Sløyf argumentet når det ikkje er bruk for det.

### Eksempel:

##### I Basic

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

##### I Python

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

## FindNode

Går gjennom treet rekursivt, frå rota og finn ein node som oppfyller nokre kriterium. Anten - 1 treff er nok - å ha ein visingsverdi som samsvarar med mønsteret displayvalue eller å ha dataverdien lik dataverdi. Samanlikningane kan skilja mellom store og små bokstavar eller ikkje. Den første samsvarande førekomsten vert returnert som eit UNO-nodeobjekt av typen com.sun.star.awt.tree.XMutableTreeNode. Sjå detaljert informasjon om XMutableTreeNode i dokumentasjonen til Application Programming Interface (API).

Viss han ikkje finst, returnerer metoden Nothing (ingenting), som skal testast med den innebygde funksjonen IsNull() (er null()).

Du kan kalla opp denne metoden før du viser dialogfeltet for å byggja det første treet. Han kan også kallast opp frå ei dialog- eller kontrollhending.

### Syntaks:

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

### Parametrar:

Eit av argumenta visningsverdi eller dataverdi må vera spesifisert. Viss begge er brukte, er eitt treff nok til å velja ei forgreining.

visingsverdi: Mønsteret som skal samsvara. Sjå ei liste over moglege jokerteikn i metoden SF_String.IsLike() . Når denne visingsverdien er lik den tomme strengen (standard), vert det ikkje søkt etter denne visingsverdien.

dataverdi: Kva verdi som helst som er knytt saman med den nye noden. dataverdi kan vera ein streng, eit tal eller ein dato. Sløyf argumentet når det ikkje er bruk for det.

Store-og-små: Standardverdien er Usann

### Eksempel:

##### I Basic

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

##### I Python

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

## SetFocus

Set fokus på kontrollelementet. Returner Sann viss fokuseringa lukkast.

Denne metoden vert ofte kalla opp frå ei dialogvindauge- eller kontrollhending.

### Syntaks:

svc.SetFocus(): bool

### Eksempel:

##### I Basic

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

##### I Python

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

## SetTableData

Fyller ein TableControl (tabellkontroll) med dei gjevne dataa. Alle data som finst frå før vert fjerna før dei nye dataa vert vidaresende som argument.

Når TableControl vert lagt til i dialogvindauget, er det mogleg å bruka Basic IDE for å definere om kolonne- og radoverskrifter skal visast i tabellen. Viss TableControl har kolonne- og/eller radoverskrifter, vert den første kolonnen og/eller rada i den gjevne datamatrisa som etikettar for tabelloverskriftene.

Denne metoden returnerer Sann viss han lukkast.

### Syntaks:

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

### Parametrar:

datamatrise: Data som skal skrivast inn i tabellen representert som ei matrise av matriser i Basic eller ein tuple av tuplar i Python. Dataa må innehalda kolonne- og radoverskrifter viss dei skal visast av TableControl (tabellkontrollen).

widths: Matrise som inneheld dei relative breiddene på kvar kolonne. Med andre ord: widths = Array(1, 2) betyr at den andre kolonnen er dobbelt så brei som den første. Viss talet på verdiar i matrisa er mindre enn talet på kolonnar, vert den siste verdien i matrisa brukt som breidde på resten av kolonnane.

alignments: Definerer justeringa i kvar kolonne som ein streng der kvart teikn kan vera «L» (venstre), «C» (senter), «R» (høgre) eller « » (mellomrom, standard, betyr venstre for strenger og høgre for talverdiar). Viss lengda på strengen er kortare enn talet på kolonnar i tabellen, vert det siste teiknet i strengen brukt for å definera justeringa for resten av kolonnane.

### Eksempel:

##### I Basic

Eksempelet nedanfor går ut frå at dialogvindauget myDialog har ein TableControl kalla Grid1 med eigenskapane «Vis radoverskrift» og «Vis kolonneoverskrift» sett til «Ja».

         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()

Eigenskapen Value returnerer den valde rada i tabellen. Viss inga rad er vald, vert eit tomt matriseobjekt returnert. Kodesnutten nedanfor viser korleis du kan testa om det er ei vald rad i tabellen.

         rowValues = oTable.Value
         If UBound(rowValues) < 0 Then
             MsgBox "Inga rad er vald."
         Else
             MsgBox "Rada " & oTable.ListIndex & " er vald."
         End If

##### I Python

         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

Legg til ei ny linje på slutten av eit tekstfelt med fleire linjer. Der vert sett inn eit linjeskiftteikn når det høver. Metoden returnerer Sann når han lukkast.

Det oppstår ein feil viss den faktiske kontrollen ikkje er av typen TextField eller ikkje har fleire linjer.

### Syntaks:

svc.WriteLine(opt line: str): bool

### Parametrar:

Linje: Strengen som skal setjast inn. Standard er ei tom linje.

### Eksempel:

##### I Basic

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

##### I Python

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

Alle ScriptForge Basic-rutinane og -identifikatorane som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje meint brukte i Basic-makroar.

Liknande emne

Tenesta SFDialogs.Dialog

Tenesta ScriptForge.String

Tenesta ScriptForge.UI