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

• 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:

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

Returns a URI string with the reference to the script triggered by the event. Read its specification in the 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

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

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


Støtt oss!