Indhold
Indholdsfortegnelse 🔎︎

# Tjenesten SFDialogs.DialogControl

Tjenesten DialogControl håndterer de kontroller, der hører til en dialog, der er defineret med Basics Dialogredigering. Hver forekomst af den aktuelle tjeneste repræsenterer en enkelt kontrol indenfor et dialog felt.

Fokus sættes på at hente og sætte de værdier, der vises af dialogfeltets kontroller. Formatering er tilgængelig via egenskaberne XControlModel and XControlView.

Bemærk, at indholdet af den unikke egenskab DialogControl.Value (dialogkontrol.værdi) varierer efter kontroltypen.

Kontrolelementer ordnet i en træstruktur får særlig opmærksomhed. Det er let at fylde et træ med værdier, enten gren for gren eller med flere grene på én gang. Indsættelse af værdier i et "kontroltræ" kan gøres statisk eller dynamisk.

Tjenesten SFDialogs.DialogControl er tæt beslægtet med tjenesten SFDialogs.Dialog.

## Kald af tjeneste

Tjenesten DialogControl kaldes fra et eksisterende eksemplar af tjenesten Dialog gennem dens metode Controls(). Dialogen skal initieres med tjenesten SFDialogs.Dialog.

          Dim myDialog As Object, myControl As Object
          Set myDialog = CreateScriptService("SFDialogs.Dialog", "GlobalScope", myLibrary, DialogName)
          Set myControl = myDialog.Controls("myTextBox")
          myControl.Value = "Dialog begyndt ved " & Now()
          myDialog.Execute()
          ' ... bearbejd kontrollens faktiske værdier
          myDialog.Terminate()

         from time import localtime, strftime
         dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', lib_name, dlg_name)
         text = dlg.Controls('myTextBox')
         text.Value = "Dialog begyndt ved " + strftime("%a, %d %b %Y %H:%M:%S", localtime())
         dlg.Execute()
         # ... bearbejder kontrollens aktuelle værdier
         dlg.Terminate()

Alternativt kan en kontrolforekomst hentes via tjenesten SFDialogs.DialogEvent, forudsat, at dialogen blev initieret med tjenesten Dialog. DialogEvent returnerer den klasseforekomsten SFDialogs.DialogControl, der udløste hændelsen.

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

Bemærk i de foregående eksemplar, at præfixet "SFDialogs." kan udelades.

## Kontroltyper

Tjenesten DialogControl er tilgængelig for disse kontroltyper:

- Button

- CheckBox

- ComboBox

- CurrencyField

- DateField

- FileControl

- FixedLine

- FixedText

- FormattedField

- GroupBox

- ImageControl

- ListBox

- NumericField

- PatternField

- ProgressBar

- RadioButton

- ScrollBar

- TextField

- TimeField

- TreeControl

  Dette kontrolelement er tilgængeligt fra LibreOffice 7.2 og fremad.

## Egenskaber

Navn | Skrivebeskyttet | Type | Gældende for | Beskrivelse
Cancel | Nej | Boolean | Button | Angiver, om en kommandoknap har eller ikke har en Annuller-knaps adfærd.
Caption | Nej | String | Button, CheckBox, FixedLine, FixedText, GroupBox, RadioButton | Angiver den tekst, der er tilknyttet kontrollen.
ControlType | Ja | String | Alt | En af typerne, der er oplistet ovenfor.
CurrentNode | Nej | UNO objekt | TreeControl | Den aktuelt højeste valgte forgrening i kontroltræet. Se mere detaljeret information om XmutableTreeNode (Xforanderlig forgrening) i dokumentationen til Application Programming Interface (API). Denne egenskab er tilgængelig fra LibreOffice 7.2 og fremad.
Default | Nej | Boolean | Button | Angiver, om en kommandoknap er standard-(OK)-knappen.
Enabled | Nej | Boolean | Alt | Angiver, om kontrollen er tilgængelig med markøren.
Format | Nej | String | DateField, TimeField, FormattedField (skrivebeskyttet) | Angiver, at formatet bruges til at vise datoer og klokkeslæt. Det skal være en af disse strenge. Til datoer: "Standard (kort)", "Standard (kort YY)", "Standard (kort YYYY)", "Standard (lang)", "DD/MM/YY", "MM/DD/YY", "YY/MM/DD", "DD/MM/YYYY", "MM/DD/YYYY" , "YYYY/MM/DD", "YY-MM-DD", "YYYY-MM-DD". Til klokkeslæt: "24t kort", "24t lang", "12t kort", "12t lang".
ListCount | Ja | Long | ComboBox, ListBox | Angiver antallet af rækker i et listefelt eller et kombinationsfelt.
ListIndex | Nej | Long | ComboBox, ListBox | Angiver, hvilket element, der valgt i et listefelt eller kombinationsfelt.
Locked | Nej | Boolean | ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, TextField, TimeField | Angiver, om kontrollen er skrivebeskyttet.
MultiSelect | Nej | Boolean | ListBox | Angiver, om en bruger kan foretage flere valgt i et listefelt.
Name | Ja | String | Alt | Kontrollens navn.
Page | Nej | Integer | Alt | En dialog kan have flere sider, der kan gennemgås trin for trin af brugeren. Dialogobjektets Side-egenskab definerer, hvilken af dialogens sider, der er aktiv. En kontrols Sideegenskab definerer den side i dialogen, hvor kontrollen er synlig.
Parent | Ja | Tjenesten Dialog | Alt | Forældreklassen SFDialogs.Dialogs objektforekomst.
Picture | Nej | String | Button, ImageControl | Angiver, at filnavnet, der indeholder et bitmap eller en anden type grafik, vises på den angivne kontrol. Filnavnet skal leve op til attributten FileNaming i tjenesten ScriptForge.FileSystem.
RootNode | Ja | UNO objekt | TreeControl | Et objekt, der repræsenterer den nederste rodforgrening (sædvanligvis er kun en rodforgrening af den slags) Se detaljeret information om XmutableTreeNode (Xforanderlig forgrening) i dokumentation til Application Programming Interface (API). Denne egenskab er tilgængelig fra LibreOffice 7.2 og fremad.
RowSource | Nej | Array of strings | ComboBox, ListBox | Angiver de data, der er indeholdt i et kombinationsfelt eller et listefelt.
Text | Ja | String | ComboBox, FileControl, FormattedField, PatternField, TextField | Giver adgang til den tekst, der vises af kontrollen.
TipText | Nej | String | Alt | Angiver den tekst, der vises som et værktøjstip, når du holder markøren over kontrollen.
TripleState | Nej | Boolean | CheckBox | Angiver, om kontrollens afkrydsningsfelt må vises nedtonet (gråt) eller ej.
Value | Nej | Variant |  | Se egenskaben Value (værdi)
Visible | Nej | Boolean | Alt | Angiver, om kontrollen er skjult eller synlig.
XControlModel | Ja | UNO objekt | Alt | UNO-objektet repræsenterer kontrolmodellen. Se detaljeret information i XControlModel og UnoControlDialogModel i APIens (Application Programming Interface) dokumentation.
XControlView | Ja | UNO objekt | Alt | UNO-objektet repræsenterer kontrolvisningen. Se detaljeret information i XControl og UnoControlDialog i APIens (Application Programming Interface) dokumentation.
XTreeDataModel | Ja | UNO objekt | TreeControl | UNO-objekt, der repræsenterer datamodellen Kontroltræ. Se detaljeret information om XMutableTreeDataModel (Xforanderlig datamodel) i dokumentationen til Application Programming Interface (API). Denne egenskab er tilgængelig fra LibreOffice 7.2 og fremad.

## Egenskaben Value (Værdi)

Kontroltype | Type | Beskrivelse
Button | Boolean | Kun til til/fra-knapper
CheckBox | Boolsk eller heltal | 0, False: ryddet 1, True: markeret 2: nedtonet, ved ikke
ComboBox | String | Den valgte værdi. Egenskaben ListIndex er et alternativt valg.
CurrencyField | Numerisk |
DateField | Date |
FileControl | String | Et filnavn formeret efter egenskaben FileNaming i tjenesten ScriptForge.FileSystem
FormattedField | Streng eller numerisk |
ListBox | Steng eller matrix af strenge | De valgte rækker som en skalar eller som en matrix, afhængigt af atributten MultiSelect
NumericField | Numerisk |
PatternField | String |
ProgressBar | Numerisk | Skal være inden for de foruddefinerede grænser
RadioButton | Boolean | Hver knap har sit eget navn. De er sammenkædede, hver deres Tabulatorpositioner er fortløbende. Hvis en alternativknap er sat til True, sættes de andre de beslægtede knapper automatisk til False
ScrollBar | Numerisk | Skal være inden for de foruddefinerede grænser
TextField | String | Den tekst, der ses i feltet
TimeField | Date |

## Hændelsesegenskaber

Returnerer en URI-streng med reference til det script, der udløstes af hændelsen. Læs specifikationen til den i scripting framework URI specification (specifikation af URI-scriptrammen).

Disse hændelsesegenskaber er tilgængelige fra LibreOffice 7.2 og fremad.

Navn | Skrivebeskyttet | Beskrivelse ifølge etiketten i Basic IDE
OnActionPerformed | Ja | Udfør handling
OnAdjustmentValueChanged | Ja | Under justering
OnFocusGained | Ja | Når fokus modtages
OnFocusLost | Ja | Når fokus mistes
OnItemStateChanged | Ja | Elementstatus ændret
OnKeyPressed | Ja | Tast trykket
OnKeyReleased | Ja | Tast sluppet
OnMouseDragged | Ja | Mus flyttet mens tast trykkes
OnMouseEntered | Ja | Mus indenfor
OnMouseExited | Ja | Mus udenfor
OnMouseMoved | Ja | Mus flyttet
OnMousePressed | Ja | Museknap trykket
OnMouseReleased | Ja | Museknap sluppet
OnNodeExpanded | Nej | (Ikke i Basic IDE) når udvidelsesknappen trykkes på en forgrening i et kontroltræ
OnNodeSelected | Nej | (Ikke i Basic IDE) når en forgrening i et kontroltræ vælges
OnTextChanged | Ja | Tekst ændret

## Metoder

Liste over metoder i tjenesten DialogControl
AddSubNode AddSubTree | CreateRoot FindNode | SetFocus WriteLine

Disse metoder er tilgængelige fra LibreOffice 7.2 og senere.

## AddSubNode

Opret og returner en ny forgrening på kontroltræet som et UNO-objekt, der er underordnet en ophavsforgrening. Se detaljeret information om XMutableTreeNode (Xforanderlig forgrening) i dokumentationen til Application Programming Interface (API).

Denne metode kan eventuelt kaldes, før visning af dialogfeltet til opbygning af begyndelses-træet. Den kan også kaldes fra en dialog- eller kontrol-hændelse - med hændelsen OnNodeExpanded (ved udvidet forgrening) - så træet kan udfyldes dynamisk.

### Syntaks:

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

### Parametre:

overordnet_forgrening: Et UNO forgreningsobjekt, af typen com.sun.star.awt.tree.XMutableTreeNode.

visningsværdi: Teksten vises i træets kontrolfelt.

dataværdi: Enhver værdi, der er forbundet med den nye forgrening. datavalue (dataværdi) kan være en streng, et tal eller en dato. Udelad argumentet, når det ikke er anvendeligt.

### Eksempel:

LibreOffice Basic- og Python-eksempler opfanger det aktuelle dokuments dialog myDialog fra biblioteket Standard.

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

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

## AddSubTree

Returner True (sand), når det lykkedes at indsætte en forgrening underordnet en ophavsforgrening i et kontroltræ. Hvis ophavs-forgreningen allerede havde afkoms-forgreninger, før denne metode blev kaldt, slettes afkoms-forgreningerne.

Denne metode kan eventuelt kaldes, før visning af dialogfeltet til opbygning af begyndelses-træet. Den kan også kaldes fra en dialog- eller kontrol-hændelse - med hændelsen OnNodeExpanded (ved udvidet forgrening) - så træet kan udfyldes dynamisk.

### Syntaks:

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

### Parametre:

overordnet_forgrening: Et UNO-forgreningsobjekt, af typen com.sun.star.awt.tree.XMutableTreeNode.

fladt_træ: en to-dimensionel matrix, sorteret efter kolonner, der indeholder visningsværdierne. En sådan matrix kan udsendes af metoden GetRows anvendt på tjenesten SFDatabases.Database. Når et matrixelement indeholder den tekst, der skal vises, er Empty (tom) eller Null (nul), oprettes der ingen ny underforgrening og resten af rækken udelades.

          Flat tree (fladt træ)    >>>>    Resulting subtree (resulterende deltræ)
          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_dataværdi: Når standardværdien False (falsk) anvendes, indeholder hver kolonne i fladt_træ den tekst, der skal vises i kontroltræet. Når True (sand), er teksterne, der skal vises (displayvalue (visningsværdi)), i kolonnerne 0, 2, 4, ... , mens dataværdierne (datavalue) er i kolonnerne 1, 3, 5, ...

### Eksempel:

          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)

         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 en ny rodforgrening på kontroltræet som et UNO-forgreningsobjekt af typen com.sun.star.awt.tree.XMutableTreeNode (Xforanderlig forgrening). Den nye rodforgrening indsættes under allerede eksisterende rodforgreninger. Se detaljeret information om XMutableTreeNode (Xforanderlig forgrening) i dokumentationen til Application Programming Interface (API).

Denne metode kan eventuelt kaldes før visning af dialogfeltet, hvor begyndelses-træet bygges. Den kunne også kaldes fra en dialog- eller kontrol-hændelse for at udfylde træet dynamisk.

### Syntaks:

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

### Parametre:

visningsværdi: Teksten, der vises i træets kontrolfelt.

dataværdi: Enhver værdi, der er forbundet med den nye forgrening. datavalue (dataværdi) kan være en streng, et tal eller en dato. Udelad argumentet, når det ikke er anvendeligt.

### Eksempel:

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

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

## FindNode

Gennemgår træet rekursivt, startende fra roden, og finder en forgrending, der opfylder nogle kriterier. Ethvert - 1-match er nok - når det har en visningsværdi, der matcher mønstret visningsværdi eller har en dataværdi, der er lig med dataværdi. Sammenlignerne have eller ikke have Stort-og-småt. Den første matchende forekomst returneres som et forgrenings-UNO-objekt af typen com.sun.star.awt.tree.XMutableTreeNode. Se detaljeret information om XMutableTreeNode (Xforanderlig forgrening) i dokumentationen til Application Programming Interface (API).

Hvis den ikke findes, returnerer metoden Nothing (ingenting), som skal testes med den indbyggede funktion IsNull() (er nul()).

Den metode kan eventuelt kaldes før visning af dialogfeltet til bygning af begyndelsestræet. Den kan også kaldes fra en dialog- eller kontrol-hændelse.

### Syntaks:

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

### Parametre:

Et af argumenterne visningsværdi eller dataværdi skal angives. Hvis begge er tilstede, er et match tilstrækkeligt til at vælge en forgrening.

visningsværdi: Det mønster, der skal matches. Se en liste over mulige jokere i metoden SF_String.IsLike() Når den er lig med en nul-længde streng (standard), søges der ikke efter denne visningsværdi.

dataværdi: Enhver værdi, der er forbundet med den nye forgrening. datavalue (dataværdi) kan være en streng, et tal eller en dato. Udelad argumentet, når det ikke er anvendeligt.

Stort-og-småt: Standardværdien er False (falsk)

### Eksempel:

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

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

## SetFocus

Sæt fokus på kontrollen. Returner True , hvis fokuseringen lykkedes.

Denne metode kaldes ofte fra en dialog eller en kontrolhændelse

### Syntaks:

svc.SetFocus(): bool

### Eksempel:

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

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

## WriteLine

Tilføj en ny linje i slutningen af et tekstfelt med flere linjer. Der indsætte et linjeskift-tegn, når det er passende. Metoden returnerer True, når det er lykkedes den.

Der sættes et fejlflag, hvis den faktiske kontrol ikke er af typen TextField eller ikke har flere linjer.

### Syntaks:

svc.WriteLine(opt line: str): bool

          oControl.WriteLine([Line As String]) As Boolean

### Parametre:

Line (linje): Strengen, der skal indsættes. Standard er en tom linje.

### Eksempel:

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

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

Alle ScriptForge Basic-rutiner eller identifikatorer, som indledes med et understregningstegn "_" er reserveret til internt brug. De er ikke beregnet til brug i Basic-makroer.

Relaterede emner

SFDialogs. Dialog

Tjenesten ScriptForge.String (streng)

Tjenesten ScriptForge.UI (brugerflade)