Események

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


Az OpenOffice.org 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 OpenOffice.org 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 OpenOffice.org á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 OpenOffice.org 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 OpenOffice.org Basic fejlesztői környezete

Az előző ábrán az OpenOffice.org 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ő OpenOffice.org 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 OpenOffice.org 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

A Művelet hozzárendelése párbeszédablak az összes elérhető eseményt felsorolja. Makró hozzárendelés egy eseményhez:

  1. Jelöljük ki az eseményt
  2. Kattintsunk a Macro... gombra
  3. Keressük meg és jelöljük ki a makrót, amihez hozzá akarjuk rendelni
  4. 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 OpenOffice.org 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 OpenOffice.org 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 OpenOffice.org 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
Documentation note.png A VBA Click és Doubleclick eseménye az OpenOffice.org Basicben nem áll rendelkezésre. A Click esemény helyett használjuk az OpenOffice.org Basic MouseUp eseményét, míg a Doubleclick imitálására módosítsuk az alkalmazás logikáját.

Billentyűzetesemények

Az OpenOffice.org 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 OpenOffice.org 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 OpenOffice.org 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).
Personal tools