Egyéb utasítások
Type...End Type
A „struktúra” adatmezők összessége, amelyek egyetlen elemként kezelhetők. Régebbi szóhasználattal a struktúra egy rekordnak vagy egy rekord részének nevezhető.
Az API gyakran használ előre definiált struktúrákat, de ezek „UNO-struktúrák”, a struktúrák egy nagyon speciális fajtája.
Definíció
A Type...End Type utasításokkal létrehozhatjuk a saját (nem UNO) struktúráinkat:
Type aMenuItem 'név adása a típusnak
'Adatmezők definiálása a struktúrán belül Minden
' definíció úgy néz ki, mint egy Dim utasítás, de nincs odaírva a „Dim”
aCommand as String
aText as String
End Type ' definíciós blokk vége
Példány
A Type definíció csak egy minta vagy egy sablon, nem tényleges változók halmaza. Ha a típus egy „példányát” kívánjuk létrehozni, amelyben tényleges változók értéke tárolható, használjuk a Dim as New utasítást:
Dim maItem as New aMenuItem
Hatáskör
Ahogy a következő példában látszik, a Type definíció írható a modul elejére (az első Sub vagy Function elé). A definíció ezáltal a modul minden rutinja számára elérhető lesz.
Az OpenOffice.org 3.0-s verziójától kezdve a változókkal ellentétben nincs arra lehetőség, hogy a definíciót a modulon kívül elérhetővé tegyük.
Az új típus egy példány maga is egy változó, és a változók hatáskörének szabályai vonatkoznak rá (lásd:Változók hatásköre és élettartama).
Egy példa a definíció használatára és egy példányban a mezőkre való hivatkozásra a With...End With szakaszban található.
With...End With
Minősítők
Általában a Basic nem néz bele egy tárolóba, például egy Object-be, hogy megnézze, hogy milyen nevek lehetnek ott definiálva. Ha egy ilyen nevet szeretnénk használni, meg kell mondanunk a Basicnek, hogy merre találja. Ezt az objektum nevének „minősítőként” való használatával érhetjük el. Írjuk a belső név elé, és ponttal válasszuk el tőle.
SajatObjektum.ValamiNev
Mivel a tárolók más tárolókat is tartalmazhatnak, egynél több minősítő megadására is szükség lehet. Írjuk sorrendbe a minősítőket, kívülről befelé haladva:
KulsoObjektum.BelsoObjektum.LegbelsoObjektum.ValamiNev
Ezekről a nevekről úgy is beszélhetünk, hogy a „pont ('.') operátorral vannak összefűzve”.
A With alternatíva
A With...End With közé zárt utasítások egy alternatív lehetőséget biztosítanak a minősítők teljes kiírása helyett. Az API egyes minősítői meglehetősen hosszúak lehetnek. A minősítőket a With utasításban adjuk meg. Amíg a Basic nem találkozik az End With utasítással, „részben minősített” neveket keres. Az ilyen nevek ponttal kezdődnek (unáris pont operátor). Az értelmező a With utasításban megadott minősítőket használja, mintha azok a részben minősített nevek elé lennének írva.
1. példa: Felhasználó által definiált struktúra
Ez a példa bemutatja, hogy hogyan definiáljunk és használjunk egy struktúrát, és hogyan hivatkozzunk az elemeire a With utasítással és anélkül. Mindkét esetben az adatmezők nevei (a Type definícióból) elé kell írni a példány nevét (a Dim utasításból).
Type aMenuItem
aCommand as String
aText as String
End Type
Sub Main
'A felhasználó által definiált struktúra egy példányának létrehozása
' Jegyezzük meg, hogy a "New" kulcsszót kell használni.
Dim maItem as New aMenuItem
With maItem
.aCommand = ".uno:Copy"
.aText = "~Másolás"
End With
MsgBox "Parancs: " & maItem.aCommand & Chr(13) _
& "Szöveg: " & maItem.aText
End Sub
2. példa: Case utasítás
A Cellák és tartományok fejezetben, a Case utasításra vonatkozó példában a minősítők teljesen ki vannak írva az érthetőség kedvéért.. Ez egyszerűbben is írható a következőképpen:
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1) 'A "B2" cella (0-alapú!)
Cell.Value = 1000
With com.sun.star.table.CellContentType
Select Case Cell.Type
Case .EMPTY
MsgBox "Tartalom: Üres"
Case .VALUE
MsgBox "Tartalom: Érték"
Case .TEXT
MsgBox "Tartalom: Szöveg"
Case .FORMULA
MsgBox "Tartalom: Képlet"
End Select
End With
Vegyük észre, hogy a With szerkezet teljesen a Select szerkezeten kívül van.
Content on this page is licensed under the Public Documentation License (PDL). |