Usługa SFDocuments.FormControl

Usługa FormControl zapewnia dostęp do formantów należących do formularza, podformularza lub formantów tabeli FormDocument. Każda instancja usługi FormControl odnosi się do pojedynczego formantu w formularzu. Usługa ta umożliwia użytkownikom:

Aby skorzystać z usługi FormControl w konkretnym formularzu, podformularzu lub formancie tabeli, wszystkie formanty muszą mieć unikalne nazwy.

warning

Przyciski opcji o tej samej nazwie grupy muszą mieć także unikalne nazwy formantu.


Głównym celem usługi FormControl jest ustawianie i pobieranie właściwości i wartości wyświetlanych przez formantu w formularzu.

Wszystkie formanty mają właściwość Value. Jednakże jego zawartość będzie się różnić w zależności od rodzaju formantu. Aby uzyskać więcej informacji, przeczytaj poniżej Właściwość Value.

Możliwe jest także formatowanie formantu poprzez właściwości XControlModel i XControlView.

tip

Usługa SFDocuments.FormControl jest ściśle powiązana z usługą SFDocuments.Form.


Wywoływanie usługi

Przed użyciem usługi FormControl należy załadować lub zaimportować bibliotekę ScriptForge:

note

• Podstawowe makra wymagają załadowania biblioteki ScriptForge przy użyciu następującej instrukcji:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Skrypty Pythona wymagają importu z modułu scriptforge:
from scriptforge import CreateScriptService


Usługa FormControl jest wywoływana z istniejącej instancji usługi Form poprzez jej metodę Controls.


      Dim oDoc as Object, myForm As Object, myControl As Object
      Set oDoc = CreateScriptService("SFDocuments.Document", ThisDataBaseDocument)
      Set myForm = oDoc.Forms("formDocumentName", "formName") ' SFDocuments.Form
      Set myControl = myForm.Controls("myTextBox") ' SFDocuments.FormControl
      myControl.Value = "Current time = " & Now()
   
W języku Python

      

from scriptforge import CreateScriptService

from time import localtime, strftime bas = CreateScriptService('ScriptForge.Basic')

doc = CreateScriptService('SFDocuments.Document', bas.ThisDatabaseDocument)

form = doc.Forms('formDocumentName', 'formName') # SFDocuments.Form

control = form.Controls('myTextBox') # SFDocuments.FormControl

control.Value = 'Bieżący czas = ' + strftime("%a, %d %b %Y %H:%M:%S", localtime())
tip

Aby dowiedzieć się więcej o otwieraniu FormDocument i uzyskiwaniu dostępu do jego formularzy, zapoznaj się ze stroną pomocy usługi SFDocuments.Form.


Ewentualnie instancję FormControl można pobrać za pośrednictwem usługi SFDocuments.FormEvent, która zwraca instancję klasy SFDocuments.FormControl, która wyzwoliła zdarzenie.


      Sub OnEvent(ByRef poEvent As Object)
          Dim oControl As Object
          Set oControl = CreateScriptService("SFDocuments.FormEvent", poEvent)
          ' oControl reprezentuje teraz instancję klasy FormControl, która wyzwoliła bieżące zdarzenie
          ' ...
      End Sub
   
W języku Python

      def onEvent(event: uno):
          control = CreateScriptService('SfDocuments.FormEvent', event)
   

Należy pamiętać, że w poprzednich przykładach przedrostek "SFDocuments." mógł zostać pominięty.

note

Usługa FormEvent służy wyłącznie do tworzenia instancji usług SFDocuments.Form i SFDocuments.FormControl w przypadku wystąpienia formularza lub zdarzenia formantu.


Typy formantów

Usługa FormControl jest dostępna dla następujących typów formantu:

Właściwości

Nazwa

Tylko do odczytu

Typ

Stosuje się do

Opis

Action

Nie

String

Button

Określa akcję wyzwalaną po kliknięciu przycisku. Akceptowane wartości to: none, submitForm, resetForm, refreshForm, moveToFirst, moveToLast, moveToNext, moveToPrev, saveRecord, moveToNew, deleteRecord, undoRecord.

Caption

Nie

String

Button, CheckBox, FixedText, GroupBox, RadioButton

Określa tekst wyświetlany przez formant.

ControlSource

Tak

String

CheckBox, ComboBox, CurrencyField, DateField, FormattedField, ImageControl, ListBox, NumericField, PatternField, RadioButton, TextField, TimeField

Określa pole zestawu wierszy zamapowane na bieżący formant.

ControlType

Tak

String

Wszystkie

Jeden z typów formantu wymienionych powyżej.

Default

Nie

Boolean

Button

Określa, czy przycisk polecenia jest domyślnym przyciskiem OK.

DefaultValue

Nie

Variant

CheckBox, ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, RadioButton, SpinButton, TextField, TimeField

Określa wartość domyślną używaną do inicjowania formantu w nowym rekordzie.

Enabled

Nie

Boolean

Wszystkie (oprócz HiddenControl)

Określa, czy formant jest dostępny za pomocą kursora.

Format

Nie

String

DateField, TimeField, FormattedField (read-only)

Określa format używany do wyświetlania dat i godzin. Musi to być jeden z następujących ciągów:

W przypadku dat: "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".

W przypadku godzin: "24h short", "24h long", "12h short", "12h long".

ListCount

Tak

Long

ComboBox, ListBox

Zwraca liczbę wierszy w ListBox lub ComboBox.

ListIndex

Nie

Long

ComboBox, ListBox

Określa, który element jest wybrany w ListBox lub ComboBox. W przypadku wielokrotnego wyboru zwracany jest indeks pierwszego elementu lub ustawiany jest tylko jeden element.

ListSource

Nie

Variant

ComboBox, ListBox

Określa dane zawarte w ComboBox lub ListBox jako tablicę wartości ciągów liczoną od zera.

W połączeniu z ListSourceType może także zawierać nazwę tabeli, kwerendę lub pełną instrukcję SQL.

ListSourceType

Nie

Integer

ComboBox, ListBox

Określa typ danych zawartych w polu kombi lub polu listy.

Musi to być jedna ze stałych com.sun.star.form.ListSourceType.*.

Locked

Nie

Boolean

ComboBox, CurrencyField, DateField, FileControl, FileControl, FormattedField, ImageControl, ListBox, NumericField, PatternField, TextField, TimeField

Określa, czy formant jest tylko do odczytu.

MultiSelect

Nie

Boolean

ListBox

Określa, czy użytkownik może wybrać wiele elementów w polu listy.

Name

Tak

String

Wszystkie

Nazwa formantu.

Parent

Tak

Object

Wszystkie

W zależności od typu nadrzędnego, formularza, podformularza lub formantu tabeli, zwraca nadrzędny SFDocuments.Form lub SFDocuments.FormControl instancja obiektu klasy.

Picture

Nie

String

Button, ImageButton, ImageControl

Określa nazwę pliku zawierającego mapę bitową lub inny typ grafiki, która ma być wyświetlana w formancie. Nazwa pliku musi być zgodna z atrybutem FileNaming usługi ScriptForge.FileSystem.

Required

Nie

Boolean

CheckBox, ComboBox, CurrencyField, DateField, ListBox, NumericField, PatternField, RadioButton, SpinButton, TextField, TimeField

Formant uznaje się za wymagany, gdy dane bazowe nie mogą zawierać wartości null.

Text

Tak

String

ComboBox, DateField, FileControl, FormattedField, PatternField, TextField, TimeField

Daje dostęp do tekstu wyświetlanego przez formant.

TipText

Nie

String

Wszystkie (oprócz HiddenControl)

Określa tekst wyświetlany jako podpowiedź po najechaniu wskaźnikiem myszy na formant.

TripleState

Nie

Boolean

CheckBox

Określa, czy formant pola wyboru może być przyciemniony (szary), czy nie.

Value

Nie

Variant

Ta właściwość zależy od typu formantu. Więcej informacji znajdziesz w artykule Właściwość Value.

Visible

Nie

Boolean

Wszystkie (oprócz HiddenControl)

Określa, czy formant jest ukryty czy widoczny.

XControlModel

Tak

Obiekt
UNO

Wszystkie

Obiekt UNO reprezentujący model formantu. Zobacz XControlModel oraz UnoControlModel w dokumentacji API, aby uzyskać więcej informacji.

XControlView

Tak

Obiekt
UNO

Wszystkie

Obiekt UNO reprezentujący widok formantu. Zobacz XControl i UnoControl w dokumentacji API, aby uzyskać więcej informacji.


Właściwość Value

Typ formantu

Typ

Opis

Button

Boolean

Dotyczy tylko przycisków przełączania.

CheckBox

Wartość logiczna lub liczba całkowita

0, False: nie zaznaczono
1, True: zaznaczono
2: wyszarzone, nie wiem (dotyczy, jeśli TripleState ma wartość True)

ComboBox

String

Wybrana wartość jako ciąg. Właściwość ListIndex jest alternatywną opcją dostępu do indeksu wybranej wartości.

CurrencyField

Liczbowy

DateField

Date

FileControl

String

Nazwa pliku sformatowana zgodnie z właściwością FileNaming usługi ScriptForge.FileSystem

FormattedField

Ciąg lub liczba

HiddenControl

String

ListBox

Ciąg lub tablica ciągów

Zaznaczone wiersze jako pojedynczy ciąg lub tablica ciągów. Można ustawić tylko jedną wartość. Jeśli pole jest połączone z bazą danych, ta właściwość pobiera lub ustawia podstawowe dane. W przeciwnym razie pobiera lub ustawia wyświetlane dane.

NumericField

Liczbowy

PatternField

String

RadioButton

Boolean

Każdy przycisk ma swoją nazwę. Wiele formantów RadioButton jest ze sobą połączonych, jeśli mają tę samą nazwę grupy. Jeśli RadioButton jest ustawiony na True, inne powiązane przyciski są automatycznie ustawiane na False

ScrollBar

Liczbowy

Musi mieścić się w określonych granicach

SpinButton

Liczbowy

Musi mieścić się w określonych granicach

TextField

String

Tekst pojawiający się w polu

TimeField

Date


Właściwości zdarzenia

Poniższe właściwości zwracają lub ustawiają ciągi URI, które definiują skrypt wyzwalany przez zdarzenie.

Nazwa

Tylko do odczytu

Opis zgodny z etykietą w środowisku IDE Basic

OnActionPerformed

Nie

Wykonaj działanie

OnAdjustmentValueChanged

Nie

W trakcie dopasowywania

OnApproveAction

Nie

Zatwierdź działanie

OnApproveReset

Nie

Przed zresetowaniem

OnApproveUpdate

Nie

Przed aktualizacją

OnChanged

Nie

Zmieniono

OnErrorOccurred

Nie

Wystąpił błąd

OnFocusGained

Nie

Przy uzyskaniu fokusu

OnFocusLost

Nie

Przy utracie fokusu

OnItemStateChanged

Nie

Zmieniony stan elementu

OnKeyPressed

Nie

Klawisz naciśnięty

OnKeyReleased

Nie

Klawisz zwolniony

OnMouseDragged

Nie

Przesunięcie myszy podczas wciśnięcia klawisza

OnMouseEntered

Nie

Mysz wewnątrz

OnMouseExited

Nie

Mysz na zewnątrz

OnMouseMoved

Nie

Przesunięcie myszy

OnMousePressed

Nie

Naciśnięto przycisk myszy

OnMouseReleased

Nie

Zwolniono przycisk myszy

OnResetted

Nie

Po resetowaniu

OnTextChanged

Nie

Tekst zmodyfikowano

OnUpdated

Nie

Po aktualizacji


tip

Aby dowiedzieć się więcej o ciągach URI, zapoznaj się z Specyfikacją URI platformy skryptowej.


Lista metod w usłudze FormControl

Controls

SetFocus


Controls

Ta metoda ma zastosowanie tylko do formantów typu TableControl. Zwracana wartość zależy od podanych argumentów.

Jeśli opcjonalny argument controlname jest nieobecny, zwracana jest tablica liczona od zera zawierająca nazwy wszystkich formantów.

Z drugiej strony, jeśli podano controlname, metoda zwraca instancję klasy FormControl odpowiadającą określonemu formantowi.

Składnia:

svc.Controls(): str[0..*]

svc.Controls(controlname: str): svc

Parametry:

controlname: prawidłowa nazwa formantu jako ciąg znaków, w którym rozróżniana jest wielkość liter. W przypadku braku, lista nazw formantów jest zwracana jako tablica liczona od zera.

Przykład:


      Dim myGrid As Object, myList As Variant, myControl As Object
      Set myGrid = myForm.Controls("myTableControl") ' SFDocuments.FormControl
      ' Zwraca tablicę z nazwami wszystkich formantów w "myTableControl"
      myList = myGrid.Controls()
      

' Zwraca instancję klasy FormControl odpowiadającą "myCheckBox"

Set myControl = myGrid.Controls("myCheckBox")

Korzystanie z języka Python:


      grid = form.Controls('myTableControl')  # SFDocuments.FormControl
      control_names = form.Controls()
      control = grid.Controls('myCheckBox')  # SFDocuments.FormControl
   

SetFocus

Ustawia fokus na formant. Zwróć True, jeśli ustawienie fokusu się powiodło.

Ta metoda jest często wywoływana z formularza lub zdarzenia formantu.

Składnia:

svc.SetFocus(): bool

Przykład:


      Dim oDoc As Object, oForm As Object, oControl As Object
      Set oDoc = CreateScriptService("SFDocuments.Document", ThisComponent)
      Set oForm = oDoc.Forms(0)
      Set oControl = oForm.Controls("thisControl") ' SFDocuments.FormControl
      oControl.SetFocus()
   
W języku Python

     bas = CreateScriptService('ScriptForge.Basic')
     doc = CreateScriptService('SFDocuments.Document', bas.ThisComponent)
     form = doc.Forms(0)
     control = form.Controls('thisControl')  # SFDocuments.FormControl
     control.SetFocus()
   

Dodatkowe przykłady

Poniżej dwa przykłady ilustrujące zastosowanie usługi FormControl.

Pierwszy przykład odczytuje bieżącą wartość w ComboBox zawierającym nazwy miast i zapisuje ją do formantu FixTest w formularzu:


     Dim oDoc as Object, myForm as Object, myControl as Object
     Set oDoc = CreateScriptService("SFDocuments.Document", ThisDataBaseDocument)
     myForm = oDoc.Forms("formDocumentName", "formName")
     Dim lbCity : lbCity = myForm.Controls("labelCity")
     Dim cbCity : cbCity = myForm.Controls("comboboxCity")
     lbCity.Caption = "Selected City: " & cbCity.Value
   
W języku Python

     bas = CreateScriptService('ScriptForge.Basic')  # metody jak w Basic
     doc = CreateScriptService('SFDocuments.Document', bas.ThisDatabaseDocument)
     form = doc.Forms('formDocumentName', 'formName')
     lbl_city = form.Controls('labelCity')
     combo_city = form.Controls('comboboxCity')
     lbl_city.Caption = "Wybrane miasto: " + combo_city.Value
   

Poniższego fragmentu kodu można użyć do przetwarzania formantów RadioButton, które mają tę samą nazwę grupy. W tym przykładzie załóżmy, że istnieją trzy przyciski opcji o nazwach optA, optB i optC i chcemy wyświetlić podpis wybranego formantu.


     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("SFDocuments.Document", ThisDataBaseDocument)
     myForm = oDoc.Forms("formDocumentName", "formName")
     Dim optNames As Object : optNames = Array("optA", "optB", "optC")
     Dim optControl as Object, opt as Variant
     For Each opt In optNames
         optControl = myForm.Controls(opt)
         If optControl.Value = True Then
             MsgBox "Wybrana opcja: " & optControl.Caption
             Exit For
         End If
     Next opt
   
W języku Python

     bas = CreateScriptService('ScriptForge.Basic')  # metody jak w Basic
     doc = CreateScriptService('SFDocuments.Document', bas.ThisDatabaseDocument)
     form = doc.Forms('formDocumentName', 'formName')
     radio_buttons = ['optA', 'optB', 'optC']
     for name in radio_buttons:
        control = form.controls(name)
        if control.Value == True:
           bas.MsgBox('Wybrana opcja: ' + control.Caption)
           break
   
warning

Wszystkie podstawowe procedury lub identyfikatory ScriptForge poprzedzone znakiem podkreślenia „_” są zarezerwowane do użytku wewnętrznego. Nie należy ich używać w makrach Basic ani skryptach Pythona.


Prosimy o wsparcie!