A főbb felületek áttekintése
Néhány Apache OpenOffice-felület megtalálható az Apache OpenOffice API több részében is. Adott feladatok metódusait definiálják, amelyek számos problémára alkalmazhatók. Az alábbiakban áttekintést találunk ezekről a leggyakoribb felületekről.
Az objektumok eredetéről az útmutató későbbi részében olvashatunk bővebben. Itt jelenleg csak az objektumoknak egy bizonyos megközelítése kerül ismertetésre, amelyekhez az Apache OpenOffice API néhány fő felületet biztosít.
Környezetfüggő objektumok létrehozása
Az Apache OpenOffice API két lehetőséget biztosít az objektumok létrehozásához. Az egyik a fejezet elején említett createUnoService függvényben található. A createUnoService létrehoz egy objektumot, amely univerzálisan használható. Az ilyen objektumok és szolgáltatások környezetfüggetlen szolgáltatásokként ismertek.
A környezetfüggetlen szolgáltatásokon felül vannak környezetfüggő szolgáltatások is, amelyek objektumai csak más objektumokkal együtt használhatók. Például egy táblázatdokumentum rajzobjektuma ezért csak ezzel a dokumentummal együtt létezhet.
A com.sun.star.lang.XMultiServiceFactory felület
A környezetfüggő objektumokat általában egy objektummetódus hozza létre, amelytől az objektum függ. Általában az XMultiServiceFactory felület által definiált createInstance metódust használjuk a dokumentumobjektumokban.
Az előbb említett rajzobjektum például létrehozható a következő módon, a táblázatobjektummal:
Dim RectangleShape As Object RectangleShape = _ Spreadsheet.createInstance("com.sun.star.drawing.RectangleShape")
A szöveges dokumentumban a bekezdéssablont is ugyanígy lehet létrehozni:
Dim Style as Object Style = Textdocument.createInstance("com.sun.star.style.ParagraphStyle")
Név szerinti hozzáférés az alárendelt objektumokhoz
Az XNameAccess és az XNameContainer felülettel lehet elérni egy természetes nyelvi névvel az objektumokban lévő alárendelt objektumokat.
Míg az XNamedAccess lehetővé teszi a hozzáférést az egyes objektumokhoz, addig az XNameContainer végzi el az elemek beszúrását, módosítását és a törlését.
A com.sun.star.container.XNameAccess felület
Az alábbiakban a munkafüzet munkalapobjektuma mutat be egy példát az XNameAccess használatára. A program összefűzi egy munkafüzet lapjait. Az egyes lapokat a sheets objektumból az XNameAccess getByName metódusával érjük el:
Dim Sheets As Object Dim Sheet As Object Sheets = Spreadsheet.Sheets Sheet = Sheets.getByName("Munkafüzet1")
A getElementNames metódus áttekintést nyújt az összes elem nevéről. Eredményként egy adatmezőt ad vissza, amely tartalmazza a neveket. A következő példa bemutatja, hogyan olvasható be és jeleníthető meg egy ciklussal egy munkafüzet összes elemneve.
Dim Sheets As Object Dim SheetNames Dim I As Integer Sheets = Spreadsheet.Sheets SheetNames = Sheets.getElementNames For I=LBound(SheetNames) To UBound(SheetNames) MsgBox SheetNames(I) Next I
Az XNameAccess felület hasByName metódusával megállapítható, hogy egy adott nevű alárendelt objektum létezik-e egy objektumban. Ezért a következő példa megjelenít egy üzenetet, amely tájékoztatja a felhasználót, hogy a Spreadsheet objektum tartalmaz-e egy Munkalap1 nevű lapot.
Dim Sheets As Object Sheets = Spreadsheet.Sheets If Sheets.HasByName("Munkalap1") Then MsgBox "A Munkalap1 elérhető." Else MsgBox "A Munkalap1 nem érhető el." End If
A com.sun.star.container.XNameContainer felület
A XNameContainer felület végzi el az alapobjektum alárendelt objektumainak beszúrását, törlését és módosítását. Az ezt elvégző metódusok a következők: insertByName, removeByName és replaceByName.
A következő példa ennek egy gyakorlati megvalósítása. Meghív egy szöveges dokumentumot, amely tartalmaz egy StyleFamilies objektumot, és ez használja a dokumentum bekezdéssablonjainak (ParagraphStyles) elérhetővé tételéhez.
Dim StyleFamilies As Object Dim ParagraphStyles As Object Dim NewStyle As Object StyleFamilies = Textdoc.StyleFamilies ParagraphStyles = StyleFamilies.getByName("ParagraphStyles") ParagraphStyles.insertByName("NewStyle", NewStyle) ParagraphStyles.replaceByName("ChangingStyle", NewStyle) ParagraphStyles.removeByName("OldStyle")
Az insertByName sor beszúrja a NewStyle stílust ugyanilyen névvel a ParagraphStyles objektumba. A replaceByName sor módosítja a ChangingStyle stílust a NewStyle stílusra. Végül a removeByName metódus eltávolítja az OldStyle stílust a ParagraphStyles sablonból.
Index alapú hozzáférés az alárendelt objektumokhoz
Az XIndexAccess és az XIndexContainer felület használatával index alapján lehet hozzáférni az objektumokban található alárendelt objektumokhoz.
Az XIndexAccess felület rendelkezik az egyes objektumokhoz való hozzáféréshez szükséges metódusokkal. Az XIndexContainer rendelkezik az elemek beszúrásához és eltávolításához szükséges metódusokkal.
A com.sun.star.container.XIndexAccess felület
Az XIndexAccess tartalmazza a getByIndex és a getCount metódust az alárendelt objektumok meghívásához. A getByIndex visszaad egy adott indexű objektumot. A getCount megadja, hány objektum érhető el.
Dim Sheets As Object Dim Sheet As Object Dim I As Integer Sheets = Spreadsheet.Sheets For I = 0 to Sheets.getCount() - 1 Sheet = Sheets.getByIndex(I) ' Munkalap szerkesztése Next I
Ez a példa bemutat egy ciklust, amely végiglépdel az összes elérhető munkalapon, és menti mindegyik hivatkozását a Sheet objektumváltozóba. Ha indexekkel dolgozunk, ne felejtsük el, hogy a getCount az elemek számát adja vissza. Viszont a getByIndex metódusnál az elemek számozása 0-val kezdődik. Ezért a ciklusváltozó 0-tól getCount()-1 értékig számol.
A com.sun.star.container.XIndexContainer felület
Az XIndexContainer felület tartalmazza az insertByIndex és a removeByIndex metódust. A paraméterek struktúrája ugyanolya, mint az XNameContainer megfelelő metódusainál.
Hozzáférés az alárendelt objektumokhoz iterációval
Néha egy objektum tartalmazhat olyan alárendelt objektumokat, amelyek nem érhetők el név vagy index szerint. Ilyen esetekben az XEnumeration és az XenumerationAccess felületet kell használni. Ez a két felület biztosít egy olyan módszert, amellyel egy objektum alárendelt objektumai egymás után elérhetők anélkül, hogy közvetlenül kéne rájuk hivatkozni.
A com.sun.star.container.XEnumeration és az XenumerationAccess felületek
Az alapobjektumnak biztosítania kell az XEnumerationAccess felületet, amely mindössze a createEnumeration metódust tartalmazza. Ez egy külső objektumot ad vissza, amely biztosítja az XEnumeration felületet a hasMoreElements és a nextElement metódussal. Ezeken keresztül elérhetők az alárendelt objektumok.
A következő példa végiglépdel egy szöveg összes bekezdésén:
Dim ParagraphEnumeration As Object Dim Paragraph As Object ParagraphEnumeration = Textdoc.Text.createEnumeration While ParagraphEnumeration.hasMoreElements() Paragraph = ParagraphEnumeration.nextElement() Wend
A program először létrehozza a külső ParagraphEnumeration objektumot. Ez mindig visszaadja a ciklusban a szöveg egyes bekezdéseit. A ciklus akkor ér véget, ha a hasMoreElements metódus False (hamis) értéket ad vissza, ami azt jelzi, hogy a program elérte a szöveg végét.
Content on this page is licensed under the Public Documentation License (PDL). |