<< Click to Display Table of Contents >> OLE Automation |
Mit Hilfe von OLE Automation können geeignete Applikationen (zum Beispiel die Textverarbeitung TextMaker oder die Tabellenkalkulation PlanMaker) mit SoftMaker Basic-Scripts gesteuert werden.
Tipp: Ausführliche Informationen zum Programmieren von TextMaker und PlanMaker finden Sie in den Kapiteln BasicMaker und TextMaker sowie BasicMaker und PlanMaker.
Was ist ein OLE Automation-Objekt?
Jedes für OLE-Automation geeignete Programm stellt bestimmte Objekte zur Verfügung. Die Art dieser Objekte hängt von der Applikation ab. Eine Textverarbeitung wie TextMaker bietet beispielsweise Objekte wie die derzeit geöffneten Dokumente oder die Formatierung des derzeit markierten Textes an.
Ein OLE Automation-Objekt bietet zwei Arten von Zugriffsmöglichkeiten:
▪Die Eigenschaften (Properties) von OLE Automation-Objekten sind Werte, die gelesen und/oder geschrieben werden können und einen bestimmten Aspekt des Objekts beschreiben. Ein Dokumentfenster einer Textverarbeitung hat zum Beispiel die Eigenschaften Name (des darin geöffneten Dokuments), Breite und Höhe des Fensters usw.
▪Methoden sind Funktionen, die eine Aktion an einem OLE Automation-Objekt auslösen. Ein in der Applikation geöffnetes Dokument hat zum Beispiel eine Methode zum Speichern des Dokuments.
Zugriff auf OLE Automation-Objekte
Um auf ein OLE Automation-Objekt zuzugreifen, muss zunächst eine Variable vom Typ Object deklariert werden.
Beispiel:
Dim MyObj As Object
Dann muss diese mit der Applikation "verbunden" werden. Dazu gibt es zwei Funktionen: Während CreateObject die Applikation nötigenfalls automatisch startet, kann GetObject nur eine Verbindung zu einer bereits gestarteten Applikation herstellen.
Beispiel:
Set MyObj = CreateObject("TextMaker.Application")
Die Variable MyObj enthält nun eine Referenz auf das Haupt-OLE Automation-Objekt der Applikation, dessen Name übrigens immer Application lautet. Über die Punktnotation – zum Beispiel MyObj.Application.Documents – können Sie auf die untergeordneten Objekte zugreifen (siehe auch nächster Abschnitt).
Wenn die OLE Automation-Verbindung nicht mehr benötigt wird, sollte die Variable wieder von dem Objekt getrennt werden, indem sie auf Nothing gesetzt wird:
Beispiel:
Set MyObj = Nothing ' Variable vom Objekt trennen
Eigenschaften
Um auf die Eigenschaften eines Objekts zuzugreifen, wird die Punktnotation Objekt.Eigenschaft verwendet.
Beispiel:
x = MyObj.Application.Width ' Breite des Programmfensters auslesen
Oder:
MyObj.Application.Width = 5 ' Breite des Programmfensters setzen
Methoden
Zum Aufrufen von Methoden wird ebenfalls die Punktnotation eingesetzt: Objekt.Methode
Beispiel:
MyObj.Application.Quit ' Applikation beenden
Sammlungen verwenden
Neben einfachen Objekten gibt es auch Sammlungen (Collections) von Objekten.
TextMaker bietet beispielsweise die Sammlung Documents (eine Sammlung aller geöffneten Dokumente) an. Eine Sammlung ist selbst ein Objekt, das meist als Eigenschaft ihres Elternobjekts zugänglich ist.
Um auf alle Elemente einer Sammlung zuzugreifen, kann man die For Each Next-Anweisung benutzen.
Alle Sammlungen bieten standardmäßig die folgenden Eigenschaften und Methoden:
Count | Liefert die Anzahl der Elemente (nur lesbar). |
Item(i) | Liefert das i-te Element. |
Add | Fügt der Sammlung ein neues Objekt hinzu. |
Beispiel
Abschließend ein Beispiel, das die Anwendung von OLE Automation in der Praxis demonstriert. Das Beispiel verwendet die Sammlung Documents von TextMaker, die für alle derzeit geöffneten Dokumente steht. Erst wird ermittelt, wie viele Dokumente gerade geöffnet sind. Anschließend werden die Namen der geöffneten Dokumente ausgegeben. Schließlich werden die Dokumente geschlossen.
Tipp: Ausführliche Informationen zu den Themen BasicMaker und TextMaker sowie BasicMaker und PlanMaker finden Sie in den gleichnamigen Kapiteln.
Sub Main
Dim tm As Object
Set tm = CreateObject("TextMaker.Application")
tm.Visible = True ' TextMaker sichtbar machen
tm.Activate ' TextMaker in den Vordergrund bringen
tm.Documents.Add ' Drei neue Dokumente anlegen
tm.Documents.Add
tm.Documents.Add
Print tm.Documents.Count & " Dokumente geöffnet"
Dim x As Object
For Each x in tm.Documents
Print x.Name ' Namen der Dokumente ausgeben
Next
tm.Documents.Close ' Alle Dokumente schließen
Set tm = Nothing ' Verbindung zu TextMaker beenden
End Sub