Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010
8. ELŐADÁS Üzenetablakok, dialógusablakok MDI alkalmazások 2
Üzenetablakok Windows-os alkalmazásokban nagyon gyakran használt technika, hogy probléma esetén a program a felhasználót értesíti egy megfelelő üzenetablak segítségével Az üzenetablakok különböző típusaival figyelmeztetések, hibajelzések jeleníthetők meg, esetleg a kényesebb műveletek végrehajtására vonatkozó engedélyező vagy tiltó kérdéseket tehetünk fel. Az üzenetablakban található különböző nyomógombok választási lehetőséget kínálnak a felhasználó számára Valamennyi üzenetablak modális megjelenítésű 3
Üzenetablakok Funkcionálisan három csoportba sorolhatók: Nyugtázó ablakok (ShowMessage) - ablakhívó eljárások, hatásukra szimpla üzenetablak jelenik meg a képernyőn, amelyben nincs választási lehetőség. A nyugtázó ablakok az üzenet szövege alatt egy OK nyomógombot tartalmaznak. Választó ablakok (MessageDlg, MessageDlgPos) - ablakfüggvények, az-az van visszatérési értékük. Általában több gombot tartalmaznak és visszaadják a lenyomott gomb ModalResult értékét. Adatkérő ablakok (InputBox, InputQuery) függvények, amelyek segítségével egy ablakot jeleníthetünk meg, amely szerkesztőmezőt és gombokat tartalmazhat. 4
Üzenetablakok - ShowMessage A ShowMessage eljárás: egy OK nyomógombbal ellátott olyan üzenetablakot jelenít meg a képernyő közepén, amelynek a fejlécében az alkalmazás neve szerepel, míg a nyomógomb felett jelenik meg az üzenet szövege. Figyelmeztetésre, hibajelzésre használható. Az üzenetablak az űrlap helyzetétől függetlenül, rendre a képernyő közepén jelenik meg. Szintaxisa: procedure ShowMessage( const Msg : string ) ; Msg - Az üzenet szövege. Hossza nem korlátozott, ha a karakterek közé sorvégjelet (#13#10) is teszünk, több sorba is íratható. A megjelenő ablak szélességét a leghosszabb sor hossza, míg a magasságát a sorok száma határozza meg. 5
Üzenetablakok - ShowMessage Ha numerikus adatokat kívánunk kiírni, akkor az ismert konverziós függvényekkel kell összeállítani a stringet ( IntToStr, FloatToStr)! Példa: 6
Üzenetablakok - ShowMessageFmt ShowMessage egy praktikusabb változata, üzenetszövegként egy formátumozott szöveget lehet megjeleníteni. Olyan esetekben használjuk, amikor az üzenetben nem karakteres adatot (numerikus, idő, dátum) kívánunk elhelyezni. Szintaxis: procedure ShowMessageFmt ( const Msg : string ;Params : array of const ); Msg - Formátumvezérlő string. Az Msg formátumvezérlő sztringben, % jellel kezdődő formátumvezérlő kódokat helyezhetünk el, melyek meghatározzák a listabeli párjuknak a konverzió típusát Params - Paraméterlista szögletes zárójelben. 7
Üzenetablakok - ShowMessageFmt Példa: 8
Üzenetablakok - MessageDlg A MessageDlg függvény: ez egy több választási lehetőséget (több nyomógombot) is tartalmazó modális üzenetablak, amely ugyancsak a képernyő közepén, az űrlaptól független módon jelenik meg. A MessageDlg tulajdonképpen egy Word típusú függvény, amely mindig a felhasználó által választott gomb értékét adja vissza, amellyel az ablakot bezárta. Szintaxisa: function MessageDlg (const Msg:string; DlgType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word; Msg a szöveg, amit meg szeretnénk jeleníteni (lehet több soros is) 9
Üzenetablakok - MessageDlg DlgType: a lehetséges ablakfajták típusát jelenti: mtwarning: figyelmeztetést jelző sárga-fekete ikon mterror: hibát jelző piros stoptábla mtinformation: információt jelző kék i betű mtconfirmation: kérdést jelző kék kérdőjel mtcustom: az üzenetablakon nem lesz kép Confirm, Error és Warning típusú ablakok 10
Üzenetablakok - MessageDlg Programozási technikák - Pál László AButtons: az ablakra kerülő gombok halmazát jelenti. Mivel halmaz típusról van szó, ezért a szükséges gombokat, egymástól vesszővel elválasztva szögletes zárójelben kell felsorolni. A lehetséges értékek: mbyes, mbno, mbok, mbcancel, mbabort, mbretry, mbignore, mball, mbnotoall, mbyestoall, mbhelp.. A MessageDlg lehetséges gombjai 11
Üzenetablakok - MessageDlg Programozási technikák - Pál László HelpCtx: a súgó azon témájának azonosítója, amely akkor jelenik meg, ha megnyomjuk az F1 billentyűt. Ha ezt nem akarjuk használni, adjunk 0 értéket. Megjegyzés: a MessageDlg visszaadja annak a nyomógombnak az értékét, amellyel a felhasználó bezárta az üzenetablakot. Lehetséges értékek: mrnone, mrabort, mryes, mrok, mrretry, mrno, mrcancel, mrignore, mrall. 12
Üzenetablakok - MessageDlg Programozási technikák - Pál László Példa: nagyon sok alkalmazás bezárásakor megerősítést kér. Delphiben ezt az űrlap OnCloseQuery eseményében tehetjük meg az alábbi módon: Ha a felhasználó a No gombot választja, akkor a függvény visszatérési értéke mrno, így az űrlap bezárását meg lehet akadályozni. 13
Üzenetablakok - MessageDlgPos A MessageDlg függvény egy javított változata, amelyben a felhasználónak van lehetősége a dialógusablak pozíciójának a megadására. A függvény paraméterezése megegyezik az előző függvény paraméterezésével, kiegészítve a pozíció megadásának lehetőségével Szintaxisa: function MessageDlgPos(const Msg:string; DlgType: TMsgDlgType; AButtons: TMsgDlgButtons;HelpCtx: Longint; X, Y: Integer): Word; X, Y: az ablak bal felső csúcsának koordinátái pixelben megadva 14
Üzenetablakok - InputBox Egysoros adatok beolvasására alkalmas ablak. Szintaxisa: function InputBox (const ACaption, APrompt, ADefault: string): string; A függvény paramétereinek jelentése: ACaption: a dialógusablak felirata. APrompt: a dialógusablakban megjelenő szöveg. ADefault: a beviteli mezőben megjelenő kezdeti szöveg 15
Üzenetablakok - InputBox Az ablak tartalmazni fog egy OK és egy Cancel gombot is. Ha az OK gombra kattintunk, akkor a függvény értéke a szövegmezőben levő szöveg lesz, ha pedig a Cancel gombra kattintunk vagy bezárjuk az ablakot, akkor a visszatérített érték a harmadik paraméter értéke lesz. Példa: jelszókérő ablak megjelenítése 16
Dialógusablakok Egy összetett alkalmazásban általában szükség van különböző állományok megnyitására, elmentésére, nyomtató beállítására. A Delphi lehetőséget ad ezeknek a műveleteknek az elvégzésére párbeszédablakok segítségével. A különböző dialógusablakok megjelenítésére használt komponensek a Dialogs nevű palettán találhatók és mindegyik a Windowsból jól ismert szabványos párbeszédablakot jelenít meg. Több közös vonás is van a dialógusablakok között. Itt kiemelnénk, hogy kettő kivételével mindegyik modális ablak és valamennyi az Execute utasítás segítségével hívódik meg. 17
OpenDialog és SaveDialog Állományok tallózására és kiválasztására valamint állományok lementési helyének és nevének megadására alkalmas ablakok. A két komponens tulajdonságai gyakorlatilag megegyeznek. Fontosabb tulajdonságok: DefaultExt: alapértelmezett állomány kiterjesztés, amely abban az esetben csatolódik az állomány nevéhez, ha a felhasználó azt nem adja meg FileName: a kiválasztott állomány teljes nevét tartalmazza Filter: az állományok szűrése oldható meg a segítségével (megadott maszk alapján, pl. *.txt, *.doc, stb.). A program tervezési fázisában ez a tulajdonság a Filter Editor segítségével adható meg 18
OpenDialog és SaveDialog A szűrő megadása: az Open-ablak csak a txt illetve az avi kiterjesztésű fájlokat fogja látni FilterIndex: az aktuális szűrő sorszáma InitialDir: kezdeti könyvtár Options: a dialógusablak különböző beállítási lehetőségeit tartalmazza. Nézzünk egy párat ezek közül: ofoverwriteprompt: létező fájl felülírása esetén figyelmeztet ofhidereadonly: nem jelenik meg a megnyitás csak olvasásra lehetőség a dialógusablakon 19
OpenDialog és SaveDialog Legfontosabb metódus az Execute, amellyel a dialógusablakot megjelentetjük Az OpenDialog párbeszédablak 20
FontDialog A szövegtulajdonságok beállítására alkalmas ablak, amellyel már az MsOffice csomag keretén belül találkozhattunk. Fontosabb tulajdonságok: Font: a kiválasztott tulajdonságok együttese MinFontSize, MaxFontSize: a betűméret nagyságát korlátozhatjuk segítségükkel Példa: az alábbi példában az Edit1 szövegmező szövegének a jellemzői felveszik a Font-ablakban kiválasztott jellemzőket 21
ColorDialog A színkiválasztó ablak megjelenítését teszi lehetővé. Legfontosabb tulajdonsága a Color, ahol a egy konkrét szint lehet kiválasztani. 22
FindDialog, ReplaceDialog Programozási technikák - Pál László Olyan dialógus ablakok, amelyekben megadhatjuk a keresendő szót, viszont a keresést nekünk kell megoldani Az előző ablakoktól eltérően ezek nem modális ablakok, azaz a felhasználónak nem kell bezárnia, ahhoz hogy más tevékenységet is folytasson. Mindkét komponens rendelkezik a FindText tulajdonsággal. Itt lehet megadni a keresendő szöveget, ami meg fog jelenni a dialógusablakban. A RepleaceDialog objektum pluszban rendelkezik egy RepleaceText tulajdonsággal is. Az itt megadott szöveg fogja majd helyettesíteni a FindText-ben található szöveget. 23
FindDialog, ReplaceDialog Programozási technikák - Pál László Az Options tulajdonság fontosabb beállítási lehetőségei: frdown: keresés iránya, True értéke azt jelenti, hogy lefele történik a keresés, ami egyben az alapértelmezett irány frmatchcase: nagy és kisbetűk közötti különbséget lehet itt bekapcsolni Az eseményeknél ki lehet emelni az OnFind eseményt, amely akkor következik be, ha a felhasználó a Find Next nyomógombra kattintott. A ReplaceDialog még rendelkezik egy OnReplace eseménnyel is, amely a Replace nyomógomb megnyomásakor következik be A Find dialógusablak 24
MDI alkalmazások MDI (Multiple Document Interface) alkalmazás: egyetlen alkalmazás felügyelete alatt, egyszerre több ablakban jeleníthetünk meg adatokat, grafikát, és azokkal párhuzamosan dolgozunk (pld. Word, Excel) MDI alkalmazás részei: Egy főablak (keretablak, fsmdiform): van címsora, menüje, eszközsora, állapotsora Tetszőleges számú gyerekablak (fsmdichild): van címsoruk, rendszermenüjük. Nincs saját menüjük. A főablak és gyerekablak beállítást az űrlap FormStyle tulajdonságánál tehetjük meg 25
MDI alkalmazások Szabályok: A keretablak az applikáció főablaka; automatikus létrehozású A gyerekablak nem automatikus, futáskor hozunk létre egy vagy több példányt Mindig csak egy gyerekablak lehet aktív A gyerekablakok a keretablak munkaterületén belül helyezkednek el A keretablak bezárása maga után vonja a gyerekablakok bezárását is 26
MDI alkalmazások Űrlap tulajdonságok MDI keretablak esetén: MDIChildCount: megnyitott gyerekablakok száma MDIChildren[i: integer]:tform: a gyerekablakok listája ActiveMDIChild: az aktuális (fokuszban lévő) gyerekablakot lehet lekérdezni Metódusok: Next: aktivizálja a következő gyerekablakot Tile: minden gyerekablak egyforma és kitöltik a szülő keret felületét Cascade: a gyerekablakok egymást takarják 27
MDI alkalmazások - Példa Programozási technikák - Pál László Beállítjuk a keret- és a gyerekablak stílusát (fsmdiform, fsmdichild) a FormStyle tulajdonságnál. A keretablak marad AutoCreate-nek; ő az alkalmazás főablaka is. A gyerekablak nem AutoCreate, hanem dinamikusan hozzuk létre 28
MDI alkalmazások - Példa Programozási technikák - Pál László 29