Események
Az Apache OpenOffice párbeszédablakai és űrlapjai olyan eseményorientált programozási modellen alapulnak, amelyben eseménykezelőket rendelhetünk a vezérlőelemekhez. Az eseménykezelő adott művelet bekövetkezésekor előre megadott eljárást futtat. Az eseménykezeléssel dokumentumokat szerkeszthetünk, adatbázisokat nyithatunk meg, vagy akár más vezérlőelemeket is elérhetünk.
Az Apache OpenOffice vezérlőelemei különböző típusú és különböző helyzetekben indítható eseményeket ismernek fel. Ezek az események a következő négy csoportba sorolhatók:
- Egérvezérlés: az egérműveleteknek megfelelő események (ilyen például az egyszerű egérmozgatás vagy kattintás a képernyő adott helyén)
- Billentyűzetvezérlés: billentyűk megnyomásával indított események
- Fókuszmódosítás: az Apache OpenOffice által a vezérlőelemek aktiválásakor vagy inaktiválásakor végrehajtott események
- Vezérlőelemekre jellemző események: kizárólag bizonyos vezérlőelemekkel kapcsolatban előforduló események
Az eseményekkel való munkánál ügyeljünk arra, hogy az Apache OpenOffice fejlesztési környezetben létrehozzuk a kapcsolódó párbeszédablakot, és hogy az tartalmazza a szükséges vezérlőelemeket és dokumentumokat (ha az eseményeket űrlapra alkalmazzuk).
Az előző ábrán az Apache OpenOffice Basic fejlesztési környezete látható egy két listát tartalmazó párbeszédablakkal. A két lista között elhelyezett gombokkal az adatok áthelyezhetők az egyik listáról a másikra.
Ha az elrendezést meg szeretnénk jeleníteni a képernyőn, létre kell hozni a megfelelő Apache OpenOffice Basic eljárásokat, hogy azokat az eseménykezelők hívhassák. Bár ezeket az eljárásokat bármelyik modulban használhatjuk, célszerűbb használatukat két modulra korlátozni. A kód egyszerűen olvasható és érthető lesz, ha beszédes nevet adunk ezeknek az eljárásoknak. A makrókból közvetlenül egy általános programeljárásra való ugrás általában nehezen érthető kódot eredményez. Ehelyett a kód karbantartásának és hibakeresésének egyszerűsítéséhez érdemes egy másik eljárást is létrehozni, amely az eseménykezelés belépési pontjaként szolgál. Ez még akkor is hasznos, ha kizárólag a céleljárás hívását tartalmazza.
A következő példa kódja egy bejegyzést helyez át a párbeszédablak bal oldali listájáról a jobb oldaliba.
Sub cmdSelect_Initiated Dim lstEntries As Object Dim lstSelection As Object lstEntries = Dlg.getControl("lstEntries") lstSelection = Dlg.getControl("lstSelection") If lstEntries.SelectedItem > 0 Then lstSelection.AddItem(lstEntries.SelectedItem, 0) lstEntries.removeItems(lstEntries.SelectItemPos, 1) Else Beep End If End Sub
Ha ezt az eljárást az Apache OpenOffice Basicben hoztuk létre, a párbeszédablak-szerkesztő tulajdonságablakában a kívánt eseményhez rendelhetjük.
A Művelet hozzárendelése párbeszédablak az összes elérhető eseményt felsorolja. Makró hozzárendelés egy eseményhez:
- Jelöljük ki az eseményt
- Kattintsunk a Macro... gombra
- Keressük meg és jelöljük ki a makrót, amihez hozzá akarjuk rendelni
- Kattintsunk az OK gombra
Paraméterek
Adott esemény előfordulása nem mindig elegendő a megfelelő válasz megadásához, ehhez további információra is szükség lehet. Például egy egérkattintás feldolgozásához ismerni kell a képernyő azon helyét, ahol az egérgombot megnyomták.
Az Apache OpenOffice Basicben objektumparamétereket használhatunk, hogy az eljárás számára további információval szolgáljunk egy eseményről, például:
Sub ProcessEvent(Event As Object) End Sub
Az Event objektum struktúrája és tulajdonságai az eljáráshívást kiváltó esemény típusától függenek.
Az esemény típusától függetlenül valamennyi objektum hozzáférést biztosít a megfelelő vezérlőelemhez és modelljéhez. A vezérlőelem az Event.Source és modellje az Event.Source.Model használatával érhető el.
Ezek a tulajdonságok esemény indításához használhatók egy eseménykezelőn belül.
Egéresemények
Az Apache OpenOffice Basic a következő egéreseményeket ismeri fel:
- Egérmozgatás
- a felhasználó mozgatja az egeret
- Egérmozgatás billentyű megnyomása közben
- a felhasználó billentyű megnyomása mellett mozgatja az egeret
- Egérgomb megnyomása
- a felhasználó megnyomja valamelyik egérgombot
- Egérgomb felengedése
- a felhasználó felengedi valamelyik egérgombot
- Egér kívülre kerül
- a felhasználó az aktuális ablakon kívülre mozgatja az egeret
A kapcsolódó eseményobjektumok felépítését a com.sun.star.awt.MouseEvent struktúra definiálja, amely a következő adatokat szolgáltatja:
- Buttons (rövid egész szám)
- megnyomott gomb (egy vagy több állandó a com.sun.star.awt.MouseButton tulajdonságnak megfelelően).
- X (hosszú egész szám)
- az egér X koordinátája képpont mértékegységben a vezérlőelem bal felső sarkától mérve
- Y (hosszú egész szám)
- az egér Y koordinátája képpont mértékegységben a vezérlőelem bal felső sarkától mérve
- ClickCount (hosszú egész szám)
- az egéreseményhez kapcsolódó kattintások száma (ha az Apache OpenOffice elegendően gyorsan válaszol, akkor a ClickCount értéke a dupla kattintásnál is 1 lesz, mivel csak egy egyedi esemény kezdeményezése történt).
A com.sun.star.awt.MouseButton tulajdonságban az egérgombokhoz definiált állandók a következők:
- LEFT
- bal oldali egérgomb
- RIGHT- jobb oldali egérgomb
- MIDDLE
- középső egérgomb
A következő példa az egér helyzetét és a megnyomott egérgombot adja eredményül:
Sub MouseUp(Event As Object) Dim Msg As String Msg = "Gomb: " If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then Msg = Msg & "bal oldali " End If If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then Msg = Msg & "jobb oldali " End If If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then Msg = Msg & "középső " End If Msg = Msg & Chr(13) & "Pozíció: " Msg = Msg & Event.X & "/" & Event.Y MsgBox Msg End Sub
Billentyűzetesemények
Az Apache OpenOffice Basicben a következő billentyűzetesemények állnak rendelkezésre:
- Billentyű megnyomása
- a felhasználó megnyom egy billentyűt
- Billentyű felengedése
- a felhasználó felenged egy billentyűt
Mindkét esemény logikai billentyűműveletre vonatkozik, és nem fizikai műveletet jelent. Ha a felhasználó egyetlen karakter beviteléhez több billentyűt nyom meg (például ékezetes karakternél), az Apache OpenOffice Basic ekkor is csak egy eseményt fog létrehozni.
A módosító billentyűkkel (például Shift vagy Alt) végrehajtott önálló művelet nem hoz létre független eseményt.
A megnyomott billentyűre vonatkozó adatokat az az eseményobjektum tartalmazza, amelyet a az Apache OpenOffice Basic szolgáltat az eseménykezelő eljárásának. Ez a következő tulajdonságokat tartalmazza:
- KeyCode (rövid egész szám)
- a megnyomott billentyű kódja (alapértelmezett értékek a com.sun.star.awt.Key tulajdonságnak megfelelően)
- KeyChar (karakterlánc)
- a beírt karakter (a módosító billentyűk figyelembevételével)
A következő példa a KeyCode tulajdonságot használja annak megállapítására, hogy az Enter, a Tab vagy valamelyik másik vezérlőbillentyű lett-e megnyomva. Ilyen billentyű megnyomásakor a programkód a billentyű nevét adja vissza, egyébként a beírt karaktert:
Sub KeyPressed(Event As Object) Dim Msg As String Select Case Event.KeyCode Case com.sun.star.awt.Key.RETURN Msg = "Az Enter billentyűt nyomták meg" Case com.sun.star.awt.Key.TAB Msg = "A Tab billentyűt nyomták meg" Case com.sun.star.awt.Key.DELETE Msg = "A Delete billentyűt nyomták meg" Case com.sun.star.awt.Key.ESCAPE Msg = "Az Escape billentyűt nyomták meg" Case com.sun.star.awt.Key.DOWN Msg = "A Le billentyűt nyomták meg" Case com.sun.star.awt.Key.UP Msg = "A Fel billentyűt nyomták meg" Case com.sun.star.awt.Key.LEFT Msg = "A Balra billentyűt nyomták meg" Case com.sun.star.awt.Key.RIGHT Msg = "A Jobbra billentyűt nyomták meg" Case Else Msg = "A beírt karakter: " & Event.KeyChar End Select MsgBox Msg End Sub
A billentyűzet egyéb állandóira vonatkozó tudnivalók a com.sun.star.awt.Key modulban lévő API-hivatkozásban találhatók.
Fókuszesemények
A fókuszesemények azt jelzik, amikor egy vezérlőelem megkapja vagy elveszíti a fókuszt. Ezeket az eseményeket például annak meghatározására használhatjuk, hogy a felhasználó befejezte-e egy vezérlőelemen a munkát, és így frissíthetők-e a párbeszédablak egyéb elemei. A következő fókuszesemények állnak rendelkezésre:
- Fókusz megkapása
- az elemre kerül a fókusz
- Fókusz elvesztése
- az elemről elkerül a fókusz
A fókuszesemények Event objektumai a következők:
- FocusFlags (rövid egész szám)
- a fókuszváltozás oka (alapértelmezett érték a com.sun.star.awt.FocusChangeReason tulajdonságnak megfelelően)
- NextFocus (objektum)
- a fókuszt megkapó objektum (csak a Fókusz elvesztése eseménynél)
- Temporary (logikai érték)
- a fókusz ideiglenes elvesztése
Vezérlőelemekre jellemző események
Az összes vezérlőelemnél használható korábban ismertetett eseményeken kívül vannak olyan események is, amelyek csak meghatározott elemekre vonatkoznak. A legfontosabbak ezek közül a következők:
- Elem változása
- megváltozik egy vezérlőelem értéke
- Elem állapota változott
- megváltozik egy vezérlőelem állapota
- Szöveg módosítva
- megváltozik egy vezérlőelem szövege
- Inicializáláskor
- a vezérlőelem indításakor végrehajtható esemény (például egy gomb megnyomása)
Az eseményekkel való munka során ügyeljünk arra, hogy néhány esemény, ilyen például az Inicializáláskor, indítása akkor történik, amikor bizonyos vezérlőelemen (például választókapcsolón) az egérrel kattintunk. Annak vizsgálata nem történik meg, hogy valójában változott-e a vezérlőelem állapota. Az ilyen „vakesemények” elkerülése érdekében mentsük a vezérlőelem régi értékét egy globális változóba, és az esemény megtörténte után ellenőrizzük, hogy változott-e az érték.
Az Inicializáláskor esemény a következők miatt is említésre méltó:
- Ezt az eseményt egy billentyű lenyomása vagy egy egérgomb lenyomása váltja ki. Ezáltal konzisztens felületet ad a felhasználóknak, akik egérrel vagy billentyűzettel navigálnak.
- Amikor egy parancsgomb Repeat tulajdonsága True értékre van állítva, ez az esemény az, amelyik folyamatosan küldésre kerül, amíg a kiváltó művelet (billentyű lenyomása vagy egérgomb lenyomása) tart.
Az Elem állapota változott esemény tulajdonságai a következők:
- Selected (hosszú egész szám)
- a jelenleg kijelölt bejegyzés
- Highlighted (hosszú egész szám)
- a jelenleg kiemelt bejegyzés
- ItemId (hosszú egész szám)
- a bejegyzés azonosítója
Content on this page is licensed under the Public Documentation License (PDL). |