Hirdetés

Alkalmazásfejlesztés badára: Felugró ablakok 2.

Bevezető

A legutolsó programozással foglalkozó bejegyzésben a MessageBox-okkal foglalkoztunk, azonban az már abban a posztban is kiderült, hogy ezek komoly hiányosságokkal rendelkeznek a testreszabhatóság terén. A másik probléma a beírható szöveg mérete, a Messagebox  ugyanis rendelkezik egy felső korláttal: 128 karakternél hosszabb címmel futási idő alatti hibát produkál. Amúgy ez a mennyiség is túl sok, kb 50 karakter felett három pont jelzi a cím mögött, hogy lenne itt még olvasnivaló, csak nem fér ki. Persze a doboz törzsében nincs ilyen probléma, ott egyben  látható a néhány száz karakteres limitbe belepasszoló mennyiség.

PopUp

A PopUp osztályt az Osp::Ui::Controls::PopUp névtérből vadászhatjuk elő, használhatjuk egyenesen a kódból, vagy akár a UI builder segítségével is összerakhatunk magunknak egyet. Nyilván utóbbi az egyszerűbb, és ha nincs semmi különleges kívánságunk a felugró ablakkal kapcsolatban, egy működő módszer lehet innen összerakosgatni az ablakot, lévén az alsó, Properties névre hallgató nézeten keresztül is testreszabhatjuk a vezérlőket, és könnyebb úgy pozícionálni és méretezni a controlokat, ha egyből látjuk a végeredményt.

Maga a PopUp igazán csak egy Form, amelyet kedvünk szerint rejthetünk el és jeleníthetünk meg, valamint telepakolhatjukk a számunkra szükséges vezérlőkkel, így nem csak a MessageBox-nál megszokott szöveg és gombok kombinációját kapjuk, hanem szabadon használhatjuk az Osp::Ui::Controls névtér elemeit.

A kód

Mint már elmítettem, a PopUp felépítése megoldható kódból is és az SDK grafikus szerkesztőjén keresztül is. Ehhez a File->New->bada Resource Files menüpontot kell kiválasztatnunk, majd a megfelelő felbontás beállítása után egyenesen a UI builderbe kerülünk. A kódon keresztüli paraméterezés sem sokkal bonyolultabb, a PopUp-ot a badában már szokásos kétfázisú konstruktorral látták el. Azaz a new()-híváson keresztüli követően muszáj hívnunk egy Construct()-ot is, ugyanis előbbi csak a minimális inicializálást végzi el, utóbbi pedig a testreszabásra és a tényleges felépítésre szolgál.

A Construct() metódus két paramétert vár, egyik a cím megjelenítését, a másik pedig az ablak méretét befolyásolja. Utóbbi egy Osp::Graphics::Dimension típus, ami kvázi egy téglalapot határoz meg a megadott oldalhosszakkal, erre van alsó (és természetesen felső) korlát is: WVGA (a badát futtató készülékekből egyelőre egyedül a Samsung Wave-ben található) kijelzőn a minimum a 388 x 130 képpontos méret, WQVGA (az összes többi, jelenleg piacon lévő Samsung Wave készülékben ilyen található) képernyő esetén pedig minimum 194 x 65 pixeles területet kell beállítanunk, a maximum méretet pedig természetesen a kijelző fizikai felbontása befolyásolja.

A címet a SetTitleText() függvény segítségével állíthatjuk be, a vezérlőket pedig ugyanúgy hajigálhatjuk fel, mint a fő form esetében. Azaz az algoritmus a szokásos: példányosítás, construct, egyéb paraméterek és viselkedés beállítása, majd az AddControl() függvény meghívása, csak jelen esetben a PopUp osztályunkból.

A PopUp rendelkezik egy ShowState nevű boolean változóval, ami beszédes nevet kapott, a felugró ablak láthatóságát jelzi. Megjelenítéshez ezt kell igazra állítanunk, majd meghívni a Show() függvényét, így fel is ugrik az imént összepakolt kis ablakocska. Az elrejtés hasonló módszerrel történik: először a ShowState-et hamisra kapcsoljuk, majd meghívjuk az alap form (a példaprogramban a MainForm) RequestRedraw() függvényét, így ismét egy popup-mentes felületet kapunk.

A példakód elérhető az svn-ből (http://mobilarenabadadev.googlecode.com/svn/trunk/), a nagyon egyszerű alkalmazás a felugró ablakok használatát hívatott illusztrálni, a projekt a hangzatos PopUp névre hallgat.

dr. Kind

Azóta történt

Előzmények