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.

tip

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


Oppkall av tenester

Before using the DialogControl service the ScriptForge library needs to be loaded or imported:

note

• Basic macros require to load ScriptForge library using the following statement:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python scripts require an import from scriptforge module:
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:

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

Specifies the number of rows in a ListBox, a ComboBox or a TableControl.

ListIndex

Nei

Long

ComboBox, ListBox, TableControl

Specifies which item is selected in a ListBox, a ComboBox or a TableControl.

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

One-dimensional array with the data of the currently selected row.

TextField

String

Teksten som vert vist i feltet

TimeField

Date


Hendingseigenskapar

Returnerer ein URI-streng med referanse til skriptet som utløyste hendinga. Sjå 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:

LibreOfficeDev 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

Fills a TableControl with the given data. All preexisting data is cleared before inserting the new data passed as argument.

When the TableControl is added to the dialog, it is possible to use the Basic IDE to define whether column and row headers will be shown in the table. If the TableControl has column and/or row headers, the first column and/or row in the provided data array are used as labels for the table headers.

This method returns True when successful.

Syntaks:

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

Parametrar:

dataarray: Data to be entered into the table represented as an Array of Arrays in Basic or a tuple of tuples in Python. The data must include column and row headers if they are to be displayed by the TableControl.

widths: Array containing the relative widths of each column. In other words, widths = Array(1, 2) means that the second column is twice as wide as the first one. If the number of values in the array is smaller than the number of columns in the table, then the last value in the array is used to define the width of the remaining columns.

alignments: Defines the alignment in each column as a string in which each character can be "L" (Left), "C" (Center), "R" (Right) or " " (whitespace, default, meaning left for strings and right for numeric values). If the length of the string is shorter than the number of columns in the table, then the last character in the string is used to define the alignment of the remaining columns.

Eksempel:

I Basic

The following example assumes that the dialog myDialog has a TableControl named Grid1 with "Show row header" and "Show column header" properties set to "Yes".


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

The Value property returns the selected row in the table. If no row is selected, an empty Array object is returned. The following code snippet shows how to test if any row is selected in the table.


     rowValues = oTable.Value
     If UBound(rowValues) < 0 Then
         MsgBox "No row selected."
     Else
         MsgBox "Row " & oTable.ListIndex & " is selected."
     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")
   
warning

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