5.15 Wie geht man mit dem Enumeration-Konzept um?
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.