包含在查找更多文档专项支持资源 | 以 PDF 格式下载本书 (1551 KB)
Kapitel 12 FormulareDer Aufbau von StarOffice-Formularen entspricht in vielerlei Hinsicht den im vorangehenden Kapitel besprochenen Dialogen. Es existieren jedoch einige wesentliche Unterschiede:
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 FormularenStarOffice-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-ObjektenStarOffice 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-SteuerelementsEin Steuerelement eines Formulars verfügt über drei Aspekte:
Zugriff auf das Modell (Model) von Formular-SteuerelementenDie 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-SteuerelementenFü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-SteuerelementenAuch 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 SteuerelementenWie 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:
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 DetailDie 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ächenDas Model-Objekt einer Formular-Schaltfläche hält folgende Eigenschaften bereit:
Ü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:
Die in Dialogen vorhandenen Schaltflächentypen OK und Abbrechen werden in Formularen nicht unterstützt. OptionsschaltflächenFolgende Eigenschaften einer Optionsschaltfläche sind über deren Model-Objekt verfügbar:
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ästchenDas Model-Objekt eines Formular-Kontrollkästchens stellt folgende Eigenschaften zur Verfügung:
TextfelderDie Model-Objekte von Formular-Textfeldern verfügen über folgende Eigenschaften:
ListenfelderDas Model-Objekt der Formular-Listenfelder stellt folgende Eigenschaften bereit:
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:
Datenbank-FormulareStarOffice-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:
Die Aufzählung com.sun.star.sdb.CommandType umfasst folgende Werte:
Die Zuordnung der Datenbankfelder zu den einzelnen Steuerelementen erfolgt über diese Eigenschaft:
TabellenFü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. |