Contenuto

# Servizio SFDialogs.DialogControl

Il servizio DialogControl gestisce i controlli appartenenti a una finestra di dialogo definita dall'Editor delle finestre di Basic. Ogni istanza del servizio corrente rappresenta un singolo controllo all'interno della finestra di dialogo.

Lo scopo è quello di ottenere ed impostare i valori visualizzati dai controlli della finestra di dialogo. La formattazione è accessibile tramite le proprietà XControlModel e XControlView.

Fate attenzione che il contenuto dell'unica proprietà DialogControl.Value varia in base al tipo di controllo.

Un'attenzione particolare è rivolta ai controlli del tipo ad albero. È facile popolare un albero, ramo per ramo, o con un insieme di rami contemporaneamente. Il popolamento di un controllo ad albero può essere eseguito staticamente o dinamicamente.

Il servizio SFDialogs.DialogControl è strettamente collegato al servizio SFDialogs.Dialog.

## Invocazione del servizio

Prima di usare il servizio DialogControl è necessario caricare o importare le librerie ScriptForge:

• Le macro in Basic richiedono il caricamento della libreria ScriptForge usando la seguente istruzione:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Gli script in Python richiedono un'importazione dal modulo scriptforge:
from scriptforge import CreateScriptService

Il servizio DialogControl è invocato da un'istanza esistente del servizio Dialog attraverso il relativo metodo Controls(). La finestra di dialogo deve essere inizializzata con il servizio SFDialogs.Dialog.

          Dim myDialog As Object, myControl As Object
          Set myDialog = CreateScriptService("SFDialogs.Dialog", "GlobalScope", myLibrary, DialogName)
          Set myControl = myDialog.Controls("myTextBox")
          myControl.Value = "Finestra di dialogo avviata il" & Now()
          myDialog.Execute()
          '... elabora i valori effettivi dei controlli
          myDialog.Terminate()

         from time import localtime, strftime
         dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', lib_name, dlg_name)
         text = dlg.Controls('myTextBox')
         text.Value = "Finestra di dialogo avviata il" + strftime("%a, %d %b %Y %H:%M:%S", localtime())
         dlg.Execute()
         #... elabora i valori effettivi dei controlli
         dlg.Terminate()

## Cercare l'istanza di DialogControl che ha attivato l'evento di un controllo

Un'istanza del servizio DialogControl può essere trovata attraverso il servizio SFDialogs.DialogEvent, purché la finestra di dialogo sia stata inizializzata con il servizio Dialog. Nell'esempio seguente, oControl contiene l'istanza DialogControl che ha attivato l'evento del controllo.

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

O usando Python:

         def control_event_handler(event: uno):
             oControl = CreateScriptService('SFDialogs.DialogEvent', event)
             # ...

Tenere presente che negli esempi precedenti il prefisso "SFDialogs." può essere omesso se ritenuto appropriato.

## Gestione delle eccezioni con i gestori degli eventi

Quando si crea un gestore degli eventi per i controlli è buona pratica gestire gli errori all'interno della stessa subroutine. Per esempio, si presume che il gestore degli eventi seguente sia chiamato quando si fa clic sul pulsante.

        Sub OnButtonClicked(ByRef oEvent As Object)
        On Local Error GoTo Catch
            Dim oControl As Object
            oControl = CreateScriptService("DialogEvent", oEvent)
            ' Elabora l'evento
            Exit Sub
        Catch:
            MsgBox SF_Exception.Description
            SF_Exception.Clear
        End Sub

Chiamare SF_Exception.Clear se non si desidera che l'errore si propaghi dopo che l'esecuzione della finestra di dialogo è terminata.

In Python usare i blocchi nativi try/except per gestire le eccezioni, come mostrato qui di seguito:

        def on_button_clicked(event=None):
            try:
                oControl = CreateScriptService("DialogEvent", event)
                # Elabora l'evento
            except Exception as e:
                # L'oggetto "bas" seguente è un'istanza del servizio Basic
                bas.MsgBox(str(e))

## Tipi di controllo

Il servizio DialogControl è disponibile per questi tipi di controllo:

• Button • CheckBox • ComboBox • CurrencyField • DateField • FileControl | • FixedLine • FixedText • FormattedField • GroupBox • Hyperlink • ImageControl | • ListBox • NumericField • PatternField • ProgressBar • RadioButton • ScrollBar | • TableControl • TabPageContainer • TextField • TimeField • TreeControl

Il controllo di tipo TabPageContainer non viene definito nell'editor della finestra di dialogo.

## Proprietà

Nome | Sola lettura | Tipo | Applicabile a | Descrizione
--- | --- | --- | --- | ---
Border | Sì | String | Button, … | La proprietà Border si riferisce al contorno del controllo: "3D", "FLAT" (piatto) o "NONE" (nessuno).
Cancel | No | Boolean | Button | Specifica se un pulsante di comando ha o non ha il comportamento di un pulsante Annulla.
Caption | No | String | Button, CheckBox, FixedLine, FixedText, GroupBox, Hyperlink, RadioButton | Specifica il testo associato al controllo.
ControlType | Sì | String | Tutto | Uno dei tipi elencati sopra.
CurrentNode | No | Oggetto della libreria UNO | TreeControl | Il nodo superiore attualmente selezionato nel controllo ad albero. Per informazioni più dettagliate fate riferimento a XmutableTreeNode nella documentazione delle API (Application Programming Interface).
Default | No | Boolean | Button | Specifica se un pulsante di comando è il pulsante predefinito (OK).
Enabled | No | Boolean | Tutto | Specifica se il controllo è accessibile con il cursore.

Format

No

String

DateField, TimeField, FormattedField

(sola lettura)

Specifica il formato usato per visualizzare le date e gli orari. Deve essere una delle seguenti stringhe:

Per le date: "Standard (short)", "Standard (short YY)", "Standard (short YYYY)", "Standard (long)", "DD/MM/YY", "MM/DD/YY", "YY/MM/DD", "DD/MM/YYYY", "MM/DD/YYYY" , "YYYY/MM/DD", "YY-MM-DD", "YYYY-MM-DD".

Per gli orari: "24h short", "24h long", "12h short", "12h long".

ListCount | Sì | Long | ComboBox, ListBox, TableControl | Specifica il numero di righe in una casella di riepilogo (ListBox), una casella combinata (ComboBox) o una tabella (TableControl).
ListIndex | No | Long | ComboBox, ListBox, TableControl | Specifica l'elemento selezionato in una casella di riepilogo (ListBox), una casella combinata (ComboBox) o una tabella (TableControl).
Locked | No | Boolean | ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, TextField, TimeField | Specifica se il controllo è di sola lettura.
MultiSelect | No | Boolean | ListBox | Specifica se un utente può eseguire selezioni multiple in una casella di riepilogo.
Name | Sì | String | Tutto | Il nome del controllo.
Page | No | Integer | Tutto | Una finestra di dialogo può contenere diverse pagine che possono essere sfogliate dall'utente passo passo. La proprietà Page dell'oggetto Dialog definisce quale pagina è attiva. La proprietà Page di un controllo definisce la pagina della finestra di dialogo sulla quale è visibile il controllo.
Parent | Sì | Servizio Dialog | Tutto | La classe SFDialogs.Dialog genitrice dell'istanza dell'oggetto.
Picture | No | String | Button, ImageControl | Specifica il nome del file che contiene una bitmap o un altro tipo di immagine da visualizzare nel controllo specificato. Il nome del file deve essere conforme a quanto previsto per l'attributo FileNaming del servizio ScriptForge.FileSystem.
RootNode | Sì | Oggetto della libreria UNO | TreeControl | Un oggetto che rappresenta il nodo radice più in basso (di solito esiste solo un nodo così). Per informazioni dettagliate fate riferimento a XmutableTreeNode nella documentazione delle API (Application Programming Interface).
RowSource | No | Array of strings | ComboBox, ListBox | Specifica i dati contenuti in una casella combinata o in una casella di riepilogo.
TabIndex | Si | Numeric | All | La proprietà TabIndex specifica il posizionamento del campo di controllo nella sequenza di tabulazione all'interno della finestra di dialogo.
Text | Sì | String | ComboBox, FileControl, FormattedField, PatternField, TextField | Fornisce l'accesso al testo visualizzato dal controllo.
TipText | No | String | Tutto | Specifica il testo che compare come suggerimento quando il puntatore del mouse viene posizionato sopra il controllo.
TripleState | No | Boolean | CheckBox | Specifica se la casella di controllo deve apparire disabilitata (in grigio) o no.
URL | No | String | Hyperlink | L'URL da aprire quando si fa clic sul campo di controllo.
Value | No | Variant |  | Fare riferimento alla proprietà Value
Visible | No | Boolean | Tutto | Specifica se il controllo è nascosto o visibile.
XControlModel | Sì | Oggetto della libreria UNO | Tutto | L'oggetto UNO che rappresenta il modello del controllo. Per informazioni dettagliate fate riferimento a XControlModel e UnoControlDialogModel nella documentazione delle API (Application Programming Interface).
XControlView | Sì | Oggetto della libreria UNO | Tutto | L'oggetto UNO che rappresenta la vista del controllo. Per informazioni dettagliate fate riferimento a XControl e UnoControlDialog nella documentazione delle API (Application Programming Interface).
XTreeDataModel | Sì | Oggetto della libreria UNO | TreeControl | L'oggetto UNO che rappresenta il modello del controllo ad albero. Per informazioni dettagliate fate riferimento a XMutableTreeDataModel nella documentazione delle API (Application Programming Interface).
XGridColumnModel | Sì | Oggetto UNO | TableControl | L'oggetto UNO che rappresenta il modello dei dati per il controllo di tipo tabella. Per i dettagli, fare riferimento a XGridColumnModel della documentazione delle API (Application Programming Interface).
XGridDataModel | Sì | Oggetto UNO | TableControl | L'oggetto UNO che rappresenta il modello dei dati per il controllo di tipo ad albero. Per i dettagli, fare riferimento a XGridDataModel della documentazione delle API (Application Programming Interface).

## La proprietà Value

Tipo del controllo | Tipo | Descrizione
--- | --- | ---
Button | Boolean | Solo per i pulsanti di tipo attiva/disattiva
CheckBox | Logico (booleano) o intero | 0, False: non spuntato 1, True: spuntato 2: in grigio, non specificato
ComboBox | String | Il valore selezionato. La proprietà ListIndex è un opzione alternativa.
CurrencyField | Numerico |
DateField | Date |
FileControl | String | Un nome di file formattato in conformità con la proprietà FileNaming del servizio ScriptForge.FileSystem
FormattedField | Stringa o numerico |
ListBox | Stringa o matrice di stringhe | Le righe selezionate in formato scalare o come matrice a seconda dell'attributo MultiSelect
NumericField | Numerico |
PatternField | String |
ProgressBar | Numerico | Deve essere compreso tra i limiti prestabiliti
RadioButton | Boolean | Ogni pulsante ha il proprio nome. Sono collegati se le loro posizioni di tabulazione (TAB) sono adiacenti. Se un Pulsante di scelta è impostato a True, gli altri pulsanti collegati vengono automaticamente impostati a False
ScrollBar | Numerico | Deve essere compreso entro limiti prestabiliti
TabPageContainer | Numeric | Una finestra di dialogo può avere più schede numerate identificabili o modificabili attraverso la loro proprietà Value.
TableControl | Array | Matrice unidimensionale contenente i dati della riga correntemente selezionata.
TextField | String | Il testo che appare nel campo
TimeField | Date |

Non esiste la proprietà Value per i controlli GroupBox, Hyperlink, ImageControl e TreeControl della finestra di dialogo.

## Proprietà dell'evento

Le proprietà On… degli eventi sono delle stringhe URI che fanno riferimento allo script attivato da un evento. Leggere le sue specifiche nelle specifiche URI per il framework del linguaggio di scripting.

Nome (collegamento all'evento delle API) | La descrizione come etichettata nella IDE di Basic
--- | ---
OnActionPerformed | Esegui azione
OnAdjustmentValueChanged | Durante la regolazione
OnFocusGained | Al ricevimento del fuoco
OnFocusLost | Alla perdita del fuoco
OnItemStateChanged | Lo stato dell'elemento è cambiato
OnKeyPressed | Tasto premuto
OnKeyReleased | Tasto rilasciato
OnMouseDragged | Spostamento del mouse con pulsante premuto
OnMouseEntered | Mouse dentro
OnMouseExited | Mouse fuori
OnMouseMoved
OnMousePressed | Pulsante del mouse premuto
OnMouseReleased | Pulsante del mouse rilasciato
OnNodeExpanded | (Non nella IDE di Basic) quando viene premuto il pulsante di espansione di un nodo di un controllo ad albero
OnNodeSelected | (Non nella IDE di Basic) quando viene selezionato un nodo di un controllo ad albero
OnTabSelected | (Non nell'IDE di Basic) quando viene selezionata una scheda nel controllo TabPage
OnTextChanged | Testo modificato

Suggerimento: tutte le proprietà On… possono essere impostate tramite programmazione.
Un esempio dimostrativo si trova in Come mostrare i dati in un controllo ad albero sul Wiki di LibreOffice.

L'assegnazione degli eventi per mezzo dell'IDE di Basic o la loro assegnazione tramite macro si escludono vicendevolmente.

## Metodi

Elenco dei metodi del servizio DialogControl
AddSubNode AddSubTree CreateRoot | FindNode Resize SetFocus | SetTableData WriteLine

## AddSubNode

Crea e restituisce un nuovo nodo di un controllo ad albero in formato oggetto UNO subordinato a un nodo genitore. Per informazioni dettagliate fate riferimento a XMutableTreeNode nella documentazione delle API (Application Programming Interface).

Questo metodo può essere chiamato prima di visualizzare la finestra di dialogo per creare l'albero iniziale. Può essere chiamato anche da un evento di una finestra di dialogo o di un controllo - usando l'evento OnNodeExpanded - per completare dinamicamente l'albero.

### Sintassi:

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

### Parametri:

parentnode: un nodo in formato oggetto UNO, del tipo com.sun.star.awt.tree.XMutableTreeNode.

displayvalue: il testo che compare nella finestra del controllo ad albero.

datavalue: qualsiasi valore associato al nuovo nodo. datavalue può essere una stringa, un numero o una data. Omettete l'argomento quando non è applicabile.

### Esempio:

Esempi in LibreOffice Basic e Python che caricano nel documento attuale la finestra myDialog dalla libreria Standard.

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

##### In Python

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

## AddSubTree

Restituisce True se un sottoalbero, subordinato a un nodo genitore, poteva essere inserito correttamente in un controllo ad albero. Se prima di chiamare questo metodo il nodo genitore aveva già dei nodi figli, questi vengono cancellati.

Questo metodo può essere chiamato prima di visualizzare la finestra di dialogo per creare l'albero iniziale. Può essere chiamato anche da un evento di una finestra di dialogo o di un controllo - usando l'evento OnNodeExpanded - per completare dinamicamente l'albero.

### Sintassi:

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

### Parametri:

parentnode: Un nodo in formato oggetto UNO, del tipo com.sun.star.awt.tree.XMutableTreeNode.

flattree: una matrice bidimensionale ordinata in base alle colonne contenti i dati da visualizzare. Tale matrice può essere fornita dal metodo GetRows applicato al servizio SFDatabases.Database. Quando un elemento della matrice che contiene il testo da visualizzare è Empty o Null, non viene creato alcun nuovo nodo derivato ed il resto della riga viene saltato.

          Albero piatto >>>> Sottoalbero risultante
          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: se impostato su False viene usato il valore predefinito, ogni colonna del flattree contiene il testo da visualizzare nel controllo ad albero. Se invece è impostato su True, i testi da visualizzare (displayvalue) si trovano nelle colonne 0, 2, 4, ... mentre i valori dei dati (datavalue) stanno nelle colonne 1, 3, 5, ...

### Esempio:

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

##### In 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

Restituisce un nuovo nodo radice di un controllo ad albero, in formato oggetto UNO del tipo com.sun.star.awt.tree.XMutableTreeNode. La nuova radice dell'albero viene inserita sotto i nodi radice preesistenti. Per informazioni dettagliate fate riferimento a XMutableTreeNode nella documentazione delle API (Application Programming Interface).

Questo metodo può essere chiamato prima di visualizzare la finestra di dialogo per creare l'albero iniziale. Può essere chiamato anche dall'evento di una finestra di dialogo o di un controllo per completare l'albero dinamicamente.

### Sintassi:

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

### Parametri:

displayvalue: Il testo che compare nella finestra del controllo ad albero.

datavalue: qualsiasi valore associato al nuovo nodo. datavalue può essere una stringa, un numero o una data. Omettete l'argomento quando non è applicabile.

### Esempio:

##### In Basic

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

##### In Python

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

## FindNode

Attraversa l'albero e trova ricorsivamente, a partire dalla radice, un nodo che rispetta determinati criteri. Sia - 1 condizione è sufficiente - che abbia il valore visualizzato corrispondente al criterio di ricerca displayvalue o che abbia il valore uguale a datavalue. La comparazione può essere o meno sensibile alla differenza tra maiuscole e minuscole. La prima occorrenza trovata viene restituita come nodo in formato oggetto UNO del tipo com.sun.star.awt.tree.XMutableTreeNode. Per informazioni dettagliate fate riferimento a XMutableTreeNode nella documentazione delle API (Application Programming Interface).

Se non trova nulla, il metodo restituisce Nothing, da controllare con la funzione incorporata IsNull().

Questo metodo può essere chiamato prima di visualizzare la finestra di dialogo per creare l'albero iniziale. Può essere chiamato anche da un evento di una finestra di dialogo o di un controllo.

### Sintassi:

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

### Parametri:

È necessario specificare un argomento tra displayvalue o datavalue. Se sono presenti entrambi è sufficiente una sola corrispondenza per selezionare il nodo.

displayvalue: il criterio di ricerca da trovare. Fate riferimento al metodo SF_String.IsLike() per l'elenco dei possibili caratteri jolly. Quando è uguale a una stringa di lunghezza zero (predefinito), questo valore di visualizzazione non viene ricercato.

datavalue: qualsiasi valore associato al nuovo nodo. datavalue può essere una stringa, un numero o una data. Omettete l'argomento quando non è applicabile.

casesensitive: Il valore predefinito è False

### Esempio:

##### In Basic

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

##### In Python

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

## Resize

Sposta l'angolo superiore destro di una finestra di dialogo alle nuove coordinate e/o ne modifica le dimensioni. Restituisce True se il ridimensionamento è stato eseguito con successo.

### Sintassi:

svc.Resize(opt Left: int, opt Top: int, opt Width: int, opt Height: int): bool

### Parametri:

Tutte le distanze sono espresse in unità Map AppFont e sono misurate dall'angolo superiore sinistro della finestra di dialogo genitore. Senza argomenti il metodo ridimensiona il campo di controllo alle sue "dimensioni predefinite", una dimensione regolata a seconda del suo contenuto effettivo. Gli argomenti mancanti non vengono modificati.

Left: la distanza orizzontale dall'angolo superiore sinistro

Top: la distanza verticale dall'angolo superiore sinistro

Width: la larghezza orizzontale del rettangolo che contiene il campo di controllo

Height: l'altezza verticale del rettangolo che contiene il campo di controllo

### Esempio:

##### In Basic

          Dim oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.Resize(100, 200, Height:=6000) ' La larghezza non viene modificata

##### In Python

          dlg = CreateScriptService('Dialog', None, None, 'myDialog')
          ctrl = dlg.Controls('thisControl')
          ctrl.Resize(300, 200, 1500) # L'altezza non viene modificata

## SetFocus

Imposta il fuoco sul controllo. Restituisce True se l'impostazione del fuoco è riuscita.

Questo metodo viene chiamato spesso da un evento di un finestra di dialogo o di un controllo.

### Sintassi:

svc.SetFocus(): bool

### Esempio:

##### In Basic

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

##### In Python

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

## SetTableData

Riempie la tabella TableControl con i dati specificati. Tutti i dati preesistenti vengono eliminati prima dell'inserimento dei nuovi dati, passati come argomento.

Quando la tabella TableControl viene inserita nella finestra di dialogo, è possibile usare l'IDE di Basic per definire se le intestazioni di colonna e di riga saranno visualizzate nella tabella. Se TableControl contiene le intestazioni di colonna e/o di riga, la prima colonna e/o riga della matrice di dati fornita sarà usata per le etichette delle intestazioni della tabella.

Questo metodo restituisce True, se eseguito correttamente.

### Sintassi:

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

### Parametri:

dataarray: i dati da inserire nella tabella rappresentati come una matrice di matrici in Basic o una tupla di tuple in Python. I dati devono comprendere le intestazioni di colonna e riga se queste devono essere visualizzate dalla TableControl.

widths: matrice contenente le larghezze relative di ciascuna colonna. In altre parole, widths = (1, 2) significa che la seconda colonna è larga il doppio della prima. Se il numero di valori nella matrice è inferiore al numero di colonne della tabella, l'ultimo valore della matrice è usato per definire la larghezza delle restanti colonne.

alignments: definisce l'allineamento di ogni colonna, in formato stringa, nella quale i singoli caratteri possono essere "L" (a sinistra), "C" (al centro), "R" (a destra) o " " (spazio, predefinito, che significa a sinistra per le stringhe e a destra per i valori numerici). Se la lunghezza della stringa è più corta del numero di colonne della tabella, l'ultimo carattere della stringa è usato per definire l'allineamento delle restanti colonne.

RowHeaderWidth: larghezza delle intestazioni di riga espressa in unità Map AppFont. Predefinita = 10. L'argomento viene ignorato quando TableControl non ha intestazioni di riga.

### Esempio:

##### In Basic

L'esempio seguente presuppone che la finestra di dialogo myDialog contenga una tabella di tipo TableControl denominata Grid1 con le proprietà "Show row header" e "Show column header" impostate su "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()

La proprietà Value restituisce la riga selezionata nella tabella. Se non è selezionata alcuna riga, restituisce una matrice (oggetto Array) vuota. Il frammento di codice che segue mostra come verificare se è selezionata qualche colonna della tabella.

         rowValues = oTable.Value
         If UBound(rowValues) < 0 Then
             MsgBox "Nessuna riga selezionata."
         Else
             MsgBox "La riga " & oTable.ListIndex & " è selezionata."
         End If

##### In 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

Aggiunge una nuova riga alla fine di un campo di testo con più righe. Se necessario viene inserito un carattere interruzione di riga. Il metodo restituisce True se eseguito con successo.

Viene generato un errore se il controllo attivo non è del tipo TextField o non è multiriga.

### Sintassi:

svc.WriteLine(opt line: str): bool

### Parametri:

Line: La stringa da inserire. Il valore predefinito è una riga vuota.

### Esempio:

##### In Basic

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

##### In Python

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

Tutte le routine e gli identificatori Basic di ScriptForge che iniziano con un carattere di sottolineatura "_" sono riservati per uso interno. Non è previsto il loro utilizzo nelle macro in Basic o negli script in Python.

Argomenti correlati

Servizio SFDialogs.Dialog

Servizio ScriptForge.String

Servizio ScriptForge.UI