Munka az űrlapokkal

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png


Az Apache OpenOffice űrlapjai tartalmazhatnak szövegmezőket, listapaneleket, választógombokat és számos egyéb vezérlőelemet, amelyeket közvetlenül a szövegbe vagy a munkafüzetbe lehet beszúrni. Az Űrlapelemek eszköztár használatával szerkeszthetők az űrlapok.

Egy Apache OpenOffice-űrlap a két mód egyikét használhatja: a vázlatmódot vagy a megjelenítési módot. Vázlatmódban a vezérlőelemek helyzete módosítható, és tulajdonságaik szerkeszthetők a tulajdonságablak használatával.

Az Űrlapelemek eszköztár használatával is lehet váltani a két mód között.

Objektuműrlapok meghatározása

Az Apache OpenOffice a rajzobjektum-szinten helyezi el az űrlap vezérlőelemeit. A tényleges űrlapobjektum a Forms listán keresztül érhető el, a rajzolási szinten. Az objektumokat a következő módon lehet elérni a szöveges dokumentumokban:

Dim Doc As Object   
Dim DrawPage As Object
Dim Form As Object
 
Doc = StarDesktop.CurrentComponent
DrawPage = Doc.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

A GetByIndex metódus visszaadja a 0-s indexszel rendelkező űrlapot.

Ha munkafüzetekkel dolgozunk, egy közbenső lépésre van szükség (a Sheets listára), mert a rajzolási szintek nem közvetlenül a dokumentumban helyezkednek el, hanem az egyes munkalapokban:

Dim Doc As Object   
Dim Sheet As Object
Dim DrawPage As Object
Dim Form As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets.GetByIndex(0)
DrawPage = Sheet.DrawPage
Form = DrawPage.Forms.GetByIndex(0)

Ahogy a GetByIndex metódus neve is jelzi, a dokumentum több űrlapot is tartalmazhat. Ez például akkor hasznos, ha több adatbázis tartalma is megjelenik egyetlen dokumentumban, vagy ha egy 1:n típusú adatbázis-kapcsolat van megjelenítve az űrlapon. Ebből a célból rendelkezésre áll az alűrlapok létrehozásának lehetősége is.

Az űrlap vezérlőelemeinek három nézőpontja

Az űrlap vezérlőelemeinek három nézőpontja van:

  • A vezérlőelem Modellje a kulcsobjektum az Apache OpenOffice Basic-programozó számára, amikor űrlap-vezérlőelemekkel dolgozik.
  • Ennek ellentettje a vezérlőelem Nézete, amely a megjelenítési információkat kezeli.
  • Mivel a program speciális rajzelemként kezeli a dokumentumok űrlap-vezérlőelemeit, létezik egy Alakzatobjektum is, amely a vezérlőelem rajzelem-specifikus tulajdonságait tartalmazza (gyakorlatilag a helyét és méretét).

Az űrlap-vezérlőelemek modelljének elérése

Az űrlap-vezérlőelemek modellje az űrlapobjektum GetByName metódusán keresztül érhető el.

Dim Doc As Object   
Dim Form As Object
Dim Ctl As Object
 
Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
Ctl = Form.getByName("SajátLista")

Ez a példa meghatározza a jelenleg megnyitott szöveges dokumentum első űrlapjában található SajátLista vezérlőelem modelljét.

Ha nem vagyunk benne biztosak, melyik űrlap tartalmazza a vezérlőelemet, akkor a kívánt vezérlőelemet megkereshetjük az űrlapokban:

Dim Doc As Object   
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim I as Integer
 
Doc = StarDesktop.CurrentComponent
Forms = Doc.Drawpage.Forms
 
For I = 0 To Forms.Count - 1
  Form = Forms.GetbyIndex(I)
  If Form.HasByName("SajátLista") Then
    Ctl = Form.GetbyName("SajátLista")
    Exit Function
  End If
Next I

Ez a példa a HasByName metódussal végignézi a szöveges dokumentum összes űrlapját, hogy tartalmaz-e egy SajátLista nevű vezérlőelemet. Ha az adott modell megtalálható, akkor a program menti az erre mutató hivatkozást a Ctl változóba, és a keresés befejeződik.

Az űrlap-vezérlőelemek nézetének elérése

Az űrlap-vezérlőelem nézetének eléréséhez először meg kell határozni a vezérlőelem modelljét. A vezérlőelem modellje ezután meghatározható a modell segítségével és a dokumentumvezérlő használatával.

Dim Doc As Object   
Dim DocCrl As Object
Dim Forms As Object
Dim Form As Object
Dim Ctl As Object
Dim CtlView As Object
Dim I as Integer
 
Doc = StarDesktop.CurrentComponent
DocCrl = Doc.getCurrentControler()
Forms = Doc.Drawpage.Forms
 
For I = 0 To Forms.Count - 1
  Form = Forms.GetbyIndex(I)
  If Form.HasByName("SajátLista") Then
    Ctl = Form.GetbyName("SajátLista")
    CtlView = DocCrl.GetControl(Ctl)
    Exit Function
  End If
Next I

A példában látható kód sokban hasonlít az előző példa kódjához, például a vezérlőelem modelljének meghatározásában. Nem csak a Doc dokumentumobjektumot használja, hanem a DocCrl dokumentumvezérlő-objektumot, amely egy hivatkozás az aktuális dokumentumablakra. Ezzel a vezérlőobjektummal és a vezérlőelem modelljével a program a GetControl metódus használatával meghatározza a vezérlőelem nézetét (CtlView változó).

Az űrlap-vezérlőelemek alakzatobjektumának elérése

Az űrlap-vezérlőelemek alakzatobjektumának eléréséhez használt metódus szintén a dokumentum rajzolási szintjét használja. Egy adott vezérlőelem maghatározásához a rajzolási szint összes rajzelemét át kell nézni.

Dim Doc As Object   
Dim Shape as Object
Dim I as integer
 
Doc = StarDesktop.CurrentComponent
 
For i = 0 to Doc.DrawPage.Count - 1
  Shape = Doc.DrawPage(i)
  If HasUnoInterfaces(Shape, "com.sun.star.drawing.XControlShape") Then
    If Shape.Control.Name = "SajátLista" Then
      Exit Function
    End If
  End If
Next

Ez a példaprogram végignézi az összes rajzelemet, és ellenőrzi, hogy azok támogatják-e az űrlap-vezérlőelemekhez szükséges com.sun.star.drawing.XControlShape felületet. Amennyiben igen, a Control.Name tulajdonsággal ellenőrzi, hogy a vezérlőelem neve SajátLista-e. Ha így van, akkor a keresés befejeződik.

Vezérlőelemek méretének és helyének meghatározása

Mint ahogy azt olvashattuk, a vezérlőelemek mérete és helye megállapítható a hozzájuk tartozó alakzatobjektummal. A vezérlőelem alakzatobjektuma, akárcsak az összes többi alakzatobjektum, rendelkezik egy Size és egy Position tulajdonsággal ehhez:

Size (struktúra)
a vezérlőelem mérete (com.sun.star.awt.Size adatstruktúra).
Position (struktúra)
a vezérlőelem helye (com.sun.star.awt.Point adatstruktúra).

A következő példa bemutatja, hogyan állítható be egy vezérlőelem helye és mérete az alakzatobjektum használatával:

Dim Shape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
 
' ... Shape objektum inicializálása a korábbi módon ...
 
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
 
Shape.Size = Size
Shape.Position = Point

Ahhoz, hogy működjön a kód, a vezérlőelem alakzatobjektumának már ismertnek kell lennie. Ha nem így lenne, akkor azt be kell állítani az előző példában látható kóddal.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools