Negyedik Genercis Nyelvek Delphi 1 Tbbablakos applikcik TForm
Negyedik Generációs Nyelvek ( Delphi ) 1. Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése 3. Drag & Drop technika
1. TÖBBABLAKOS APPLIKÁCIÓK
Tab. Control Fülsor egy lappal Page. Control Fülsor több lappal Animate Animáció Date. Time. Picker Dátumkezelő Status. Bar Állapotsor Tool. Bar Eszközsor Delphi III / 2
Többablakos applikációk • Egy ablakban több oldalra helyezett info. (ld. TPage. Control, TPage. Control TTab. Control komponensek) • Több egymással kommunikáló ablak Delphi III / 3
Többablakos applikációk TTab. Control • Szerepe: 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. • Jellemzői: • Tabs: Tabs TStrings: a fülek feiratát tartalmazza külön sorokban • Tab. Index: Tab. Index az aktuális fül indexe (az első indexe 0) • Tab. Position: Tab. Position tp. Top, tp. Bottom, a fülek pozíciója Delphi III / 4
Többablakos applikációk TTab. Control • Fontos eseményei • On. Change: On. Change fülváltáskor következik be. A Tab. Index ilyenkor az új fül indexét tartalmazza. • On. Changing: On. Changing fülváltás közben következik be Delphi III / 5
Többablakos applikációk TPage. Control l Szerepe: fülsor több lappal. Minden fülhöz tartozik egy lap. l Fontosabb jellemzői: • Active. Page: Active. Page az aktuális lap Új lap: gyorsmenü, New Page, felirat a Caption jellemzőbe • Tab. Position: Tab. Position tp. Top, tp. Bottom, a fülek pozíciója Delphi III / 6
Többablakos applikációk TPage. Control l Fontos eseményei • On. Change: fülváltáskor következik be. A Tab. Index ilyenkor az új fül indexét tartalmazza. • On. Changing: fülváltás közben következik be Delphi III / 7
Többablakos applikációk l Egy applikáció tartalmazhat: • Egyszerű adatbeviteli és üzenetablakokat • Windows által felkínált párbeszédablakokat ( TOpen. Dialog, TPrinter. Setup. Dialog, . . . ) • Előzőleg megtervezett és mintaként (template) elmentett formokat • Saját tervezésű ablakokat ( a TForm osztály felhasználásával egy új formosztály létrehozása) Delphi III / 8
Többablakos applikációk l Ezek közül: • egyesek automatikusan létrejönnek (autocreate), mások nem • egy főablak (main form) van, és ennek automatikusan kell létrejönnie l Ablakok megjelenítési formái: • Modális (tipikus párbeszédablakok) • Nem modális (Modeless) Delphi III / 9
Egyszerű adatbeviteli és üzenetablakok Ezek az ablakok modálisan jelennek meg l Show. Message procedure Show. Message(const Msg: Wide. String); A lehető legegyszerűbb üzenetablak szöveggel, és egy OK gombbal. Az ablak címsorában az alkalmazásunk projektállományának neve található. Az ablak a képernyő közepén jelenik meg. Delphi III / 10
Egyszerű adatbeviteli és üzenetablakok Egyszerű üzenetablakok l Procedure Show. Message(Szöveg: String); Pl. : Show. Message ('Bármilyen üzenet'); Projekt neve Delphi III / 11
Egyszerű adatbeviteli és üzenetablakok Ezek az ablakok modálisan jelennek meg l Inputbox function Input. Box(const ACaption, APrompt, ADefault: Wide. String ): Wide. String; Beviteli ablak, a bekért adat típusa string, double, vagy integer. Delphi III / 12
Egyszerű adatbevitel l Function Input. Box(Cím, KérőSzöveg, Alapérték: String): String; program Peldapr; uses Forms, Dialogs, Koszon in 'KOSZON. PAS' {Pelda}; {$R *. RES} begin If Inputbox('Bejelentkezési ablak', 'Gépelje be a jelszót', '')= 'A jelszó' then begin Application. Create. Form(TPelda, Pelda); Delphi III / 13 Application. Run; . . .
Egyszerű adatbeviteli és üzenetablakok Ezek az ablakok modálisan jelennek meg l Message. Dlg function Message. Dlg(const Msg: string; Dlg. Type: TMsg. Dlg. Type; Buttons: TMsg. Dlg. Buttons; Help. Ctx: Longint): Word; Beviteli ablak, a bekért adat típusa string, double, vagy integer. Delphi III / 14
Többablakos applikációk Egyszerű üzenetablakok l Function Message. Dlg( Szöveg: String; Típus: TMsg. Dlg. Type; Gombok: TMsg. Buttons; Súgóidx: Long. Int): Longint; Pl. Message. Dlg('Kívánja menteni a változásokat? ', mt. Confirmation, [mb. No, mb. Ok, mb. Cancel], 0); Delphi III / 15
Többablakos applikációk Applikációk típusai • CRT applikáció = DOS - os applikáció fehér ablakban • SDI (Single Document Interface) Egy ablakos Windows applikáció Van: menüje, eszközsora, állapotsora, . . • MDI (Multiple Document Interface) Egyetlen alkalmazás felügyelete alatt, egyszerre több ablakban jeleníthetünk meg adatokat, grafikát, és azokkal párhuzamosan dolgozunk (pl. Win. Word, Filekezelő, . . . ) Delphi III / 16
Többablakos applikációk Az MDI applikáció részei: • Egy főablak (keretablak, MDIFrame) Van: címsora, menüje, eszközsora, állapotsora • Akárhány gyerekablak (MDIChild) Ezekben jelenítjük meg az adatokat Van: címsoruk, rendszermenüjük Nincs: saját menüjük Delphi III / 17
Többablakos applikációk 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 Delphi III / 18
Többablakos applikációk TForm komponens • A felhasználói interfész megtervezését teszi lehetővé • Tartalmazza az összes "rácipelt" komponenst • Fontosabb jellemzői: • Caption: String (címsorban jelenik meg) • Border. Icons: Set of TBorder. Icon pl. [bi. System. Menu, bi. Minimize, bi. Maximize] • Border. Style: bs. Dialog, bs. Sizeable, . . . • Auto. Scroll: Boolean Delphi III / 19
Többablakos applikációk TForm komponens • • Horz. Scroll. Bar, Vert. Scroll. Bar: TControl. Scroll. Bar Client. Width, Client. Heigth: Integer Position: po. Designed, po. Screen. Center Icon: TIcon (ikonja minimizált állapotban; ha nincs megadva az applikációét használja) • Show. Hint: Boolean (buboréksugót jelenítsen-e meg, vagy sem? ) • Window. State: ws. Normal, ws. Maximized, ws. Minimized Delphi III / 20
Többablakos applikációk TForm komponens • Menu: TMain. Menu (főmenüje) • Modal. Result: Modal. Result mr. Ok, mr. Cancel, . . . (bezárása után jelzi bezárásának okát) • Key. Preview: Key. Preview Boolean ( = True a billentyűzet üzeneteket előbb ő kapja, és csak utána a fókuszban levő komponens. (ld. számológép gombjainak lenyomása billentyűzetről) • Form. Style: Form. Style TForm. Style fs. Normal, fs. MDIForm, fs. MDIChild, fs. Stay. On. Top Delphi III / 21
Többablakos applikációk TForm komponens MDI keretablak esetén: FMDIChild. Count: MDIChild. Count Integer (megnyitott gyerekablakok száma) FMDIChildren [ I: Integer]: TForm FActive. MDIChild: Active. MDIChild TForm FWindow. Menu: Window. Menu TMenu. Item (melyik menüpont alján jelenjen meg a nyitott gyerekablakok listája) Delphi III / 22
Többablakos applikációk TForm komponens l Fontosabb metódusai: • procedure Show • function Show. Modal: Show. Modal Integer (modálisan jeleníti meg az ablakot, majd bezárása után visszaadja a kilépés okát) • Print (kinyomtatja az ablakot) • Close. Query: Close. Query Boolean Delphi III / 23
Többablakos applikációk TForm komponens • MDI keretablak esetén: FNext (aktivizálja a köv. gyerekablakot) FTile FCascade gyerekablakok rendezése FArrange. Icons Delphi III / 24
Többablakos applikációk TForm komponens l Fontosabb eseményei: • On. Create (életrekeltése) • On. Show (megjelenítése) • On. Activate (aktivizálása) • On. Paint (újrarajzolása) • On. Deactivate (fókusz elvesztése) • On. Close (bezárás) • On. Close. Query (bezárás előtt) • On. Destroy (megszüntetés) Delphi III / 25
Több ablak együttműködése egy applikációban l SDI alkalmazásokban Main. Form frm. Harmadik Delphi III / 26
Többablakos applikációk Több ablak együttműködése egy applikációban • Ha egy űrlapról (Main. Form) meg szeretnénk jeleníteni egy másik űrlapot (frm. Harmadik), akkor: F a láthatóságot biztosítanunk kell (uses u. Harmadik) Fmegjelenítjük: Modálisan Nem modálisan frm. Harmadik. Show. Modal frm. Harmadik. Show Delphi III / 27
unit Umain; interface uses Sys. Utils, . . . type Tfrm. Main=class(TForm). . . end; Var frm. Main: Tfrm. Main; implementation Uses u. About; procedure Tfrm. Main. Aboutmenu. Click (Sender: TObject); begin frm. About. Show. Modal; end; unit Uabout; interface uses Win. Types, . . . type Tfrm. About = class(TForm). . . end; var frm. About: Tfrm. About; implementation. . . end. Delphi III / 28
Többablakos applikációk Több ablak együttműködése egy applikációban l MDI alkalmazásokban • Beállítjuk a keret- és gyerekablak típusát: FKeret. Ablak. Form. Style: = fs. MDIform ; FGyerek. Ablak. Form. Style: = fs. MDIChild ; • A keretablak marad Auto. Create-nek; ő az Auto. Create alkalmazás főablaka is. • A gyerekablak nem Auto. Create • A keretablakból hozzuk létre a gyerekablakokat (pl. New. Menu. Click) Delphi III / 29
Többablakos applikációk MDI alkalmazás Keret. Ablak Gyerek. Ablak Delphi III / 30
uses Sys. Utils, . . . u. Gyerek; type Tfrm. Keret=class(TForm) unit u. Gyerek; Gyerek. Ablak interface. . . (nem Autocreate, uses end; példányait Win. Types, . . . var dinamikusan type frm. Keret: Tfrm. Keret; hozzuk létre) Tfrm. Gyerek = implementation class(TForm) procedure. . . Tfrm. Keret. Newmenu. Click end; (Sender: TObject); Var var Gyerek: Tfrm. Gyerek; frm. Gyerek: Tfrm. Gyerek; begin implementation Gyerek: = Tfrm. Gyerek. uses u. MDIKeret; Create (Application); Delphi Gyerek. Show; III / 31 Keret. Ablak (marad Autocreate) end;
Létező párbeszédablakok használata (Dialogs komponenspaletta) TComponent TCommon. Dialog TColor. Dialog TFind. Dialog TFont. Dialog TOpen. Dialog TSave. Dialog TPrinter. Setup. Dialog TPrint. Dialog Delphi III / 32
Dialógusablakok l Open. Dialog Megnyitás dialógusablak, felhasználható a fájlnév, valamint az elérési útvonal l Save. Dialog Mentés dialógusablak, felhasználható a fájlnév, valamint az elérési útvonal l Open. Picture. Dialog Megnyitás dialógusablak grafikus fájlok eléréséhez, az ablakban látható a grafikus fájl képe l Save. Picture. Dialog Mentés dialógusablak grafikus fájlok eléréséhez, az ablakban látható a grafikus fájl képe Delphi III / 33
Dialógusablakok l Font. Dialog l Print. Dialog Nyomtatás dialógusablak, a Font dialógusablak, használható többek között a font mérete, színe, típusa l Color. Dialog Színek beállítását segítő ablak nyomtatás jellemzőit használhatjuk(pl. nyomtatási oldalak, nyomtatás példányszáma) l Printer. Setup. Dialog Nyomtató beállítóablak, a feltelepített nyomtatók tulajdonságait érhetjük el (elérhető a Print. Dialog ablakból is) Delphi III / 34
Dialógusablakok l Find. Dialog Kereső dialógusablak, felhasználható a keresett szöveg l Replace. Dialog Csere dialógusablak, felhasználható a helyettesítendő, valamint a helyettesített szöveg Delphi III / 35
Párbeszédablakok használata (Opendialog) • Láthatatlan komponensek • Az őt használó formban deklaráljuk • Objektum-felügyelőben adatait beállítjuk • Execute - al végrehajtjuk Pl. Open. Dialog esetén: Delphi III / 36
Párbeszédablakok használata (Opendialog) Beállítjuk a Filter jellemzőjét If Open. Dialog. Execute Then Show. Message('A Delphi kiválasztott állomány III / 37 neve: '+ Open. Dialog. Filename);
2. KIVÉTELEK KEZELÉSE
Kivételkezelés Kivételek kezelése • • Kivétel: olyan hibás állapot vagy esemény, amely megszakítja az alkalmazás futását Sys. Utils egységben definiált kivételosztályok: TObject Exception EConvert. Error EIn. Out. Error EMath. Error EOverflow EUnderflow EZero. Divide Eprinter. . . Delphi III / 39
Kivételkezelés Kivételek l Az Object Pascalban a futási idejű hibák kivételekké alakulnak • A kivételt megtestesítő objektum tartalmazza a hibát okozó információt • A vezérlés a futó program aktuális pontjáról a kivételkezelőhöz (exception handler) adódik át • Programlogika és hibakezelés elválasztása nő az áttekínthetőség Delphi III / 40
Kivételkezelés Kivételek kezelése Try utasítás_blokk (védett blokk) Except kivételkezelő_blokk [Else kivételkezelő_blokk] End; Ahol a kivételkezelő blokk: On [ azon: ] Osztálytípus Do utasítás Delphi III / 41
Kivételek kezelése Try. . . Fontos a Except On EZero. Divide Do Handle. Zero. Divide; sorrend! On EOverflow Do Handle. Overflow; EMath. Error On EMath. Error Do Handle. Math. Error; EOver. Flow EZero. Divide End; Function Atlag ( Osszeg, Db: Integer): Real; Begin Try Atlag: = Oszeg / Db; Except On EZero. Divide Do Result : = 0; End; Delphi III / 42
Kivételkezelés Kivételek kezelése • Le nem kezelt kivétek esetén lefut az alapértelmezett kezelő (default handler) • A kivétel lekezelése automatikusan maga után vonja a kivételobjektum megszüntetését, nem nekünk kell megszüntetni! • Kivételkezelők tetszőleges számban egymásba ágyazhatók Delphi III / 43
Erőforrások biztonságos használata • Erőforrások: állományok, memória, . . . • Formája: erőforrások lefoglalása Try erőforrásokat használó utasítások Finally erőforrásokat felszabadító utasítások End; Delphi III / 44
Erőforrások biztonságos használata Procedure Akarmi; Var Mutato: Pointer; Eredmeny: Real; Oszto: Integer; Begin Oszto: =0; Getmem(Mutato, 1024); Try Eredmeny : = 10 / Oszto; . . . Finally Free. Mem (Mutato, 1024); End; Delphi III / 45
3. DRAG & DROP TECHNIKA
Drag & Drop (vonszolás) techika l Négy fontos lépésből áll: • Vonszolás elkezdése • Vonszolás fogadása vagy (Drag. Cursor: cr. Drag, cr. Multi. Drag, . . . ) • Dobás • Befejezés Delphi III / 47
Vonszolás elkezdése A komponensek Drag. Mode tulajdonság értékétől függ: l dm. Automatic automatikusan elkezdődik a vonszolás l dm. Manual programból explicit módon kell elkezdeni Begin. Drag • Begin. Drag (True) automatikus • Begin. Drag (False) csak egérelmozgatás után Delphi III / 48
Vonszolás elkezdése Bal oldali Procedure TForm 1. Forras. Mouse. Downegérgomb (Sender: TObject; Button: TMouse. Button; Shift: TShift. State; X, Y: Integer); Begin If Button = mb. Left Then With Sender as TList. Box Do If Item. At. Pos( Point(X, Y), True)A>= 0 Thenfölött listadoboz Begin. Drag (False); kezdődik a Delphi End; III / 49 vonszolás
Vonszolás fogadása l Az objektum ami fölött vonszolunk On. Drag. Over üzenetet kap Ami fölött vonszolunk Amit vonszolunk On. Drag. Over(Sender, Source: TObject; X, Y: Integer; State: TDrag. State; var Accept: Boolean); l Ha fogadja Accept : = True l Ha nem fogadja Accept : = False Delphi III / 50
Vonszolás fogadása Procedure TForm 1. Cel. Drag. Over (Sender, Source: TObject; X, Y: Integer; State: TDrag. State; var Accept: Boolean); Begin If Source is TList. Box Then Accept : = True Else Accept : = False; End; Delphi III / 51
Dobás l Ha egy objektum fogadja, egérgomb felengedésekor On. Drag. Drop üzenetet kap Ami fölött vonszolunk Amit vonszolunk On. Drag. Drop(Sender, Source: TObject; X, Y: Integer) Delphi III / 52
Dobás Pl. Procedure TForm 1. Cel. Drag. Drop (Sender, Source: TObject; X, Y: Integer); Elem Begin hozzáadása With Source as TList. Box Do Begin TList. Box(Sender). Items. Add(Items[Itemindex]); Items. Delete(Itemindex); End; Elem törlése Delphi III / 53
Vonszolás befejezése l Befejezéskor a vonszolt objektum kap egy On. End. Drag üzenetet Amit vonszolunk Ami fogadta (ha fogadta) On. End. Drag(Sender, Target: TObject; X, Y: Integer); Ide írjuk a fogadó objektum frisítését (ha ez nem automatikus) Delphi III / 54
Vonszolás befejezése Pl. Procedure TForm 1. Forras. End. Drag (Sender, Target: TObject; X, Y: Integer); Ha létezik a Begin fogadó If Target<> Nil Then Show. Message(Format('A %s objektum fogadta', [TComponent(Target). Name])); End; Delphi III / 55
Eseménykezelő metódus (Message) Type TSajat. Form = Class(TForm) Protected Procedure Atmeretezes ( Var Msg: TMessage); Message WM_SIZE; End; . . . Procedure TSajat. Form. Atmeretezes; Begin Show. Message('Most méreteznek át'); Inherited; End; . . . Delphi III / 56
Eseménykezelő metódus (Message) Eredmény: Minden ablakátméretezésnél: Delphi III / 57
Osztályoperátorok • Típusmegállapítás : Is • Típuskonverzió : As Var Obj: TComponent; . . . Obj : = TButton. Create(. . . ); Általában együtt használjuk őket: TComponent TButton If Obj Is TButton Then (Obj As TButton). Caption : = 'Ok gomb'; Delphi III / 58
- Slides: 59