Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010
7. ELŐADÁS Több információ az alkalmazásban -Fülek az űrlapon - Több űrlapos alkalmazások 2
Több információ az alkalmazásban Ha alkalmazásunk már egy kicsit nagyobb, több információt kell benne megjelenítenünk. Ha az információ nem fér el egy űrlapon, akkor két lehetőségünk van: A logikailag összetartozó információkat egy űrlapon több oldalra helyezzük el. Mindig csak egy oldal látható, egy másikat a fülére való kattintással lehet megjeleníteni (TTabControl, TPageControl komponensek) Több űrlapos alkalmazást készítünk. A program indításakor megjelenik a főűrlap, innen lehet majd a többi ablakra eljutni. 3
A TTabControl (fülvezérlő) komponens - Helye: Win32 paletta Leírás, szerep: fülsor egy lappal. Akkor használjuk, ha a különböző füleken található információ szerkezete azonos, csak a tartalma változik. 4
A TTabControl (fülvezérlő) komponens - Tulajdonságok: Tabs: a komponens beágyazott fő tulajdonság-objektuma. Fejlesztési időben a fülkészlet (a Tabs[i] fülszövegek és a Tabs.Count fülszám) inicializálására, a listaelemek kezdőértékének megadására, a megszokott listaszerkesztőt használhatjuk TabIndex: a kiválasztott (aktív) fül sorszámát tárolja. A Tabs lista létrehozásakor, a TabIndex nulla lesz, azaz automatikusan az első fül lesz aktív. TabPosition: beállítható a fülsor megjelenési pozíciója: felső, alsó, bal és jobb fülsor. 5
A TTabControl (fülvezérlő) komponens - Tulajdonságok: MultiLine: ha értéke True, a fülek több sorba fognak elhelyezkedni, ha egy sorban nem férnek. Különben automatikusan egy UpDown léptető komponens jelenik meg a fülsor jobboldali végén és a nyílirányú léptetésekkel válnak hozzáférhetővé a fülek. MultiLine=false MultiLine=true 6
A TTabControl (fülvezérlő) komponens - Tulajdonságok: Style: a fülek helyén megjeleníthető gombok típusa. A tstabs az alapértelmezett érték. Style=tsButtons Style=tsFlatButtons 7
A TTabControl (fülvezérlő) komponens - Események: OnChange: fülváltáskor következik be. A TabIndex ilyenkor már az új fül indexét tartalmazza. OnChanging: fülváltás közben következik be. Az AllowChange paraméter False-ra állításával még meggátolható a váltás. Ebben a metódusban a TabIndex jellemző még a régi fül indexét tartalmazza. 8
A TTabControl (fülvezérlő) komponens - Példa: sdfsdfsdf 9
A TPageControl (lapvezérlő) komponens - Helye: Win32 paletta Leírás, szerep: fülsor több lappal. A lapokat az objektumon jobb gombbal kattintva és a New Page parancsot választva lehet létrehozni. A lapok önálló objektumokként jönnek létre TabSheet1, TabSheet2, stb. névvel. A lapok kiválasztása a megfelelő fülre (ilyenkor csak a PageControl objektum választódik ki) majd belül, a lapra való kattintással történik. Feliratukat, kiválasztás után, a Caption jellemzőben lehet beállítani. 10
A TPageControl (lapvezérlő) komponens - Tulajdonságok: Pages[i]: a komponens egyes lapjait a Pages tömb jellemzőn keresztül érhetjük el. Itt minden egyes elem egy TTabSheet típusú objektum, amely megfelel az egyes lapoknak. A számozás 0-tól kezdődik. PageCount: a lapok számát adja meg az-az a Pages tömb elemeinek számát ActivePage: az éppen látható, az-az aktív lapot lehet kiolvasni illetve beállítani. Típusa: TTabSheet. A MultiLine, Style, TabPosition tulajdonságok megegyeznek a TTabControl hasonló tulajdonságaival. 11
A TPageControl (lapvezérlő) komponens - Metódusok: SelectNextPage(GoForward: Boolean) : az aktuális laphoz képest tudunk előre vagy hátra felé lépni egy-egy lapot az eljárás segítségével. Paraméterként egy logikai értéket kell megadnunk, ha ez igaz, akkor az ActivePage jellemzőből kiolvasható aktuális lap utáni lapra lépünk, ha hamis, akkor ez elé. 12
A TPageControl (lapvezérlő) komponens - Metódusok: FindNextPage(CurPage: TTabSheet; GoForward, CheckTabVisible: Boolean): lehetőségünk van arra is, hogy egy adott laphoz képest keressük meg az előtte vagy utána következőt. Ekkor a FindNextPage függvényt kell segítségül hívnunk. Első paraméterében kell megadnunk azt a lapot TTabSheet típusban, amelyiktől kezdeni akarjuk a lépést. A második logikai típusú paraméterben a lépés irányát tudjuk szabályozni, úgy ahogyan a SelectNextPage eljárásnál is. A harmadik logikai típusú paraméterben, ha igaz értéket adunk, akkor azt is ellenőrizni fogja, hogy az adott lap látható-e, vagy sem. Események: OnChanging, OnChange: azonosak a TTabControl eseményjellemzőivel. 13
Alkalmazások űrlapjai - A TForm Szerepe: a felhasználói interfész megtervezését teszi lehetővé Jellemzők: Caption: az űrlap felirata BorderIcons: itt állítható be, hogy az űrlapnak legyen-e rendszermenüje, minimalizáló, maximalizáló és sugó gombja. BorderStyle: az űrlap keretét állíthatjuk be (méretezhető - bssizeable, nem méretezhető bsdialog, stb.) 14
Alkalmazások űrlapjai - A TForm Jellemzők: ClientWidth, ClientHeight: az űrlap hasznos felületének a mérete 15
Alkalmazások űrlapjai - A TForm Jellemzők: Position: az űrlap futáskori megjelenésének pozícióját szabályozza (ahol tervezési időben elhelyeztük - podesigned, képernyő közepén poscreencenter, stb.) WindowState: az űrlap futáskori megjelenítésének módja: minimalizálva - wsminimized, maximalizálva - wsmaximized, amekkorára terveztük wsnormal. 16
Alkalmazások űrlapjai - A TForm Jellemzők: ModalResult: egy űrlap bezárása után ezzel a jellemzővel kérdezhetjük le a bezárás okát, azaz, hogy az Ok, a Cancel vagy más gombbal zártuk-e be. E jellemző értéke az űrlap bezárását okozó gomb ModalResult jellemzőjéből származik. FormStyle: az űrlap stílusát lehet itt beállítani. Alapértelmezett értéke fsnormal. MDI típusú alkalmazások esetén az fsmdiform és fsmdichild stílusokat kell használni. 17
Alkalmazások űrlapjai - A TForm Metódusok: Show: eljárás, amely megjeleníti az ablakot. ShowModal: függvény, amely megjeleníti modálisan az ablakot, majd vár amíg ezt bezárjuk Close: bezárja az űrlapot. Ha ez a fő űrlap volt, bezárja az alkalmazást is. 18
Alkalmazások űrlapjai - A TForm Események: OnCreate: az űrlap létrehozásakor hívódik meg. Általában inicializálásra használjuk OnShow: az űrlap megjelenítésekor következik be. OnCloseQuery: az űrlap bezárása előtt következik be. Ebben még megállítható a bezárás. OnClose: az űrlap bezárásakor következik be. Itt beálítható a bezárás módja. 19
Alkalmazások űrlapjai - A TForm Egér és billentyűzet események: OnMouseDown, OnMouseUp, OnMouseMove: az űrlap létrehozásakor hívódik meg. Ezek akkor következnek be, amikor a felhasználó lenyomja az egérgombot, felengedi az egérgombot, illetve mozgatja az egérkurzort. A három esemény eljárásainak paraméterei hasonlóak. Sender: azt a komponenst jelöli, amelyen bekövetkezett az esemény. 20
Alkalmazások űrlapjai - A TForm Button: megadja, hogy melyik egérgomb volt lenyomva. Lehetséges értékei: mbleft (bal egérgomb), mbright (jobb egérgomb), mbmiddle (középső egérgomb) Shift: megadja bizonyos gombok állapotát az esemény bekövetkezésekor. Továbbá az egér saját gombjainak azállapotát is jelzi. Lehetséges értékei: ssshift (Shift billentyű le volt nyomva), ssalt (Alt billentyű), ssctrl (Ctrl billentyű), ssleft (balegérgomb), ssright (jobb egérgomb), ssmiddle (középső egérgomb), ssdouble (duplakattintás következett be). Az X, Y paraméterek az egérkurzor koordinátáit adják meg azon a komponensen belül, amelyen az esemény bekövetkezett 21
Alkalmazások űrlapjai - A TForm Példa: egérkattintásnál a form-ra (ablakra) kiírja, melyik egérgombbal történt a kattintás Példa: kiírjuk az ablak azon pontjának koordinátáit, ahová az egérrel kattintottunk 22
Alkalmazások űrlapjai - A TForm Billentyűzet események: OnKeyPress, OnKeyDown, OnKeyUp. Az OnKeyPress a billentyű megnyomásakor következik be. Az esemény kezelésében rendelkezésünkre áll a Key paraméter, amely Char típusú és a lenyomott billentyű ASCII kódját tartalmazza. Azok a billentyűk, amelyeknek nincs ASCII kódjuk (pl. Shift, Ctrl, F1, ) nem generálnak OnKeyPress eseményt. Az ilyen billentyűket az OnKeyDown eseménnyel kell le kezelni. Az esemény kezelésének eljárásában van Key paraméter, amely a lenyomott billentyű kódját tartalmazza. Ez itt egy virtuális billentyűkód, pl. VK_Control (Ctrl), VK_Back (Backspace), stb. Továbbá használhatjuk az eljárás Shift paraméterét is, amely megadja, hogy a Shift, Ctrl, Alt gombok közül melyik választógomb volt lenyomva az esemény bekövetkezésekor. 23
Alkalmazások űrlapjai - A TForm Példa: a szövegmező csak számjegy karaktereket fogad el Példa: ha a bal nyíl gombot lenyomtuk kiírunk egy üzenetet. 24
Alkalmazások űrlapjai Az űrlapok létrehozását tekintve, két típusról beszélhetünk: auto-create típusú űrlap: a program indításának pillanatában létrejön, és ettől kezdve megszűnéséig a memóriába marad. A létrehozást és a megszűntetést teljesen a rendszer felügyeli, azaz a felhasználónak nincsen beleszólása. Leggyakrabban ilyen típusú űrlapokat használunk. dinamikus űrlap: nekünk kell kódból létrehoznunk, megjelenítenünk. A ritkán használt űrlapokat ajánlatos dinamikusan létrehozni Megjegyzés: egy alkalmazásban alapértelmezetten egy űrlap található. Új űrlapot a File/New/Form menüpont alatt lehet 25
Alkalmazások űrlapjai A Project/Options párbeszédablak Forms fülén állíthatjuk be azt, hogy az alkalmazás összes űrlapja közül melyik legyen főűrlap, melyek legyen automatikusan létrehozva és melyik dinamikusan. Az alábbi ábrán a Form1 űrlap automatikusan van létrehozva, ami egyben főűrlap is. A Form1 és Form2 űrlapokat dinamikusan lehet létrehozni. 26
Az ablakok megjelenítési formái Az alkalmazásunkban az űrlapokat két féle módon jeleníthetjük meg: nem modálisan (Modeless) modálisan (Modal) 27
Nem modális (Modeless) űrlapok Az ilyen űrlapok előnye, hogy az alkalmazás többi ablakával is tudunk dolgozni anélkül, hogy a megjelenített űrlapot bezárnánk. A Delphi keretrendszerben ilyen például az objektumfelügyelő ablak, a kódszerkesztő ablak. A nem modális űrlapok megjelenítéséhez az űrlap Show metódusát használjuk. Ez a metódus csupán megjeleníti és előtérbe helyezi az űrlapot, nincsen visszatérítési értéke. 28
Nem modális (Modeless) űrlapok Példa: 29
Modális (Modal) űrlapok Legfontosabb tulajdonsága: megjelenésük idejére az alkalmazás többi ablaka nem elérhető. Ha egy űrlap modális, arról könnyedén meggyőződhetünk, úgy hogy az űrlap mellé kattintunk. Ezt egy rövid figyelmeztető sípszó fogja jelezni. Példa: ilyen típusú ablakok az üzenetablakok, speciális párbeszédablakok (fájl megnyitás, mentés) 30
Modális (Modal) űrlapok A modális űrlapok megjelenítéséhez az űrlap ShowModal metódusát használjuk Ez egy függvény, amelynek visszatérési értéke az űrlapon lévő nyomógombok ModalResult tulajdonságától függ Ennek a technikának nagy előnye, hogy egyszerűbbé teheti a kódot, mivel a visszatérési érték egyértelműen azonosíthatja a gombot (ha a ModalResult tulajdonság megfelelően be van állítva). 31
Modális (Modal) űrlapok A Show és ShowModal utasítások közti lényeges különbséget az alábbi ábrán szemléltetjük. A Show metódus megjeleníti az űrlapot és rögtön utána végrehajtja az U1 utasítást. A ShowModal is megjeleníti az űrlapot, de utána vár ennek bezárásáig, így az U2 utasítás csak az ablak eltűnése után fog lefutni. 32
Modális (Modal) űrlapok Példa: a Form1 nevű űrlapon található gomb segítségével egy Form2 nevű űrlapot jelenítünk meg modálisan. 33
Modális (Modal) űrlapok Példa (folytatás): Ha feltételezzük, hogy a Form2 űrlapon található gomb ModalResult tulajdonsága a mrok-ra van állítva akkor erre a gombra kattintva a szűlőűrlap ugyanilyen nevű paramétere automatikusan megkapja a gombnál beállított értéket és bezáródik. Ennek a technikának az az előnye, hogy erre a gombra nem kell OnClick eseményt írni. 34
Modális (Modal) űrlapok Példa: 35
Modális (Modal) űrlapok Példa: űrlapok dinamikus létrehozása és megjelenítése. 36