StarOffice 8 Programmierhandbuch für BASIC
只搜寻这本书
以 PDF 格式下载本书 (1551 KB)

Kapitel 12 Formulare

Der Aufbau von StarOffice-Formularen entspricht in vielerlei Hinsicht den im vorangehenden Kapitel besprochenen Dialogen. Es existieren jedoch einige wesentliche Unterschiede:

  • Dialoge werden in Form eines einzelnen Dialogfensters angezeigt, das über dem Dokument eingeblendet wird und bis zum Abschluss der Bearbeitung des Dialogs keine anderen Aktionen als die Bearbeitung des Dialogs zulässt. Formulare hingegen werden wie Zeichnungselemente direkt im Dokument angezeigt.

  • Für die Erstellung von Dialogen steht ein eigener Dialog-Editor zur Verfügung, der sich in der StarOffice Basic-Entwicklungsumgebung befindet. Formulare werden direkt im Dokument mit der Formularfunktionen-Symbolleiste erstellt.

  • Während die Dialog-Funktionen in allen StarOffice-Dokumenten zur Verfügung stehen, ist der volle Umfang der Formularfunktionen ausschließlich in Text- und Tabellendokumenten verfügbar.

  • Die Steuerelemente eines Formulars lassen sich mit einer externen Datenbanktabelle verknüpfen. In Dialogen steht diese Funktionalität nicht zur Verfügung.

  • Auch die Steuerelemente von Dialogen und Formularen unterscheiden sich in einigen Punkten.

Anwender, die ihre Formulare mit eigenen Methoden zur Ereignisbehandlung ausstatten möchten, seien auf das Kapitel 11, Dialoge, verwiesen. Die dort erläuterten Mechanismen sind mit denen für Formulare identisch.

Arbeiten mit Formularen

StarOffice-Formulare können Textfelder, Listenfelder, Optionsfelder und eine Reihe anderer Steuerelemente, die direkt in ein Text- oder Tabellendokument eingefügt werden, enthalten. Für die Bearbeitung von Formularen wird die Formularfunktionen-Symbolleiste verwendet.

Ein StarOffice-Formular kann sich in einem von zwei Modi befinden: im Entwurfsmodus und im Anzeigemodus. Im Entwurfsmodus ist es möglich, die Position von Steuerelementen zu verändern und ihre Eigenschaften über ein Eigenschaftenfenster zu bearbeiten.

Der Wechsel zwischen den Modi erfolgt ebenfalls über die Formularfunktionen-Symbolleiste.

Ermitteln von Formular-Objekten

StarOffice positioniert die Steuerelemente eines Formulars auf der Zeichnungsobjektebene. Das eigentliche Formular-Objekt ist über die Forms-Auflistung der Zeichnungsebene erreichbar. In Textdokumenten erfolgt der Zugriff auf die Objekte wie folgt:

Dim Doc As Object
Dim DrawPage As Object
Dim Form As Object
   
Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

Die Methode GetByIndex gibt dabei das Formular mit der Indexnummer 0 zurück.

Bei Tabellendokumenten bedarf es des Zwischenschritts über die Sheets-Auflistung, da sich die Zeichnungsebenen nicht direkt im Dokument, sondern in den einzelnen Tabellen befinden:

Dim Doc As Object
Dim Sheet As Object
Dim DrawPage As Object
Dim Form As Object
   
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

Wie der Name der Methode GetByIndex bereits nahe legt, kann ein Dokument mehrere Formulare enthalten. Dies ist beispielsweise sinnvoll, wenn die Inhalte verschiedener Datenbanken innerhalb eines Dokuments angezeigt werden sollen oder wenn eine 1:n-Beziehung einer Datenbank innerhalb eines Formulars angezeigt werden soll. Zu diesem Zweck besteht auch die Möglichkeit, Unterformulare zu erstellen.

Die drei Aspekte eines Formular-Steuerelements

Ein Steuerelement eines Formulars verfügt über drei Aspekte:

  • Zunächst einmal gibt es das Model (Modell) des Steuerelements. Es stellt das Kernobjekt für den StarOffice Basic-Programmierer bei der Arbeit mit Formular-Steuerelementen dar.

  • Das Gegenstück dazu bildet die View (Ansicht) des Steuerelements, die die Anzeigeinformationen verwaltet.

  • Da Formular-Steuerelemente innerhalb der Dokumente wie ein spezielles Zeichnungselement verwaltet werden, ist außerdem ein Shape-Objekt vorhanden, das die zeichnungselementspezifischen Eigenschaften des Steuerelements widerspiegelt (insbesondere seine Position und Größe).

Zugriff auf das Modell (Model) von Formular-Steuerelementen

Die Modelle (Models) der Steuerelemente eines Formulars sind über die Methode GetByName des Formularobjekts verfügbar:

Dim Doc As Object
Dim Form As Object
Dim Ctl As Object
   
Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Form.getByName("MyListBox")

Das Beispiel ermittelt das Modell (Model) des Steuerelements MyListBox, das sich im ersten Formular des aktuell geöffneten Textdokuments befindet.

Ist unklar, in welchem Formular sich ein Steuerelement befindet, so besteht die Möglichkeit, alle Formulare nach dem gewünschten Steuerelement zu durchsuchen:

Dim Doc As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer
   
Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms

For I = 0 To Forms.Count - 1
   Form = Forms.GetbyIndex(I)
   If Form.HasByName("MyListBox") Then
      Ctl = Form.GetbyName("MyListBox")
      Exit Function
   End If
Next I

Das Beispiel überprüft mit der Methode HasByName alle Formulare eines Textdokuments daraufhin, ob sie ein Steuerelement-Modell (Model) namens MyListBox enthalten. Wird ein entsprechendes Modell (Model) gefunden, wird eine Referenz darauf in der Variable Ctl gespeichert und die Suche wird abgebrochen.

Zugriff auf die Ansicht (View) von Formular-Steuerelementen

Für den Zugriff auf die Ansicht (View) eines Formular-Steuerelements wird zunächst das verknüpfte Modell (Model) benötigt. Mit dessen Hilfe und über den Controller des Dokuments lässt sich anschließend die Ansicht (View) des Steuerelements ermitteln.

Dim Doc As Object
Dim DocCrl As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim CtlView As Object
Dim I as Integer
   
Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentControler()
Forms = Doc.Drawpage.Forms

For I = 0 To Forms.Count - 1
   Form = Forms.GetbyIndex(I)
   If Form.HasByName("MyListBox") Then
      Ctl = Form.GetbyName("MyListBox")
      CtlView = DocCrl.GetControl(Ctl)
      Exit Function
   End If
Next I

Der aufgeführte Beispielcode orientiert sich stark an dem vorhergehenden Beispielcode zur Ermittlung eines Steuerelement-Modells (Model). Er verwendet neben dem Dokumentobjekt Doc jedoch auch das Dokument-Controler-Objekt DocCrl, das auf das aktuelle Dokumentenfenster verweist. Mit Hilfe dieses Controler-Objekts und dem Modell (Model) des Steuerelements ermittelt es schließlich über die Methode GetControl die Ansicht (View; Variable CtlView) des Formular-Steuerelements.

Zugriff auf das Shape-Objekt von Formular-Steuerelementen

Auch für den Zugriff auf die Shape-Objekte eines Steuerelements führt der Weg über die betreffende Zeichnungsebene des Dokuments. Zur Ermittlung eines speziellen Steuerelements müssen sämtliche Zeichnungselemente der Zeichnungsebene durchsucht werden.

Dim Doc As Object
Dim Shape as Object
Dim I as integer
   
Doc = StarDesktop.CurrentComponent

For i = 0 to Doc.DrawPage.Count - 1
   Shape = Doc.DrawPage(i)

   If HasUnoInterfaces(Shape, _
      "com.sun.star.drawing.XControlShape") Then
      If Shape.Control.Name = "MyListBox" Then
            Exit Function
      End If
   End If
Next

Das Beispiel überprüft alle Zeichnungselemente, ob sie die für Formular-Steuerelemente erforderliche Schnittstelle com.sun.star.drawing.XControlShape unterstützen. Ist dies der Fall, so überprüft die Eigenschaft Control.Name dann, ob der Name des Steuerelements MyListBox lautet. Ist dies der Fall (Wahr), beendet die Funktion die Suche.

Ermitteln der Größe und Position von Steuerelementen

Wie bereits erwähnt, lässt sich die Größe und Position von Steuerelementen über das verknüpfte Shape-Objekt ermitteln. Hierzu stellt das Steuerelement-Shape wie alle anderen Shape-Objekte die Eigenschaften Size und Position zur Verfügung:

  • Size (struct): Größe des Steuerelements (Datenstruktur com.sun.star.awt.Size).

  • Position (struct): Position des Steuerelements (Datenstruktur com.sun.star.awt.Point).

Das folgende Beispiel zeigt, wie Position und Größe eines Steuerelements über das verknüpfte Shape-Objekt gesetzt werden können:

Dim Shape As Object

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Shape.Size = Size
Shape.Position = Point

Damit der Code funktionsfähig ist, muss das Shape-Objekt des Steuerelements bereits bekannt sein. Ist dies nicht der Fall, muss es über den weiter oben stehenden Code ermittelt werden.

Formular-Steuerelemente im Detail

Die in Formularen verfügbaren Steuerelemente ähneln denen von Dialogen. Die Auswahl reicht von einfachen Textfeldern über Listen- und Kombinationsfelder bis hin zu verschiedenen Schaltflächen.

Im Folgenden finden Sie eine Aufstellung der wichtigsten Eigenschaften für Formular-Steuerelemente. Sämtliche Eigenschaften sind Bestandteil der jeweiligen Model-Objekte.

Über die Standardsteuerelemente hinaus steht für Formulare ein Tabellensteuerelement zur Verfügung, das die vollständige Einbindung von Datenbanktabellen gestattet. Es wird im Abschnitt Datenbank-Formulare in Kapitel 12, Formulare, behandelt.

Schaltflächen

Das Model-Objekt einer Formular-Schaltfläche hält folgende Eigenschaften bereit:

  • BackgroundColor (Long): Hintergrundfarbe.

  • DefaultButton (Boolean): die Schaltfläche dient als Standardwert. Sie reagiert in diesem Fall auch dann auf die Eingabetaste, wenn sie keinen Fokus besitzt.

  • Enabled (Boolean): das Steuerelement kann aktiviert werden.

  • Tabstop (Boolean): auf das Steuerelement kann mit der Tabulatortaste zugegriffen werden.

  • TabIndex (Long): Position des Steuerelements in der Aktivierungsreihenfolge.

  • FontName (String): Name der Schriftart.

  • FontHeight (Single): Höhe der Zeichen in Punkt (p).

  • Tag (String): Zeichenfolge mit zusätzlichen Informationen, die in der Schaltfläche für programmgesteuerten Zugriff gespeichert werden können.

  • TargetURL (String): Ziel-URL für Schaltflächen des Typs "URL".

  • TargetFrame (String): Name des Fensters (oder Rahmens (Frames)) in dem TargetURL geöffnet werden soll, wenn die Schaltfläche aktiviert wird (für Schaltflächen des Typs URL).

  • Label (String): Beschriftung der Schaltfläche.

  • TextColor (Long): Textfarbe des Steuerelements.

  • HelpText (String): Hilfetext, der automatisch angezeigt wird, wenn sich der Mauszeiger über dem Steuerelement befindet.

  • HelpURL (String): URL der Online-Hilfe für das entsprechende Steuerelement.

  • ButtonType (Enum): mit der Schaltfläche verknüpfte Aktion (Standardwert gemäß com.sun.star.form.FormButtonType).

Über die Eigenschaft ButtonType können Sie eine Aktion definieren, die beim Klicken auf die Schaltfläche automatisch ausgeführt wird. Die verknüpfte Konstantengruppe com.sun.star.form.FormButtonType stellt folgende Werte bereit:

  • PUSH: Standardschaltfläche.

  • SUBMIT: Ende des Formulareintrags (insbesondere relevant für HTML-Formulare).

  • RESET: setzt alle Werte innerhalb des Formulars auf ihre Ausgangswerte zurück.

  • URL: Aufruf des in TargetURL definierten URLs (wird innerhalb des Fensters geöffnet, das über TargetFrame festgelegt ist).

Die in Dialogen vorhandenen Schaltflächentypen OK und Abbrechen werden in Formularen nicht unterstützt.

Optionsschaltflächen

Folgende Eigenschaften einer Optionsschaltfläche sind über deren Model-Objekt verfügbar:

  • Enabled (Boolean): das Steuerelement kann aktiviert werden.

  • Tabstop (Boolean): auf das Steuerelement kann mit der Tabulatortaste zugegriffen werden.

  • TabIndex (Long): Position des Steuerelements in der Aktivierungsreihenfolge.

  • FontName (String): Name der Schriftart.

  • FontHeight (Single): Höhe der Zeichen in Punkt (p).

  • Tag (String): Zeichenfolge mit zusätzlichen Informationen, die in der Schaltfläche für programmgesteuerten Zugriff gespeichert werden können.

  • Label (String): Beschriftung der Schaltfläche.

  • Printable (Boolean): das Steuerelement kann gedruckt werden.

  • State (Short): wenn 1, ist die Option aktiviert, andernfalls ist sie deaktiviert.

  • RefValue (String): Zeichenfolge zum Speichern zusätzlicher Informationen (z. B. zur Verwaltung von Datensatz-IDs).

  • TextColor (Long): Textfarbe des Steuerelements.

  • HelpText (String): Hilfetext, der automatisch angezeigt wird, wenn sich der Mauszeiger über dem Steuerelement befindet.

  • HelpURL (String): URL der Online-Hilfe für das entsprechende Steuerelement.

Der Mechanismus zum Gruppieren von Optionsschaltflächen unterscheidet zwischen den Steuerelementen für Dialoge und Formulare. Während in Dialogen aufeinander folgende Steuerelemente automatisch zu einer Gruppe zusammengefasst werden, erfolgt die Gruppierung in Formularen aufgrund des Namens. Hierzu müssen alle Optionsschaltflächen einer Gruppe denselben Name enthalten. StarOffice fasst die so gruppierten Steuerelemente in einem Array zusammen, so dass die einzelnen Schaltflächen immer noch von einem StarOffice-Programm aus erreichbar bleiben.

Das folgende Beispiel zeigt, wie sich das Modell (Model) einer Steuerelementegruppe ermitteln lässt.

Dim Doc As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer
   
Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms

For I = 0 To Forms.Count - 1
   Form = Forms.GetbyIndex(I)
   If Form.HasByName("MyOptions") Then
      Ctl = Form. GetGroupbyName("MyOptions")
      Exit Function
   End If
Next I

Der Code entspricht dem weiter oben aufgeführten Beispiel zur Ermittlung eines einfachen Steuerelement-Modells (Model). In einer Schleife durchsucht er alle Formulare des aktuell geöffneten Textdokuments und prüft über die Methode HasByName, ob das entsprechende Formular ein Element mit dem gesuchten Namen MyOptions enthält. Ist dies der Fall, erfolgt der Zugriff auf den Model-Array über die Methode GetGroupByName (anstelle der Methode GetByName zur Ermittlung einfacher Modelle (Models)).

Kontrollkästchen

Das Model-Objekt eines Formular-Kontrollkästchens stellt folgende Eigenschaften zur Verfügung:

  • Enabled (Boolean): das Steuerelement kann aktiviert werden.

  • Tabstop (Boolean): auf das Steuerelement kann mit der Tabulatortaste zugegriffen werden.

  • TabIndex (Long): Position des Steuerelements in der Aktivierungsreihenfolge.

  • FontName (String): Name der Schriftart.

  • FontHeight (Single): Höhe der Zeichen in Punkt (p).

  • Tag (String): Zeichenfolge mit zusätzlichen Informationen, die in der Schaltfläche für programmgesteuerten Zugriff gespeichert werden können.

  • Label (String): Beschriftung der Schaltfläche.

  • Printable (Boolean): das Steuerelement kann gedruckt werden.

  • State (Short): wenn 1, ist die Option aktiviert, andernfalls ist sie deaktiviert.

  • RefValue (String): Zeichenfolge zum Speichern zusätzlicher Informationen (z. B. zur Verwaltung von Datensatz-IDs).

  • TextColor (Long): Textfarbe des Steuerelements.

  • HelpText (String): Hilfetext, der automatisch angezeigt wird, wenn sich der Mauszeiger über dem Steuerelement befindet.

  • HelpURL (String): URL der Online-Hilfe für das entsprechende Steuerelement.

Textfelder

Die Model-Objekte von Formular-Textfeldern verfügen über folgende Eigenschaften:

  • Align (Short): Ausrichtung des Texts (0: linksbündig, 1: zentriert, 2: rechtsbündig).

  • BackgroundColor (long): Hintergrundfarbe des Steuerelements.

  • Border (Short): Art des Rahmens (0: kein Rahmen, 1: 3D-Rahmen, 2: einfacher Rahmen).

  • EchoChar (String): Echo-Zeichen für Passwortfelder.

  • FontName (String): Name der Schriftart.

  • FontHeight (Single): Höhe der Zeichen in Punkt (p).

  • HardLineBreaks (Boolean): automatische Zeilenumbrüche werden dauerhaft in den Text des Steuerelements eingefügt.

  • HScroll (Boolean): der Text verfügt über eine horizontale Bildlaufleiste (Scrollbar).

  • MaxTextLen (Short): maximale Länge von Text; bei Festlegung von 0 ist die Länge unbegrenzt.

  • MultiLine (Boolean): ermöglicht mehrzeilige Einträge.

  • Printable (Boolean): das Steuerelement kann gedruckt werden.

  • ReadOnly (Boolean): der Inhalt des Steuerelements ist schreibgeschützt (nur Lesen).

  • Enabled (Boolean): das Steuerelement kann aktiviert werden.

  • Tabstop (Boolean): auf das Steuerelement kann mit der Tabulatortaste zugegriffen werden.

  • TabIndex (Long): Position des Steuerelements in der Aktivierungsreihenfolge.

  • FontName (String): Name der Schriftart.

  • FontHeight (Single): Höhe der Zeichen in Punkt (p).

  • Text (String): Text des Steuerelements.

  • TextColor (Long): Textfarbe des Steuerelements.

  • VScroll (Boolean): der Text verfügt über eine vertikale Bildlaufleiste (Scrollbar).

  • HelpText (String): Hilfetext, der automatisch angezeigt wird, wenn sich der Mauszeiger über dem Steuerelement befindet.

  • HelpURL (String): URL der Online-Hilfe für das entsprechende Steuerelement.

Listenfelder

Das Model-Objekt der Formular-Listenfelder stellt folgende Eigenschaften bereit:

  • BackgroundColor (long): Hintergrundfarbe des Steuerelements.

  • Border (Short): Art des Rahmens (0: kein Rahmen, 1: 3D-Rahmen, 2: einfacher Rahmen).

  • FontDescriptor (struct): Struktur mit Details der zu verwendenden Schriftart (gemäß Struktur com.sun.star.awt.FontDescriptor).

  • LineCount (Short): Anzahl der Zeilen des Steuerelements.

  • MultiSelection (Boolean): lässt die Mehrfachauswahl von Einträgen zu.

  • SelectedItems (Array of Strings): Liste der markierten Einträge.

  • StringItemList (Array of Strings): Liste aller Einträge.

  • ValueItemList (Array of Variant): Liste mit zusätzlichen Informationen für jeden Eintrag (z. B. zur Verwaltung von Datensatz-IDs).

  • Printable (Boolean): das Steuerelement kann gedruckt werden.

  • ReadOnly (Boolean): der Inhalt des Steuerelements ist schreibgeschützt (nur Lesen).

  • Enabled (Boolean): das Steuerelement kann aktiviert werden.

  • Tabstop (Boolean): auf das Steuerelement kann mit der Tabulatortaste zugegriffen werden.

  • TabIndex (Long): Position des Steuerelements in der Aktivierungsreihenfolge.

  • FontName (String): Name der Schriftart.

  • FontHeight (Single): Höhe der Zeichen in Punkt (p).

  • Tag (String): Zeichenfolge mit zusätzlichen Informationen, die in der Schaltfläche für programmgesteuerten Zugriff gespeichert werden können.

  • TextColor (Long): Textfarbe des Steuerelements.

  • HelpText (String): Hilfetext, der automatisch angezeigt wird, wenn sich der Mauszeiger über dem Steuerelement befindet.

  • HelpURL (String): URL der Online-Hilfe für das entsprechende Steuerelement.


Hinweis –

Formular-Listenfelder bieten mit der Eigenschaft ValueItemList ein Gegenstück zu der VBA-Eigenschaft ItemData, über die Sie Zusatzinformationen für einzelne Listeneinträge verwalten können.


Zusätzlich stehen über das View-Objekt des Listenfelds folgende Methoden zur Verfügung:

  • addItem (Item, Pos): fügt die in Item angegebene Zeichenfolge an Position Pos in der Liste ein.

  • addItems (ItemArray, Pos): fügt die in dem Datenfeld ItemArray der Zeichenfolge aufgeführten Einträge an Position Pos in der Liste ein.

  • removeItems (Pos, Count): entfernt Count Einträge ab Position Pos.

  • selectItem (Item, SelectMode): aktiviert oder deaktiviert die Markierung für das in der Zeichenfolge Item angegebene Element, in Abhängigkeit von der Variable SelectMode.

  • makeVisible (Pos): führt einen Bildlauf durch das Listenfeld aus, damit der mit Pos angegebene Eintrag angezeigt wird.

Datenbank-Formulare

StarOffice-Formulare können direkt mit einer Datenbank verknüpft werden. Die so entstandenen Formulare bieten sämtliche Funktionen eines vollwertigen Datenbank-Frontends, ohne dass dafür eigene Programmierarbeit notwendig wäre.

Der Anwender hat die Möglichkeit, die ausgewählten Tabellen beziehungsweise Abfragen zu durchblättern und zu durchsuchen sowie Datensätze zu ändern und neue Datensätze einzufügen. StarOffice stellt automatisch sicher, dass die jeweils relevanten Daten aus der Datenbank abgerufen und eventuelle Änderungen zurückgeschrieben werden.

Ein Datenbank-Formular entspricht im Wesentlichen einem StarOffice-Standardformular. Über die Standardeigenschaften hinaus müssen im Formular folgende datenbankspezifischen Eigenschaften festgelegt werden:

  • DataSourceName (String): Name der Datenquelle (siehe Kapitel 10, Datenbankzugriff; die Datenquelle muss in StarOffice global erstellt sein).

  • Command (String): Name der Tabelle, Abfrage oder des SQL-Select-Befehls, mit der/dem eine Verknüpfung hergestellt werden soll.

  • CommandType (Const): gibt an, ob es sich bei Command um eine Tabelle, eine Abfrage oder einen SQL-Befehl handelt (Wert aus Aufzählung com.sun.star.sdb.CommandType).

Die Aufzählung com.sun.star.sdb.CommandType umfasst folgende Werte:

  • TABLE: Tabelle.

  • QUERY: Abfrage.

  • COMMAND: SQL-Befehl.

Die Zuordnung der Datenbankfelder zu den einzelnen Steuerelementen erfolgt über diese Eigenschaft:

  • DataField (String): Name des verknüpften Datenbankfelds.

Tabellen

Für die Arbeit mit Datenbanken steht noch ein weiteres Steuerelement zur Verfügung: das Tabellen-Steuerelement. Es stellt den Inhalt einer vollständigen Datenbanktabelle oder -abfrage dar. Im einfachsten Fall erfolgt die Verknüpfung eines Tabellen-Steuerelements mit einer Datenbank über den Formular-Autopiloten, der alle Spalten gemäß den Benutzervorgaben mit den entsprechenden Datenbankfeldern verknüpft. Auf eine vollständige Beschreibung der API wird an dieser Stelle aus Gründen der Komplexität verzichtet.