Ereignisse verstehen
Ereignisse werden ausgelöst, wenn bestimmte Programmsituationen eintreten. Diese Ereignisse können in vom Anwender realisierten Ereignisprozeduren verarbeitet werden.
Verwenden von Ereignissen
In FlexPro können Sie Ereignisprozeduren auf der Ebene von Datenbanken, Objektklassen (AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject, AnyValueObject), Objekten oder der Anwendung implementieren.
Das ObjectOpened-Ereignis tritt beispielsweise auf der Objekt- und der Objektklassenebene ein, dagegen ist das DatabaseSaved-Ereignis sowohl auf der Datenbank- wie auch auf der Anwendungsebene verfügbar. Das DatabaseSaved-Ereignis für eine Datenbank tritt ein, wenn diese Datenbank gespeichert wurde. Auf der Anwendungsebene tritt das DatabaseSaved-Ereignis ein, wenn eine der geöffneten Datenbanken gespeichert wurde.
Hinweise, wie Sie Ereignisprozeduren für die verschiedenen Objekte erstellen, finden Sie in den folgenden Themen:
Verwenden von Ereignissen mit dem Application- oder Databases-Objekt
Verwenden von Ereignissen mit dem Database-Objekt
Verwenden von Ereignissen mit den FlexPro-Objekten
Verwenden von Ereignissen mit den Klassenobjekten
Aktivieren der Ereignisse
Mit Hilfe der EnableEvents-Eigenschaft des Application-Objekts können Sie die Ereignisse aktivieren oder deaktivieren.
Beispielsweise führt das Speichern einer Datenbank mit der Save-Methode zum Auftreten des BeforeDatabaseSave-Ereignisses. Dies kann verhindert werden, indem Sie die EnableEvents-Eigenschaft auf False setzen, bevor Sie die Save-Methode aufrufen.
Application.EnableEvents = False
ActiveDatabase.Save
Application.EnableEvents = True
Ereignisse sind in FlexPro standardmäßig deaktiviert, d. h. Application.EnableEvents ist False. Sie können die Ereignisse aktivieren, indem Sie die EnableEvents-Eigenschaft auf True setzen oder im Dialogfeld Datei > Optionen auf der Registerkarte Systemeinstellungen die Voreinstellung ändern und das Kontrollkästchen Ereignismitteilung an Makros aktivieren markieren.
Hinweis Wenn Sie zum ersten Mal eine Ereignisprozedur in einem Objektmodul erstellen, erhalten Sie einen Hinweis, falls die Ereignisse abgeschaltet sind.
Arten von Ereignissen
Es gibt grundsätzlich zwei Arten von Ereignissen in FlexPro. Zum einen gibt es Ereignisse, die ausgelöst werden, nachdem ein bestimmter Zustand eingetreten ist. Der Anwendungsentwickler wird hier lediglich von der Zustandsänderung informiert (z. B. ValueModified). Andererseits gibt es aber auch Ereignisse, die einen Eingriff des Anwendungsentwicklers erlauben. Diese Ereignisse bilden Folgen aus bis zu drei Ereignissen. Der Ablauf sieht folgendermaßen aus: Zuerst kommt ein QueryCancelEventName-Ereignis, in dem der Anwendungsentwickler entscheiden kann, ob ein Programmzustand eintreten darf. Gibt dieses Ereignis True zurück, wird die Bearbeitung in FlexPro abgebrochen und das Ereignis EventNameCancelled wird ausgelöst. Wird das QueryCancelEventName-Ereignis nicht behandelt oder gibt es False zurück, so wird die Bearbeitung in FlexPro fortgesetzt und unmittelbar bevor das Ereignis eintritt, wird das Before-Ereignis ausgelöst. Nachdem der Programmzustand eingetreten ist, wird schließlich noch das Ereignis EventName ausgelöst.
Folgender VBA-Code beschreibt noch einmal die Logik am Beispiel des ObjectOpened-Ereignisses:
' Objekt oObject soll durch Doppelklick des Anwenders
' in der Listenansicht geöffnet werden
If QueryCancelOpenObject(Object) Then
OpenObjectCanceled oObject
Else ...
BeforeOpenObject oObject
oObject ... ' Objekt wird geöffnet ...
ObjectOpened oObject
End If
Weiterleitung von Ereignissen
In FlexPro werden für ein Objekt ausgelöste Ereignisse nicht nur bei diesem Objekt signalisiert, sondern anschließend noch an die Vorlagendatenbanken und/oder übergeordnete Objekte im Objektmodell weitergeleitet. Auf diese Weise besteht die Möglichkeit, die Verarbeitung von Ereignissen gleichartiger Objekte in den Vorlagendatenbanken oder in übergeordneten Objekten der Projektdatenbank zu bündeln.
So werden z. B. nach dem Speichern der Datenbank "Data.fpd" die folgenden Ereignisprozeduren - sofern sie existieren - der Reihe nach ausgeführt:
•DatabaseSaved-Ereignisprozedur von ThisDatabase der Datenbank "Data.FPD"
•DatabaseSaved-Ereignisprozedur von ThisDatabase der persönlichen Vorlagendatenbank
•DatabaseSaved-Ereignisprozedur der Databases-Auflistung der Datenbank "Data.FPD"
•DatabaseSaved-Ereignisprozedur des Application-Objekts
Als erstes Argument eines Ereignisses wird immer das betroffene Objekt selbst mitgegeben, so dass einer Ereignisprozedur, an die das Ereignis weitergeleitet wurde, bekannt ist, für welches Objekt das gerade verarbeitete Ereignis eingetreten ist.
An welche Objekte Ereignisse weitergeleitet werden, können Sie der Objekt-Dokumentation der Referenz entnehmen.
Weiterleitung von Ereignissen für FlexPro-Objekte
Das Weiterleiten der Ereignisse hat für die FlexPro-Objekte eine besondere Bedeutung. Aufgrund der Tatsache, dass in einer FlexPro-Datenbank sehr viele FlexPro-Objekte existieren können, für die es aber kein korrespondierendes Objekt-Modul im Visual Basic Projekt-Explorer gibt, ist es am einfachsten die Ereignisprozeduren für ein, mehrere oder alle FlexPro-Objekte in den Klassen-Objektmodulen AnyCursorObject, AnyDocObject, AnyFolder, AnyFormula, AnyFpObject und AnyValueObject zu realisieren.
Tritt z. B. das ObjectModified-Ereignis des FpObject-Objekts ein, werden die folgenden Ereignisprozeduren - sofern sie existieren - der Reihe nach ausgeführt:
•ObjectModified-Ereignisprozedur des betroffenen Objektes
•ObjectModified-Ereignisprozedur von AnyFpObject in der Datenbank in der sich das Objekt befindet
•ObjectModified-Ereignisprozedur von AnyFpObject in der persönlichen Vorlagendatenbank
Die beschriebene Ereignis-Kaskadierung ist für alle FlexPro-Objekte gleich.