Περιεχόμενα

# Υπηρεσία SFDialogs.DialogControl

Η υπηρεσία DialogControl διαχειρίζεται τα στοιχεία ελέγχου που ανήκουν σε ένα παράθυρο διαλόγου που ορίζεται με τη Basic Dialog Editor. Κάθε παρουσία της τρέχουσας υπηρεσίας αντιπροσωπεύει ένα μόνο στοιχείο ελέγχου μέσα σε ένα πλαίσιο διαλόγου.

Η εστίαση τίθεται στη λήψη και τη ρύθμιση των τιμών που εμφανίζονται από τα χειριστήρια του πλαισίου διαλόγου. Η μορφοποίηση είναι προσβάσιμη μέσω των ιδιοτήτων XControlModel και XControlView.

Σημειώστε ότι το μοναδικό περιεχόμενο της ιδιότητας DialogControl.Value ποικίλλει ανάλογα με τον τύπο ελέγχου.

Ιδιαίτερη προσοχή δίνεται στους ελέγχους τύπου δέντρου ελέγχου. Είναι εύκολο να συμπληρώσετε ένα δέντρο, είτε κλαδί προς κλαδί, είτε με ένα σύνολο κλαδιών ταυτόχρονα. Η συμπλήρωση ενός στοιχείου ελέγχου δέντρου μπορεί να εκτελεστεί στατικά ή δυναμικά.

Η υπηρεσία SFDialogs.DialogControl σχετίζεται στενά με την υπηρεσία SFDialogs.Dialog.

## Κλήση υπηρεσίας

Πριν τη χρήση της υπηρεσίας DialogControl, πρέπει να φορτωθεί ή να εισαχθεί η βιβλιοθήκη ScriptForge:

• Οι μακροεντολές Basic απαιτούν τη φόρτωση της βιβλιοθήκης ScriptForge χρησιμοποιώντας την ακόλουθη πρόταση:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Τα σενάρια Python απαιτούν εισαγωγή από την ενότητα scriptforge:
από το scriptforge import CreateScriptService

Η υπηρεσία DialogControl καλείται από μια υπάρχουσα παρουσία της υπηρεσίας Dialog μέσω της μεθόδου Controls(). Το παράθυρο διαλόγου πρέπει να ξεκινήσει με την υπηρεσία SFDialogs.Dialog.

          Dim myDialog As Object, myControl As Object
          Set myDialog = CreateScriptService("SFDialogs.Dialog", "GlobalScope", myLibrary, DialogName)
          Set myControl = myDialog.Controls("myTextBox")
          myControl.Value = "Ο διάλογος ξεκίνησε στις " & Now()
          myDialog.Execute()
          ' ... επεξεργασία των ενεργών τιμών των στοιχείων ελέγχου
          myDialog.Terminate()

         from time import localtime, strftime
         dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', lib_name, dlg_name)
         text = dlg.Controls('myTextBox')
         text.Value = "Ο διάλογος ξεκίνησε στις " + strftime("%a, %d %b %Y %H:%M:%S", localtime())
         dlg.Execute()
         # ... επεξεργασία των ενεργών τιμών των στοιχείων ελέγχου
         dlg.Terminate()

## Ανάκτηση της παρουσίας DialogControl που ενεργοποίησε ένα συμβάν ελέγχου

Μια παρουσία της υπηρεσίας DialogControl μπορεί να ανακτηθεί μέσω της υπηρεσίας SFDialogs.DialogEvent, με την προϋπόθεση ότι το παράθυρο διαλόγου ξεκίνησε με την υπηρεσία Dialog. Στο παρακάτω παράδειγμα, το oControl περιέχει την παρουσία DialogControl που ενεργοποίησε το συμβάν ελέγχου.

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

Ή χρησιμοποιώντας Python:

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

Λάβετε υπόψη ότι στα προηγούμενα παραδείγματα, το πρόθεμα "SFDialogs." μπορεί να παραλειφθεί όταν κριθεί κατάλληλο.

## Χειρισμός εξαιρέσεων σε χειριστές συμβάντων

Κατά τη δημιουργία ενός προγράμματος χειρισμού συμβάντων για συμβάντα ελέγχου, είναι καλή πρακτική να χειρίζεστε σφάλματα μέσα στην ίδια την υπορουτίνα. Για παράδειγμα, ας υποθέσουμε ότι ο χειριστής συμβάντων παρακάτω καλείται όταν πατήσετε στο πλήκτρο.

        Sub OnButtonClicked(ByRef oEvent As Object)
        On Local Error GoTo Catch
            Dim oControl As Object
            oControl = CreateScriptService("DialogEvent", oEvent)
            ' Επεξεργασία του συμβάντος
            Exit Sub
        Catch:
            MsgBox SF_Exception.Description
            SF_Exception.Clear
        End Sub

Καλέστε το SF_Exception.Clear εάν δεν θέλετε να διαδοθεί το σφάλμα μετά το τέλος της εκτέλεσης του διαλόγου.

Στην Python χρησιμοποιήστε εγγενή μπλοκ try/except για χειρισμό εξαιρέσεων όπως φαίνεται παρακάτω:

        def on_button_clicked(event=None):
            try:
                oControl = CreateScriptService("DialogEvent", event)
                # Επεξεργασία του συμβάντος
            except Exception as e:
                # Το αντικείμενο "bas" παρακάτω είναι μια παρουσία της υπηρεσίας Basic
                bas.MsgBox(str(e))

## Τύποι ελέγχου

Η υπηρεσία DialogControl είναι διαθέσιμη για αυτούς τους τύπους ελέγχου:

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

Ο τύπος ελέγχου TabPageContainer δεν έχει οριστεί στον Επεξεργαστή Διαλόγων.

## Ιδιότητες

Όνομα | Μόνο για ανάγνωση | Τύπος | Εφαρμόζεται σε | Περιγραφή
--- | --- | --- | --- | ---
Border | Ναι | String | Button, … | Η ιδιότητα Border αναφέρεται στο περιβάλλον του στοιχείου ελέγχου: "3D", "FLAT", ή "NONE".
Cancel | Όχι | Boolean | Button | Καθορίζει εάν ένα πλήκτρο εντολής έχει ή όχι τη συμπεριφορά ενός πλήκτρου Ακύρωσης.
Caption | Όχι | String | Button, CheckBox, FixedLine, FixedText, GroupBox, Hyperlink, RadioButton | Καθορίζει το κείμενο που σχετίζεται με το στοιχείο ελέγχου.
ControlType | Ναι | String | Όλα | Ένας από τους τύπους που αναφέρονται παραπάνω.
CurrentNode | Όχι | Αντικείμενο UNO | TreeControl | Ο προς το παρόν ανώτατος κόμβος που έχει επιλεγεί στο στοιχείο ελέγχου δέντρου. Ανατρέξτε στην τεκμηρίωση XmutableTreeNode της .διασύνδεση προγραμματισμού εφαρμογών (API) για λεπτομερείς πληροφορίες.
Default | Όχι | Boolean | Button | Καθορίζει εάν ένα πλήκτρο εντολής είναι το προεπιλεγμένο πλήκτρο (OK).
Enabled | Όχι | Boolean | Όλα | Καθορίζει εάν το στοιχείο ελέγχου είναι προσβάσιμο με τον δρομέα.
Format | Όχι | String | DateField, TimeField, FormattedField (μόνο για ανάγνωση) | Καθορίζει τη μορφή που χρησιμοποιείται για την εμφάνιση ημερομηνιών και ωρών. Πρέπει να είναι μία από αυτές τις συμβολοσειρές: Για ημερομηνίες: "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". Για χρόνους: "24h short", "24h long", "12h short", "12h long".
ListCount | Ναι | Long | ComboBox, ListBox, TableControl | Καθορίζει τον αριθμό των σειρών σε ένα ListBox, σε ένα ComboBox ή ένα TableControl.
ListIndex | Όχι | Long | ComboBox, ListBox, TableControl | Καθορίζει ποιο στοιχείο επιλέγεται σε ένα ListBox (πλαίσιο καταλόγου), ComboBox (σύνθετο πλαίσιο), ή TableControl (στοιχείο ελέγχου πίνακα).
Locked | Όχι | Boolean | ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, TextField, TimeField | Καθορίζει εάν το στοιχείο ελέγχου είναι μόνο για ανάγνωση.
MultiSelect | Όχι | Boolean | ListBox | Καθορίζει εάν ένας χρήστης μπορεί να κάνει πολλές επιλογές σε ένα πλαίσιο καταλόγου.
Name | Ναι | String | Όλα | Το όνομα του στοιχείου ελέγχου.
Page | Όχι | Integer | Όλα | Ένα παράθυρο διαλόγου μπορεί να έχει πολλές σελίδες που μπορεί να διασχίσει ο χρήστης βήμα προς βήμα. Η ιδιότητα Page (Σελίδα) του αντικειμένου διαλόγου ορίζει ποια σελίδα του διαλόγου είναι ενεργή. Η ιδιότητα Page (Σελίδα) ενός στοιχείου ελέγχου ορίζει τη σελίδα του διαλόγου στην οποία είναι ορατό το στοιχείο ελέγχου.
Parent | Ναι | Υπηρεσία Dialog | Όλα | Η γονική παρουσία αντικειμένου κλάσης SFDialogs.Dialog.
Picture | Όχι | String | Button, ImageControl | Καθορίζει το όνομα αρχείου που περιέχειμια ψηφιογραφία (bitmap) ή άλλο τύπο γραφικού που θα εμφανίζεται στο καθορισμένο στοιχείο ελέγχου. Το όνομα αρχείου πρέπει να συμμορφώνεται με το γνώρισμα FileNaming της υπηρεσίας ScriptForge.FileSystem.
RootNode | Ναι | Αντικείμενο UNO | TreeControl | Ένα αντικείμενο που αντιπροσωπεύει τον χαμηλότερο ριζικό κόμβο (συνήθως υπάρχει μόνο ένας τέτοιος κόμβος ρίζας). Ανατρέξτε στην τεκμηρίωση XmutableTreeNode διασύνδεσης προγραμματισμού εφαρμογών (API) για αναλυτικές πληροφορίες.
RowSource | Όχι | Array of strings | ComboBox, ListBox | Καθορίζει τα δεδομένα που περιέχονται σε ένα σύνθετο πλαίσιο ή ένα πλαίσιο καταλόγου.
TabIndex | Ναι | Numeric | All | Η ιδιότητα TabIndex καθορίζει τη θέση ενός στοιχείου ελέγχου στη σειρά των καρτελών στο παράθυρο διαλόγου.
Text | Ναι | String | ComboBox, FileControl, FormattedField, PatternField, TextField | Παρέχει πρόσβαση στο κείμενο που εμφανίζεται από το στοιχείο ελέγχου.
TipText | Όχι | String | Όλα | Καθορίζει το κείμενο που εμφανίζεται ως συμβουλή όταν κρατάτε τον δείκτη του ποντικιού πάνω από το στοιχείο ελέγχου.
TripleState | Όχι | Boolean | CheckBox | Καθορίζει εάν το στοιχείο ελέγχου πλαισίου ελέγχου μπορεί να εμφανίζεται αμυδρό (γκρίζο) ή όχι.
URL | Όχι | String | Hyperlink | Η διεύθυνση URL που θα ανοίξει όταν πατήσετε στο στοιχείο ελέγχου.
Value | Όχι | Variant |  | Ανατρέξτε στην Ιδιότητα τιμής
Visible | Όχι | Boolean | Όλα | Καθορίζει εάν το στοιχείο ελέγχου είναι κρυφό ή ορατό.
XControlModel | Ναι | Αντικείμενο UNO | Όλα | Το αντικείμενο UNO που αντιπροσωπεύει το μοντέλο ελέγχου. Ανατρέξτε στην τεκμηρίωση XControlModel και στο UnoControlDialogModel διασύνδεσης προγραμματισμού εφαρμογών (API) για λεπτομερείς πληροφορίες.
XControlView | Ναι | Αντικείμενο UNO | Όλα | Το αντικείμενο UNO που αντιπροσωπεύει την προβολή ελέγχου. Ανατρέξτε στο XControl και στο UnoControlDialog στην τεκμηρίωση της διασύνδεσης προγραμματισμού εφαρμογών (API) για λεπτομερείς πληροφορίες.
XTreeDataModel | Ναι | Αντικείμενο UNO | TreeControl | Το αντικείμενο UNO που αντιπροσωπεύει το μοντέλο δεδομένων ελέγχου δέντρου. Ανατρέξτε στο XMutableTreeDataModel στην τεκμηρίωση διασύνδεσης προγραμματισμού εφαρμογών (API) για αναλυτικές πληροφορίες.
XGridColumnModel | Ναι | αντικείμενο UNO | TableControl | Το αντικείμενο UNO που αντιπροσωπεύει το πρότυπο δεδομένων ελέγχου πίνακα. Ανατρέξτε στο XGridColumnModel στην τεκμηρίωση του Application Programming Interface (API) για λεπτομερείς πληροφορίες.
XGridDataModel | Ναι | Αντικείμενο UNO | TableControl | The UNO object representing the grid control data model. Refer to XGridDataModel in Application Programming Interface (API) documentation for detailed information.

## Η ιδιότητα Value

Τύπος ελέγχου | Τύπος | Περιγραφή
--- | --- | ---
Button | Boolean | Μόνο για πλήκτρα εναλλαγής
CheckBox | Τιμή Μπουλ ή ακέραιος | 0, False: μη επιλεγμένο 1, True: επιλεγμένο 2: γκριζαρισμένο, άγνωστο
ComboBox | String | Η επιλεγμένη τιμή. Η ιδιότητα ListIndex είναι μια εναλλακτική επιλογή.
CurrencyField | Αριθμητικό |
DateField | Date |
FileControl | String | Ένα όνομα αρχείου μορφοποιημένο σύμφωνα με την ιδιότητα FileNaming της υπηρεσίας ScriptForge.FileSystem
FormattedField | Συμβολοσειρά ή αριθμητικό |
ListBox | Συμβολοσειρά ή πίνακας συμβολοσειρών | Οι επιλεγμένες σειρές ως βαθμωτές ή ως πίνακας ανάλογα με το γνώρισμα MultiSelect
NumericField | Αριθμητικό |
PatternField | String |
ProgressBar | Αριθμητικό | Πρέπει να είναι εντός των προκαθορισμένων ορίων
RadioButton | Boolean | Κάθε πλήκτρο έχει το δικό του όνομα. Συνδέονται μεταξύ τους εάν οι θέσεις τους στο TAB είναι συνεχόμενες. Εάν ένα ραδιοπλήκτρο έχει οριστεί σε True, τα άλλα σχετικά πλήκτρα ορίζονται αυτόματα σε False
ScrollBar | Αριθμητικό | Πρέπει να είναι εντός των προκαθορισμένων ορίων
TabPageContainer | Numeric | Ένα παράθυρο διαλόγου μπορεί να έχει αρκετές αριθμημένες καρτέλες που μπορούν να αναγνωριστούν ή να τροποποιηθούν από την ιδιότητά τους Value.
TableControl | Array | Μονοδιάστατος πίνακας με τα δεδομένα της τρέχουσας επιλεγμένης σειράς.
TextField | String | Το κείμενο που εμφανίζεται στο πεδίο
TimeField | Date |

Δεν υπάρχει ιδιότητα Value για τα στοιχεία ελέγχου διαλόγου GroupBox, Hyperlink, ImageControl και TreeControl .

## Ιδιότητες συμβάντος

Οι ιδιότητες συμβάντος On… είναι συμβολοσειρές URI που αναφέρονται σε ένα σενάριο που ενεργοποιείται για ένα συμβάν. Διαβάστε τις προδιαγραφές του στην προδιαγραφή URI πλαισίου scripting.

Όνομα (σύνδεσμος API συμβάντος) | Η περιγραφή όπως επισημαίνεται στο IDE Basic
--- | ---
OnActionPerformed | Εκτέλεση ενέργειας
OnAdjustmentValueChanged | Κατά την προσαρμογή
OnFocusGained | Κατά τη λήψη της εστίασης
OnFocusLost | Κατά τη απώλεια της εστίασης
OnItemStateChanged | Η κατάσταση του στοιχείου τροποποιήθηκε
OnKeyPressed | Με το πλήκτρο πατημένο
OnKeyReleased | Με το πλήκτρο απελευθερωμένο
OnMouseDragged | Το ποντίκι μετακινήθηκε κατά το πάτημα του πλήκτρου
OnMouseEntered | Το ποντίκι εντός
OnMouseExited | Το ποντίκι εκτός
OnMouseMoved
OnMousePressed | Με πατημένο το πλήκτρο του ποντικιού
OnMouseReleased | Με απελευθερωμένο το πλήκτρο του ποντικιού
OnNodeExpanded | (Όχι στο IDE Basic) όταν πατηθεί το πλήκτρο επέκτασης σε έναν κόμβο σε ένα στοιχείο ελέγχου δέντρου
OnNodeSelected | (Όχι στο IDE Basic) όταν επιλέγεται ένας κόμβος σε ένα στοιχείο ελέγχου δέντρου
OnTabSelected | (Όχι στο Basic IDE) όταν είναι επιλεγμένη μια καρτέλα σε ένα στοιχείο ελέγχου TabPage
OnTextChanged | Το κείμενο τροποποιήθηκε

Συμβουλή: Όλες οι ιδιότητες On… μπορούν να οριστούν μέσω προγραμματισμού.
Το Πώς να εμφανίσετε δεδομένα σε ένα στοιχείο ελέγχου δέντρου στο Wiki του LibreOffice επιδεικνύει κάτι τέτοιο.

Η εκχώρηση συμβάντων μέσω του IDE της Basic και η εκχώρηση συμβάντων μέσω μακροεντολών είναι αμοιβαία αποκλειόμενες.

## Μέθοδοι

Κατάλογος μεθόδων στην υπηρεσία DialogControl
AddSubNode AddSubTree CreateRoot | FindNode Resize SetFocus | SetTableData WriteLine

## AddSubNode

Δημιουργήστε και επιστρέψτε έναν νέο κόμβο του στοιχείου ελέγχου δέντρου ως αντικειμένου UNO υποδεέστερο σε έναν γονικό κόμβο. Ανατρέξτε στο XMutableTreeNode στην τεκμηρίωση διασύνδεσης προγραμματισμού εφαρμογών (API) για λεπτομερείς πληροφορίες.

Αυτή η μέθοδος μπορεί να κληθεί πριν από την εμφάνιση του πλαισίου διαλόγου για τη δημιουργία του αρχικού δέντρου. Μπορεί επίσης να κληθεί από ένα συμβάν διαλόγου ή ελέγχου - χρησιμοποιώντας το συμβάν OnNodeExpanded - για δυναμική συμπλήρωση του δέντρου.

### Σύνταξη:

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

### Παράμετροι:

parentnode (γονικός κόμβος): Ένα αντικείμενο UNO κόμβου, τύπου com.sun.star.awt.tree.XMutableTreeNode.

displayvalue (τιμή εμφάνισης): Το κείμενο που εμφανίζεται στο πλαίσιο ελέγχου δέντρου.

datavalue (τιμή δεδομένων): Οποιαδήποτε τιμή που σχετίζεται με τον νέο κόμβο. Η datavalue μπορεί να είναι μια συμβολοσειρά, ένας αριθμός ή μια ημερομηνία. Παραλείψτε το όρισμα όταν δεν ισχύει.

### Παράδειγμα:

Τα παραδείγματα στα LibreOffice Basic και Python λαμβάνουν το παράθυρο διαλόγου myDialog του τρέχοντος εγγράφου από τη βιβλιοθήκη Standard.

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

##### Σε Python

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

## AddSubTree

Επιστρέφει True όταν ένα υποδέντρο, δευτερεύον σε έναν γονικό κόμβο, μπορούσε να εισαχθεί με επιτυχία σε ένα στοιχείο ελέγχου δέντρου. Εάν ο γονικός κόμβος είχε ήδη θυγατρικούς κόμβους πριν από την κλήση αυτής της μεθόδου, οι θυγατρικοί κόμβοι διαγράφονται.

Αυτή η μέθοδος μπορεί να κληθεί πριν από την εμφάνιση του πλαισίου διαλόγου για τη δημιουργία του αρχικού δέντρου. Μπορεί επίσης να κληθεί από ένα συμβάν διαλόγου ή ελέγχου - χρησιμοποιώντας το συμβάν OnNodeExpanded - για δυναμική συμπλήρωση του δέντρου.

### Σύνταξη:

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

### Παράμετροι:

parentnode (γονικός κόμβος): Ένα αντικείμενο UNO κόμβου, τύπου com.sun.star.awt.tree.XMutableTreeNode.

flattree: ένας πίνακας δύο διαστάσεων ταξινομημένος στις στήλες που περιέχουν τις τιμές εμφάνισης. Ένας τέτοιος πίνακας μπορεί να εκδοθεί με τη μέθοδο GetRows που εφαρμόζεται στην υπηρεσία SFDatabases.Database. Όταν ένα στοιχείο πίνακα που περιέχει το προς εμφάνιση κείμενο είναι Empty ή Null, δεν δημιουργείται νέος υποκόμβος και το υπόλοιπο της σειράς παραλείπεται.

          Flat tree (Επίπεδο δέντρο) >>>> Το υποδέντρο που προκύπτει
          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 (με τιμή δεδομένων): Όταν χρησιμοποιείται η προεπιλεγμένη τιμή False, κάθε στήλη του flattree περιέχει το κείμενο που θα εμφανίζεται στο δέντρο ελέγχου. Όταν είναι True, τα κείμενα που θα εμφανίζονται (displayvalue) βρίσκονται στις στήλες 0, 2, 4, ... ενώ οι τιμές δεδομένων (datavalue ) βρίσκονται στις στήλες 1, 3, 5, ...

### Παράδειγμα:

##### Σε 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)

##### Σε 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

Επιστρέφει έναν νέο ριζικό κόμβο του στοιχείου ελέγχου δέντρου, ως αντικείμενο UNO κόμβου τύπου com.sun.star.awt.tree.XMutableTreeNode. Η νέα ρίζα δέντρου εισάγεται κάτω από προϋπάρχοντες ριζικούς κόμβους. Ανατρέξτε στο XMutableTreeNode στην τεκμηρίωση διασύνδεσης προγραμματισμού εφαρμογών (API) για λεπτομερείς πληροφορίες.

Αυτή η μέθοδος μπορεί να κληθεί πριν από την εμφάνιση του πλαισίου διαλόγου για τη δημιουργία του αρχικού δέντρου. Μπορεί επίσης να κληθεί από ένα συμβάν διαλόγου ή ελέγχου για να ολοκληρωθεί δυναμικά το δέντρο.

### Σύνταξη:

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

### Παράμετροι:

displayvalue (τιμή εμφάνισης): Το κείμενο που εμφανίζεται στο πλαίσιο ελέγχου δέντρου.

datavalue (τιμή δεδομένων): Οποιαδήποτε τιμή που σχετίζεται με τον νέο κόμβο. Η datavalue μπορεί να είναι μια συμβολοσειρά, ένας αριθμός ή μια ημερομηνία. Παραλείψτε το όρισμα όταν δεν ισχύει.

### Παράδειγμα:

##### Σε Basic

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

##### Σε Python

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

## FindNode

Διασχίζει το δέντρο και βρίσκει αναδρομικά, ξεκινώντας από τη ρίζα, έναν κόμβο που πληροί ορισμένα κριτήρια. Είτε - 1 η αντιστοίχιση είναι αρκετή - η τιμή εμφάνισης αντιστοιχεί στο μοτίβο displayvalue (τιμή εμφάνισης) ή η τιμή δεδομένων της είναι ίση με datavalue. Οι συγκρίσεις μπορεί να είναι ή όχι με διάκριση πεζών-κεφαλαίων. Η πρώτη εμφάνιση αντιστοίχισης επιστρέφεται ως αντικείμενο UNO κόμβου τύπου com.sun.star.awt.tree.XMutableTreeNode. Ανατρέξτε στο XMutableTreeNode στην τεκμηρίωση διασύνδεσης προγραμματισμού εφαρμογών (API) για λεπτομερείς πληροφορίες.

Όταν δεν βρεθεί, η μέθοδος επιστρέφει Nothing, για δοκιμή με την ενσωματωμένη συνάρτηση IsNull().

Αυτή η μέθοδος μπορεί να κληθεί πριν από την εμφάνιση του πλαισίου διαλόγου για τη δημιουργία του αρχικού δέντρου. Μπορεί επίσης να κληθεί από ένα συμβάν διαλόγου ή ελέγχου.

### Σύνταξη:

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

### Παράμετροι:

Πρέπει να καθοριστεί ένα όρισμα από την displayvalue (τιμή εμφάνισης) ή την datavalue (τιμή δεδομένων). Εάν υπάρχουν και τα δύο, αρκεί μία αντιστοίχιση για την επιλογή του κόμβου.

displayvalue (τιμή εμφάνισης): Το μοτίβο που πρέπει να αντιστοιχιστεί. Ανατρέξτε στη μέθοδο SF_String.IsLike() για τον κατάλογο των πιθανών χαρακτήρων υποκατάστασης. Όταν ισούται με τη συμβολοσειρά μηδενικού μήκους (προεπιλογή), αυτή η τιμή εμφάνισης δεν αναζητείται.

datavalue (τιμή δεδομένων): Οποιαδήποτε τιμή που σχετίζεται με τον νέο κόμβο. Η datavalue μπορεί να είναι μια συμβολοσειρά, ένας αριθμός ή μια ημερομηνία. Παραλείψτε το όρισμα όταν δεν ισχύει.

casesensitive (διάκριση πεζών-κεφαλαίων): Η προεπιλεγμένη τιμή είναι False

### Παράδειγμα:

##### Σε Basic

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

##### Σε Python

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

## Resize

Μετακινήστε την επάνω αριστερή γωνία ενός στοιχείου ελέγχου διαλόγου σε νέες συντεταγμένες ή/και τροποποιήστε τις διαστάσεις του. Επιστρέψτε το True εάν η αλλαγή μεγέθους ήταν επιτυχής.

### Σύνταξη:

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

### Παράμετροι:

Όλες οι αποστάσεις εκφράζονται σε Μονάδες Map AppFont και μετρώνται από την επάνω αριστερή γωνία του γονικού διαλόγου. Χωρίς ορίσματα, η μέθοδος αλλάζει το μέγεθος του στοιχείου ελέγχου στο "προτιμώμενο μέγεθος", ένα μέγεθος που προσαρμόζεται ανάλογα με το πραγματικό του περιεχόμενο. Τα ορίσματα που λείπουν παραμένουν αμετάβλητα.

Left: Η οριζόντια απόσταση από την επάνω αριστερή γωνία

Top: Η κατακόρυφη απόσταση από την επάνω αριστερή γωνία

Width: το οριζόντιο πλάτος του ορθογωνίου που περιέχει το στοιχείο ελέγχου

Height: το κατακόρυφο ύψος του ορθογωνίου που περιέχει το στοιχείο ελέγχου

### Παράδειγμα:

##### Σε Basic

          Dim oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.Resize(100, 200, Height:=6000) ' Το πλάτος είναι αμετάβλητο

##### Σε Python

          dlg = CreateScriptService('Dialog', None, None, 'myDialog')
          ctrl = dlg.Controls('thisControl')
          ctrl.Resize(300, 200, 1500) # Το ύψος παραμένει αμετάβλητο

## SetFocus

Ρύθμιση της εστίασης στον έλεγχο. Επιστρέφει True εάν η εστίαση ήταν επιτυχής.

Αυτή η μέθοδος καλείται συχνά από ένα συμβάν διαλόγου ή ελέγχου.

### Σύνταξη:

svc.SetFocus(): bool

### Παράδειγμα:

##### Σε Basic

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

##### Σε Python

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

## SetTableData

Γεμίζει ένα TableControl με τα δεδομένα. Όλα τα προϋπάρχοντα δεδομένα διαγράφονται πριν από την εισαγωγή των νέων δεδομένων που διαβιβάστηκαν ως όρισμα.

Όταν το TableControl προστεθεί στο παράθυρο διαλόγου, μπορείτε να χρησιμοποιήσετε το IDE της Basic για να καθορίσετε εάν οι κεφαλίδες στηλών και σειρών θα εμφανίζονται στον πίνακα. Εάν το TableControl έχει κεφαλίδες στηλών ή/και σειρών, η πρώτη στήλη και/ή σειρά στον παρεχόμενο πίνακα δεδομένων χρησιμοποιούνται ως ετικέτες για τις κεφαλίδες του πίνακα.

Αυτή η μέθοδος επιστρέφει True όταν είναι επιτυχής.

### Σύνταξη:

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

### Παράμετροι:

dataarray: Τα δεδομένα που θα εισαχθούν στον πίνακα αντιπροσωπεύονται ως πίνακας πινάκων στη Basic ή πλειάδα πλειάδων στην Python. Τα δεδομένα πρέπει να περιλαμβάνουν κεφαλίδες στηλών και σειρών, εάν πρόκειται να εμφανιστούν από το TableControl.

widths: Πίνακας που περιέχει τα σχετικά πλάτη κάθε στήλης. Με άλλα λόγια, widths = (1, 2) σημαίνει ότι η δεύτερη στήλη έχει διπλάσιο πλάτος από την πρώτη. Εάν ο αριθμός των τιμών στον πίνακα είναι μικρότερος από τον αριθμό των στηλών του πίνακα, τότε η τελευταία τιμή του πίνακα χρησιμοποιείται για τον καθορισμό του πλάτους των υπολοίπων στηλών.

alignments (στοιχίσεις): Ορίζει τη στοίχιση σε κάθε στήλη ως μια συμβολοσειρά στην οποία κάθε χαρακτήρας μπορεί να είναι "L" (Αριστερά), "C" (Κέντρο), "R" (Δεξιά) ή " " (κενός χώρος, προεπιλογή, που σημαίνει αριστερά για συμβολοσειρές και δεξιά για αριθμητικές τιμές). Εάν το μήκος της συμβολοσειράς είναι μικρότερο από τον αριθμό των στηλών του πίνακα, τότε ο τελευταίος χαρακτήρας της συμβολοσειράς χρησιμοποιείται για τον καθορισμό της στοίχισης των υπόλοιπων στηλών.

RowHeaderWidth: πλάτος στήλης της κεφαλίδας της σειράς που εκφράζεται σε Μονάδες Map AppFont. Προεπιλογή = 10. Το όρισμα αγνοείται όταν το TableControl δεν έχει κεφαλίδα σειράς.

### Παράδειγμα:

##### Σε Basic

Το παρακάτω παράδειγμα προϋποθέτει ότι το παράθυρο διαλόγου myDialog έχει ένα TableControl (στοιχείο ελέγχου πίνακα) με όνομα Grid1 με ιδιότητες "Show row header (Εμφάνιση κεφαλίδας γραμμής)" και "Show column header (Εμφάνιση κεφαλίδας στήλης)" ορισμένες σε " Ναι".

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

Η ιδιότητα Value (Τιμή) επιστρέφει την επιλεγμένη σειρά στον πίνακα. Εάν δεν έχει επιλεγεί καμία σειρά, επιστρέφεται ένα κενό αντικείμενο Array. Το παρακάτω απόσπασμα κώδικα δείχνει πώς να ελέγξετε εάν έχει επιλεγεί κάποια σειρά στον πίνακα.

         rowValues = oTable.Value
         If UBound(rowValues) < 0 Then
             MsgBox "Δεν έχει επιλεγεί σειρά."
         Else
             MsgBox "Η σειρά " & oTable.ListIndex & " έχει επιλεγεί."
         End If

##### Σε 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

Προσθέστε μια νέα γραμμή στο τέλος ενός πεδίου κειμένου πολλών γραμμών. Ένας χαρακτήρας νέας γραμμής θα εισαχθεί όταν χρειάζεται. Η μέθοδος επιστρέφει True όταν είναι επιτυχής.

Παρουσιάζεται σφάλμα εάν το πραγματικό στοιχείο ελέγχου δεν είναι του τύπου TextField ή δεν είναι πολύγραμμο.

### Σύνταξη:

svc.WriteLine(opt line: str): bool

### Παράμετροι:

Line (Γραμμή): Η συμβολοσειρά προς εισαγωγή. Η προεπιλογή είναι μια κενή γραμμή.

### Παράδειγμα:

##### Σε Basic

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

##### Σε Python

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

Όλες οι ρουτίνες ή αναγνωριστικά του ScriptForge στη Basic που έχουν το πρόθεμα χαρακτήρα υπογράμμισης "_" δεσμεύονται για εσωτερική χρήση. Δεν προορίζονται να χρησιμοποιηθούν σε μακροεντολές Basic ή σενάρια Python.

Σχετικά θέματα

SFDialogs. Υπηρεσία Διάλογος

Υπηρεσία ScriptForge.String

Υπηρεσία ScriptForge.UI

Παρακαλούμε, υποστηρίξτε μας!