Contenues dansTrouver plus de documentationRessources d'assistance comprises | Télécharger cet ouvrage au format PDF (1551 Ko)
Kapitel 11 DialogeSie können StarOffice-Dokumente durch benutzerdefinierte Dialogfenster und Formulare erweitern. Diese lassen sich mit StarOffice Basic-Makros verknüpfen, wodurch die Einsatzmöglichkeiten von StarOffice Basic erheblich erweitert werden. In Dialogen können beispielsweise Datenbankinformationen angezeigt oder Anwender schrittweise durch den Erstellungsprozess eines neuen Dokuments in Form eines AutoPiloten geführt werden. Arbeiten mit DialogenStarOffice Basic-Dialoge bestehen aus einem Dialogfenster, das Textfelder, Listenfelder, Optionsfelder und eine Reihe anderer Steuerelemente enthalten kann. Erstellen von DialogenDialoge können mit Hilfe des StarOffice-Dialog-Editors auf dieselbe Weise erstellt und strukturiert werden, wie mit StarOffice Draw: ![]() Prinzipiell ziehen Sie die gewünschten Steuerelemente aus der Design-Palette (rechts) in den Dialogbereich, wo deren Position und Größe definiert werden können. Das Beispiel zeigt einen Dialog, der ein Beschriftungs- und ein Listenfeld enthält. ![]() Mit folgendem Code können Sie einen Dialog öffnen: Dim Dlg As Object
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)
Dlg.Execute()
Dlg.dispose()
CreateUnoDialog erzeugt dabei ein Objekt namens Dlg, das auf den verknüpften Dialog verweist. Vor dem Erzeugen des Dialogs muss sichergestellt sein, dass die verwendete Bibliothek (im Beispiel Standard) geladen ist. Ist dies nicht der Fall, führt die LoadLibrary-Methode diese Aufgabe durch. Ist das Dialog-Objekt Dlg initialisiert, so kann der Dialog mit der Execute-Methode angezeigt werden. Dialoge wie dieser werden als "modal" bezeichnet, da sie keine weitere Programmaktion zulassen, solange ihr Fenster nicht geschlossen wurde. Während der gesamten Öffnungsphase dieses Dialogs verbleibt das Programm im Aufruf Execute. Die dispose-Methode am Ende des Codes gibt die von dem Dialog verwendeten Ressourcen wieder frei, nachdem das Programm beendet wurde. Schließen von DialogenSchließen mit "OK" oder "Abbrechen"Enthält ein Dialog eine der Schaltflächen OK oder Abbrechen, wird der Dialog durch Klicken auf eine dieser Schaltflächen automatisch geschlossen. Weitere Informationen zum Arbeiten mit diesen Schaltflächen erhalten Sie in diesem Kapitel unter "Dialog-Steuerelemente im Detail". Wird ein Dialog unter Verwendung einer Schaltfläche OK geschlossen, gibt die Execute-Methode einen Rückgabewert von 1 zurück, ansonsten den Wert 0. Dim Dlg As Object
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.MyDialog)
Select Case Dlg.Execute()
Case 1
MsgBox "OK geklickt"
Case 0
MsgBox "Abbrechen geklickt"
End Select
Schließen mit der Schaltfläche "Schließen" in der TitelleisteEin Dialog kann gegebenenfalls auch durch Klicken auf die Schaltfläche "Schließen" in der Titelleiste des Dialogfensters geschlossen werden. In diesem Fall gibt die Execute-Methode des Dialogs wie beim Klicken auf die Schaltfläche "Abbrechen" den Wert 0 zurück. Schließen mit einem expliziten ProgrammaufrufEin geöffnetes Dialogfenster kann auch mit der endExecute-Methode geschlossen werden: Dlg.endExecute() Zugriff auf einzelne SteuerelementeEin Dialog beliebig viele Steuerelemente enthalten. Sie können auf diese Elemente mit der getControl-Methode zugreifen, die den Namen des Steuerelements zurückgibt. Dim Ctl As Object
Ctl = Dlg.getControl("MyButton")
Ctl.Label = "New Label"
Dieser Code ermittelt das Objekt für das Steuerelement MyButton und initialisiert dann die Objektvariable Ctl mit einer Referenz auf dieses Element. Anschließend setzt der Code die Label-Eigenschaft des Steuerelementes auf den Wert New Label. Hinweis – Bei den Namen von Steuerelementen unterscheidet StarOffice Basic die Groß- und Kleinschreibung. Arbeiten mit dem Modell (Model) von Dialogen und SteuerelementenDie Unterscheidung zwischen sichtbaren Programmelementen (Ansicht (View)) und den dahinter liegenden Daten bzw. Dokumenten (Modell (Modell)) findet sich an zahlreichen Stellen in der StarOffice API. Zusätzlich zu den Methoden und Eigenschaften von Steuerelementen verfügen sowohl Dialog- als auch Steuerelementobjekte über ein untergeordnetes Model-Objekt. Dieses Objekt gestattet Ihnen den direkten Zugriff auf den Inhalt eines Dialog- oder Steuerelements. In Dialogen verläuft die Grenze zwischen Daten und Darstellung jedoch nicht immer so klar wie in den anderen API-Bereichen von StarOffice. Elemente der API stehen sowohl in der Ansicht (View) als auch im Modell (Model) zur Verfügung. Der programmgesteuerte Zugriff auf das Modell von Dialog- und Steuerelementobjekten erfolgt über die Eigenschaft Model. Dim cmdNext As Object
cmdNext = Dlg.getControl("cmdNext")
cmdNext.Model.Enabled = False
Das Beispiel deaktiviert die Schaltfläche cmdNtext innerhalb des Dialogs Dlg unter Zuhilfenahme des Model-Objekts von cmdNtext. EigenschaftenName und TitelJedes Steuerelement verfügt über seinen eigenen Namen, der mit folgender Model-Eigenschaft abgefragt werden kann:
Der Titel, der in der Titelleiste angezeigt wird, kann mit folgender Model-Eigenschaft festgelegt werden:
Position und GrößeGröße und Position eines Steuerelements können mit folgenden Eigenschaften des Model-Objekts abgefragt werden:
Damit das Aussehen von Dialogen plattformunabhängig ist, verwendet StarOffice die interne Einheit Map AppFont (ma) zur Festlegung von Position und Größe bei Dialogen. Eine ma-Einheit ist definiert als 1/8 der durchschnittlichen Höhe und 1/4 der Breite eines Zeichens der im Betriebssystem definierten Systemschriftart. Durch die Verwendung von ma-Einheiten stellt StarOffice sicher, dass ein Dialog auf unterschiedlichen Systemen und mit verschiedenen Systemeinstellungen stets gleich angezeigt wird. Sollen Größe oder Position von Steuerelementen zur Laufzeit geändert werden, müssen Sie die Gesamtgröße des Dialogs ermitteln und die Werte für die Steuerelemente an die entsprechenden Teilverhältnisse anpassen. Hinweis – Die Twips-Einheit wird durch Map AppFont (ma) ersetzt, um eine optimierte Plattformunabhängigkeit zu erreichen. Fokus und Tabulator-ReihenfolgeMit der Tabulatortaste können Sie durch die Steuerelemente in einem Dialog navigieren. Folgende Eigenschaften stehen in diesem Zusammenhang im Modell (Model) der Steuerelemente zur Verfügung:
Schließlich bietet das Steuerelement eine getFocus-Methode, die sicherstellt, dass das darunter liegende Steuerelement den Fokus erhält:
Mehrseitige DialogeIn StarOffice kann ein Dialog über mehr als eine Registerkarte verfügen. Die Step-Eigenschaft eines Dialogs definiert die aktuelle Registerkarte des Dialogs, während die Step-Eigenschaft eines Steuerelements die Registerkarte festlegt, auf der das Steuerelement angezeigt werden soll. Hierbei bildet der Step-Wert 0 einen Sonderfall. Wird dieser Wert innerhalb eines Dialogs auf null gesetzt, werden alle Steuerelemente angezeigt, unabhängig von ihrem Step-Wert. Ebenso wird ein Steuerelement, wenn dieser Wert für das Element auf null gesetzt wird, auf allen Registerkarten eines Dialogs angezeigt. ![]() Im vorangegangenen Beispiel können Sie also der Trennlinie sowie den Schaltflächen Abbrechen (Cancel), Zurück (Prev), Weiter (Next) und Fertig stellen (Done) den Step-Wert 0 zuweisen, damit diese Elemente auf allen Seiten angezeigt werden. Die Elemente können auch einer einzelnen Registerkarte zugewiesen werden (z. B. Seite 1). Der folgende Programmcode zeigt, wie der Step-Wert in den Ereignis-Handlern der Schaltflächen Weiter (Next) und Zurück (Prev) erhöht beziehungsweise verringert werden kann, um so den Status der Schaltflächen zu ändern. Sub cmdNext_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = Not cmdPrev.Model.Enabled
cmdNext.Model.Enabled = False
Dlg.Model.Step = Dlg.Model.Step + 1
End Sub
Sub cmdPrev_Initiated
Dim cmdNext As Object
Dim cmdPrev As Object
cmdPrev = Dlg.getControl("cmdPrev")
cmdNext = Dlg.getControl("cmdNext")
cmdPrev.Model.Enabled = False
cmdNext.Model.Enabled = True
Dlg.Model.Step = Dlg.Model.Step - 1
End Sub
Das Beispiel setzt voraus, dass eine globale Variable Dlg vorhanden ist, die auf einen geöffneten Dialog verweist. Die Anzeige des Dialog ändert sich wie folgt: Seite 1: ![]() Seite 2:
EreignisseDialoge und Formulare basieren in StarOffice auf einem ereignisorientierten Programmiermodell, in dem den Steuerelementen Ereignis-Handler zugewiesen werden können. Ein Ereignis-Handler führt bei Eintritt einer bestimmten Aktion eine vordefinierte Prozedur aus, auch wenn es sich bei der Aktion um ein anderes Ereignis handelt. Durch Ereignisbehandlung können sowohl Dokumente oder geöffnete Datenbanken bearbeitet als auch auf andere Steuerelemente zugegriffen werden. StarOffice-Steuerelemente erkennen verschiedene Arten von Ereignissen, die in jeweils unterschiedlichen Situationen ausgelöst werden können. Diese Ereignisarten lassen sich in vier Gruppen unterteilen:
Bei der Arbeit mit Ereignissen müssen Sie sicherstellen, dass der dazugehörige Dialog in der Entwicklungsumgebung von StarOffice erstellt wird und dass er die erforderlichen Steuerelemente bzw. Dokumente enthält (wenn die Ereignisse auf ein Formular Anwendung finden). ![]() Die vorangehende Abbildung zeigt die Entwicklungsumgebung von StarOffice Basic mit einem Dialogfenster, das zwei Listenfelder enthält. Sie können die Daten mit Hilfe der zwischen den Listenfeldern liegenden Schaltflächen von der einen in die andere Liste verschieben. Wenn Sie am Bildschirm das Layout anzeigen möchten, müssen Sie die verknüpften StarOffice Basic-Prozeduren erstellen, damit diese von den Event-Handlern aufgerufen werden können. Auch wenn diese Prozeduren in beliebigen Modulen verwendet werden können, ist es das Beste, ihre Verwendung auf zwei Module zu beschränken. Um die Lesbarkeit des Programmcodes zu verbessern, sollten Sie den Prozeduren "sprechende" Namen geben. Das direkte Anspringen allgemeiner Programm-Prozeduren aus einem Makro heraus führt in der Regel zu unübersichtlichem Programmcode. Sie sollten stattdessen eine weitere Prozedur erstellen, die als Einstiegspunkt für die Ereignisbehandlung dient, selbst wenn nur ein einziger Aufruf der Zielprozedur erfolgt. Hierdurch werden die Pflege und das Debuggen des Programmcodes deutlich erleichtert. Der folgende Beispielcode verschiebt einen Eintrag aus dem linken in das rechte Listenfeld eines Dialogs. Sub cmdSelect_Initiated
Dim objList As Object
lstEntries = Dlg.getControl("lstEntries")
lstSelection = Dlg.getControl("lstSelection")
If lstEntries.SelectedItem > 0 Then
lstSelection.AddItem(lstEntries.SelectedItem, 0)
lstEntries.removeItems(lstEntries.SelectItemPos, 1)
Else
Beep
End If
End Sub
Wenn diese Prozedur in StarOffice Basic erstellt wurde, können Sie sie über das Eigenschaftenfenster des Dialog-Editors einem erforderlichen Ereignis zuweisen. ![]() Im Zuordnungsdialog werden alle StarOffice Basic-Prozeduren aufgeführt. Um einem Ereignis eine Prozedur zuzuweisen, wählen Sie die Prozedur aus und klicken auf Assign (Zuweisen). ParameterDas Eintreten eines bestimmten Ereignisses reicht nicht immer aus, um eine angemessene Reaktion auszulösen. Es können zusätzliche Informationen notwendig sein. So wird zur Verarbeitung eines Mausklicks eventuell die Bildschirmposition benötigt, an der die Maustaste gedrückt wurde. In StarOffice Basic können Sie Objektparameter verwenden, um weitere Informationen über ein Ereignis an eine Prozedur zu übergeben, zum Beispiel: Sub ProcessEvent(Event As Object) End Sub Wie differenziert das Event-Objekt aufgebaut ist und welche Eigenschaften es enthält, hängt von der Art des Ereignisses ab, das den Prozeduraufruf auslöst. In den folgenden Abschnitten werden die Ereignisarten detailliert behandelt. Unabhängig vom Typ des Ereignisses gewähren alle Objekte Zugriff auf das jeweilige Steuerelement und sein Modell (Model). Auf das Steuerelement greifen Sie mit Event.Source zu und auf sein Modell (Model) mit Event.Source.Model Mit diesen Eigenschaften können Sie in einem Event-Handler ein Ereignis auslösen. Maus-EreignisseStarOffice Basic erkennt folgende Mausereignisse:
Der Aufbau des verknüpften Ereignisobjekts wird in der Struktur com.sun.star.awt.MouseEvent definiert, die folgende Informationen bereitstellt:
Die in com.sun.star.awt.MouseButton definierten Konstanten für die Maustasten lauten:
Das folgende Beispiel gibt die Position der Maus sowie die Maustaste, die gedrückt wurde, aus: Sub MouseUp(Event As Object)
Dim Msg As String
Msg = "Keys: "
If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
Msg = Msg & "LEFT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
Msg = Msg & "RIGHT "
End If
If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
Msg = Msg & "MIDDLE "
End If
Msg = Msg & Chr(13) & "Position: "
Msg = Msg & Event.X & "/" & Event.Y
MsgBox Msg
End Sub
Hinweis – Die VBA-Ereignisse Click und Doubleclick stehen in StarOffice Basic nicht zur Verfügung. Verwenden Sie stattdessen anstelle des Click-Ereignisses das StarOffice Basic-Ereignis MouseUp und bilden Sie das Doubleclick-Ereignis durch eine Änderung der Anwendungslogik nach. Tastatur-EreignisseFolgende Tastaturereignisse stehen in StarOffice Basic zur Verfügung:
Beide Ereignisse beziehen sich auf logische Tastendrücke und nicht auf physikalische Aktionen. Wenn der Anwender mehrere Tasten drückt, um nur ein Zeichen auszugeben (z. B. um ein Akzentzeichen hinzuzufügen), erzeugt StarOffice Basic nur ein Ereignis. Ein einzelner Druck auf eine Modifizierer-Taste wie die Umschalt- oder Alt-Taste verursacht kein unabhängiges Ereignis. Informationen über eine gedrückte Taste werden im Event-Objekt bereitgestellt, das StarOffice Basic für die Ereignisbehandlung an die Prozedur übergibt. Es enthält folgende Eigenschaften:
Das folgende Beispiel ermittelt mit Hilfe der Eigenschaft KeyCode, ob die Eingabetaste, die Tabulatortaste oder eine der anderen Steuerungstasten gedrückt wurde. Wurde eine dieser Tasten gedrückt, wird der Name der Taste zurückgegeben, andernfalls das eingegebene Zeichen: Sub KeyPressed(Event As Object)
Dim Msg As String
Select Case Event.KeyCode
Case com.sun.star.awt.Key.RETURN
Msg = "Return pressed"
Case com.sun.star.awt.Key.TAB
Msg = "Tab pressed"
Case com.sun.star.awt.Key.DELETE
Msg = "Delete pressed"
Case com.sun.star.awt.Key.ESCAPE
Msg = "Escape pressed"
Case com.sun.star.awt.Key.DOWN
Msg = "Down pressed"
Case com.sun.star.awt.Key.UP
Msg = "Up pressed"
Case com.sun.star.awt.Key.LEFT
Msg = "Left pressed"
Case com.sun.star.awt.Key.RIGHT
Msg = "Right pressed"
Case Else
Msg = "Character " & Event.KeyChar & " entered"
End Select
MsgBox Msg
End Sub
Informationen zu weiteren Tastatur-Konstanten finden Sie in der API-Referenz unter der Konstantengruppe com.sun.star.awt.Key. Fokus-EreignisseFokus-Ereignisse zeigen an, ob ein Steuerelement den Fokus erhält oder verliert. Mit diesen Ereignissen können Sie beispielsweise bestimmen, ob ein Anwender die Bearbeitung eines Steuerelements abgeschlossen hat, damit Sie nun andere Elemente eines Dialogs aktualisieren können. Folgende Fokus-Ereignisse sind verfügbar:
Die Event-Objekte der Fokus-Ereignisse sind wie folgt aufgebaut:
Steuerelementspezifische EreignisseNeben den vorangehenden Ereignissen, die von allen Steuerelementen unterstützt werden, sind einige steuerelementspezifische Ereignisse vorhanden, die nur für bestimmten Steuerelemente definiert sind. Bei den wichtigsten dieser Ereignisse handelt es sich um:
Beachten Sie bei der Arbeit mit Ereignissen, dass manche Ereignisse, wie z. B. das When initiating-Ereignis, jedes Mal ausgelöst werden können, wenn mit der Maus auf bestimmte Steuerelemente geklickt wird (z. B. auf Optionsfelder). Dabei wird mit keiner Aktion geprüft, ob sich der Status des Steuerelements tatsächlich geändert hat. Um solche "Blindereignisse" zu vermeiden, speichern Sie den alten Wert des Steuerelements in einer globalen Variable und prüfen dann bei der Ausführung eines Ereignisses, ob er sich tatsächlich geändert hat. Die Eigenschaften des Item Status Changed-Ereignisses lauten:
Dialog-Steuerelemente im DetailStarOffice Basic erkennt eine Reihe von Steuerelementen, die in folgende Gruppen unterteilt werden können: Eingabefelder:
Schaltflächen:
Auswahllisten:
Sonstige Steuerelemente:
Die wichtigsten dieser Steuerelemente werden im Folgenden vorgestellt. SchaltflächenEine Schaltfläche führt eine Aktion aus, wenn darauf geklickt wird. Im einfachsten Fall löst eine Schaltfläche nur ein When Initiating-Ereignis aus, wenn der Anwender darauf klickt. Sie können auch eine andere Aktion mit der Schaltfläche verknüpfen, um einen Dialog zu öffnen, indem Sie die PushButtonType-Eigenschaft verwenden. Wenn Sie auf eine Schaltfläche klicken, für die diese Eigenschaft auf den Wert 0 gesetzt ist, wirkt sich dies nicht auf den Dialog aus. Wenn Sie auf eine Schaltfläche klicken, für die diese Eigenschaft auf den Wert 1 gesetzt ist, wird der Dialog geschlossen und die Execute-Methode des Dialogs gibt den Wert 1 zurück (die Dialogsequenz wurde korrekt abgeschlossen). Ist die PushButtonType-Eigenschaft auf den Wert 2 gesetzt, wird der Dialog geschlossen und die Execute-Methode des Dialogs gibt den Wert 0 zurück (Dialog geschlossen). Im Folgenden finden Sie alle Eigenschaften, die im Schaltflächen-Modell (Model) zur Verfügung stehen:
OptionsschaltflächenOptionsschaltflächen werden gewöhnlich in Gruppen eingesetzt und gestatten es dem Anwender, eine von mehreren Optionen auszuwählen. Bei Auswahl einer Option werden alle anderen in der Gruppe enthaltenen Optionen deaktiviert. Hierdurch wird sichergestellt, dass zu jedem Zeitpunkt immer nur genau eine Optionsschaltfläche aktiviert ist. Ein Optionsschaltflächen-Steuerelement stellt zwei Eigenschaften zur Verfügung:
Sie können auch die folgenden Eigenschaften aus dem Modell (Model) der Optionsschaltflächen verwenden:
Sollen mehrere Optionsschaltflächen zu einer Gruppe zusammengefasst werden, müssen sie sequenziell und lückenlos in der Aktivierungsreihenfolge positioniert werden (Eigenschaft Model.TabIndex, im Dialog-Editor als "Order" (Reihenfolge) bezeichnet). Wird die Aktivierungsreihenfolge durch ein anderes Steuerelement unterbrochen, so beginnt StarOffice automatisch mit einer neuen Steuerelementegruppe, die unabhängig von der ersten Steuerelementegruppe aktiviert werden kann. Hinweis – Im Gegensatz zu VBA können in StarOffice Basic einer Gruppe von Steuerelementen keine Optionsschaltflächen hinzugefügt werden. In StarOffice Basic werden Steuerelemente nur gruppiert, um eine optische Gliederung bzw. Abgrenzung zu gewährleisten, indem ein Rahmen um die Steuerelemente gezeichnet wird. KontrollkästchenKontrollkästchen werden zur Erfassung eines Ja- oder Nein-Werts verwendet. In Abhängigkeit von ihrem Modus können sie zwei oder drei Zustände annehmen. Zusätzlich zu den Zuständen "Ja" und "Nein" kann sich ein Kontrollkästchen in einem Zwischenzustand befinden, wenn der entsprechende Ja- oder Nein-Status mehr als eine Bedeutung hat oder unklar ist. Kontrollkästchen stellen folgende Eigenschaften bereit:
Das Model-Objekt eines Kontrollkästchens bietet folgende Eigenschaften:
TextfelderTextfelder ermöglichen dem Anwender die Eingabe von Zahlen und Text. Die Grundlage für Textfelder bildet der Dienst com.sun.star.awt.UnoControlEdit. Ein Textfeld kann einzeilig oder mehrzeilig sein, editierbar oder für die Benutzereingabe gesperrt. Textfelder können auch als spezielle Währungs- oder Zahlenfelder sowie als Bildschirmfelder für bestimmte Aufgaben verwendet werden. Da diese Steuerelemente auf dem Uno-Dienst UnoControlEdit basieren, ist ihre programmgesteuerte Handhabung weitgehend identisch. Textfelder stellen folgende Eigenschaften bereit:
Über das verknüpfte Model-Objekt hinaus stehen folgende Eigenschaften zur Verfügung:
ListenfelderListenfelder (Dienst com.sun.star.awt.UnoControlListBox) unterstützen folgende Eigenschaften:
Listenfelder stellen folgende Methoden zur Verfügung:
Das Model-Objekt der Listenfelder hält folgende Eigenschaften bereit:
Hinweis – Die VBA-Option zum Versehen von Listeneinträgen mit einem numerischen Zusatzwert (ItemData) ist in StarOffice Basic nicht vorhanden. Soll neben dem Klartext ein zusätzlicher Zahlenwert (etwa eine Datenbank-Id) mit verwaltet werden, so muss hierfür ein Hilfsdatenfeld erstellt werden, das parallel zum Listenfeld verwaltet wird. |