Zugriff auf unbekannte Objekte
In der Regel kann man über den Namen oder den Index auf untergeordnete Objekte zugreifen.
Im Beispiel mit der Tabelle geht es mit getByIndex(). Als Alternative kann auch ein Name
verwendet, wenn dieser vergeben wurde. Der Befehl lautet getbyName(). Diese beiden Befehle
gibt es für viele Objekte, aber nicht für alle.
Es gibt untergeordneten Objekte die weder über den Namen noch über einen Index
adressierbar sind. Dafür gibt es aber die Methode createEnumeration, die ein Objekt mit einer
Liste aller vorhandenen Objekte bereitstellt. Dazu kommen noch die beiden Methode
hasMoreElemenst() und NextElement. Mir diesem Wissen lässt sich eine Schleife über alle
Objekte erstellen und diese einzeln Auswerten und gegebenenfalls ändern.
Mit dieser Funktion kann sich zum Beispiel alle geöffneten Dokumente, und damit die
Tabellendokumente anzeigen lassen.
Sub doktypetest
Dim myList as Object
Dim myDoc as Object
‘Erzeugen der Objektliste
mylist=stardesktop.components.createenumeration
‘Liste durchlaufen
while mylist.hasmoreelements()
myDoc=myList.nextelement()
on error goto weiter
‘Prüfen ob es ein Tabellendokument ist.
if myDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") then
msgbox("Ein Calc-Dokument")
else msgbox ("Kein Calc-Dokument")
end if
weiter:
wend
end sub
In diesem Beispiel bietet der Service StarDesktop.Comoponents die Schnittstelle
com.sun.star.container.XEnumeration. Mit dieser kann man über createEnumeration den
Service mit den einzelnen Objekten erzeugen. Dieser Service enthält die einzelnen Objekte,
hier die Dokumente, und den Zugriff über die interne Auflistung. Mit den beiden Methoden
hasMoreElements und nextElements kann man auf diese Objekte zugreifen.
Die Enumeration-Methode ist ein wesentlicher Bestandteil der API von StarBasic. Es
gibt viele
Services die sich nur auf diese Weise ansprechen lassen.