590 likes | 695 Vues
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. TabControl Fülsor egy lappal. PageControl Fülsor több lappal. Animate Animáció. ToolBar Eszközsor.
E N D
Negyedik Generációs Nyelvek( Delphi ) 1. Többablakos applikációkTForm komponensDialógusablakok 2. Kivételek kezelése 3. Drag & Drop technika
TabControl Fülsor egy lappal PageControl Fülsor több lappal Animate Animáció ToolBar Eszközsor DateTimePicker Dátumkezelő StatusBar Állapotsor
Többablakos applikációk • Egy ablakban több oldalra helyezett info. (ld. TPageControl, TTabControl komponensek) • Több egymással kommunikáló ablak
Többablakos applikációk TTabControl • 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: TStrings: a fülek feiratát tartalmazza külön sorokban • TabIndex: az aktuális fül indexe (az első indexe 0) • TabPosition: tpTop, tpBottom, a fülek pozíciója
Többablakos applikációk TTabControl • Fontos eseményei • OnChange: fülváltáskor következik be. A TabIndex ilyenkor az új fül indexét tartalmazza. • OnChanging: fülváltás közben következik be
Többablakos applikációk TPageControl • Szerepe: fülsor több lappal.Minden fülhöz tartozik egy lap. • Fontosabb jellemzői: • ActivePage: az aktuális lapÚj lap: gyorsmenü, New Page, felirat a Caption jellemzőbe • TabPosition: tpTop, tpBottom, a fülek pozíciója
Többablakos applikációk TPageControl • Fontos eseményei • OnChange: fülváltáskor következik be. A TabIndex ilyenkor az új fül indexét tartalmazza. • OnChanging: fülváltás közben következik be
Többablakos applikációk Többablakos applikációk • Egy applikáció tartalmazhat: • Egyszerű adatbeviteli és üzenetablakokat • Windows által felkínált párbeszédablakokat ( TOpenDialog, TPrinterSetupDialog,...) • 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)
Többablakos applikációk Többablakos applikációk • 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 • Ablakok megjelenítési formái: • Modális (tipikus párbeszédablakok) • Nem modális (Modeless)
Egyszerű adatbeviteli és üzenetablakok Ezek az ablakok modálisan jelennek meg • ShowMessage procedure ShowMessage(const Msg: WideString); 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.
Egyszerű adatbeviteli és üzenetablakok Egyszerű üzenetablakok • Procedure ShowMessage(Szöveg: String); Pl.:ShowMessage ('Bármilyen üzenet'); Projekt neve
Egyszerű adatbeviteli és üzenetablakok Ezek az ablakok modálisan jelennek meg • Inputbox function InputBox(const ACaption, APrompt, ADefault: WideString ): WideString; Beviteli ablak, a bekért adat típusa string, double, vagy integer.
Egyszerű adatbevitel • Function InputBox(Cím, KérőSzöveg, Alapérték: String): String; program Peldapr;uses Forms,Dialogs, Koszon in 'KOSZON.PAS' {Pelda};{$R *.RES}beginIf Inputbox('Bejelentkezési ablak', 'Gépelje be a jelszót', '')= 'A jelszó' thenbegin Application.CreateForm(TPelda, Pelda); Application.Run;...
Egyszerű adatbeviteli és üzenetablakok Ezek az ablakok modálisan jelennek meg • MessageDlg function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word; Beviteli ablak, a bekért adat típusa string, double, vagy integer.
Többablakos applikációk Egyszerű üzenetablakok • Function MessageDlg( Szöveg: String; Típus: TMsgDlgType;Gombok: TMsgButtons; Súgóidx: LongInt): Longint; Pl.MessageDlg('Kívánja menteni a változásokat?',mtConfirmation, [mbNo, mbOk,mbCancel], 0);
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. WinWord, Filekezelő,... )
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 adatokatVan: címsoruk, rendszermenüjükNincs: saját menüjük
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
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) • BorderIcons: Set of TBorderIconpl. [biSystemMenu, biMinimize, biMaximize] • BorderStyle: bsDialog, bsSizeable,... • AutoScroll: Boolean
Többablakos applikációk TForm komponens • HorzScrollBar, VertScrollBar: TControlScrollBar • ClientWidth, ClientHeigth: Integer • Position: poDesigned, poScreenCenter • Icon: TIcon (ikonja minimizált állapotban; ha nincs megadva az applikációét használja) • ShowHint: Boolean (buboréksugót jelenítsen-e meg, vagy sem?) • WindowState: wsNormal, wsMaximized, wsMinimized
Többablakos applikációk TForm komponens • Menu: TMainMenu (főmenüje) • ModalResult: mrOk, mrCancel,...(bezárása után jelzi bezárásának okát) • KeyPreview: 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) • FormStyle: TFormStylefsNormal, fsMDIForm, fsMDIChild, fsStayOnTop
Többablakos applikációk TForm komponens MDI keretablak esetén: • MDIChildCount: Integer(megnyitott gyerekablakok száma) • MDIChildren [ I: Integer]: TForm • ActiveMDIChild: TForm • WindowMenu: TMenuItem(melyik menüpont alján jelenjen meg a nyitott gyerekablakok listája)
Többablakos applikációk TForm komponens • Fontosabb metódusai: • procedure Show • function ShowModal: 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 • CloseQuery: Boolean
Többablakos applikációk TForm komponens • MDI keretablak esetén: • Next(aktivizálja a köv. gyerekablakot) • Tile • Cascade • ArrangeIcons gyerekablakok rendezése
Többablakos applikációk TForm komponens • Fontosabb eseményei: • OnCreate (életrekeltése) • OnShow (megjelenítése) • OnActivate (aktivizálása) • OnPaint (újrarajzolása) • OnDeactivate (fókusz elvesztése) • OnClose (bezárás) • OnCloseQuery (bezárás előtt) • OnDestroy (megszüntetés)
Több ablak együttműködése egy applikációban • SDI alkalmazásokban MainForm frmHarmadik
Többablakos applikációk Több ablak együttműködése egy applikációban • Ha egy űrlapról (MainForm) meg szeretnénk jeleníteni egy másik űrlapot (frmHarmadik), akkor: • a láthatóságot biztosítanunk kell (uses uHarmadik) • megjelenítjük: Modálisan Nem modálisan frmHarmadik.ShowModal frmHarmadik.Show
unit Umain;interfaceuses SysUtils, ... typeTfrmMain=class(TForm) ... end;Var frmMain: TfrmMain; implementation Uses uAbout; procedure TfrmMain.AboutmenuClick (Sender: TObject); begin frmAbout.ShowModal; end; unit Uabout;interfaceuses WinTypes,... typeTfrmAbout = class(TForm) ... end;varfrmAbout: TfrmAbout; implementation ... end.
Többablakos applikációk Több ablak együttműködése egy applikációban • MDI alkalmazásokban • Beállítjuk a keret- és gyerekablak típusát: • KeretAblak.FormStyle:= fsMDIform ; • GyerekAblak.FormStyle:= fsMDIChild ; • A keretablak marad AutoCreate-nek; ő az alkalmazás főablaka is. • A gyerekablak nem AutoCreate. • A keretablakból hozzuk létre a gyerekablakokat (pl. NewMenuClick)
Többablakos applikációk KeretAblak MDI alkalmazás GyerekAblak
unit uMDIKeret;interfaceusesSysUtils, ...uGyerek; typeTfrmKeret=class(TForm)... end;varfrmKeret: TfrmKeret; implementation procedure TfrmKeret.NewmenuClick (Sender: TObject); var Gyerek: TfrmGyerek;begin Gyerek:= TfrmGyerek. Create (Application);Gyerek.Show; end;end. unit uGyerek;interfaceuses WinTypes,... typeTfrmGyerek = class(TForm)... end;Var frmGyerek: TfrmGyerek; implementation uses uMDIKeret; GyerekAblak (nem Autocreate, példányaitdinamikusan hozzuk létre) KeretAblak (marad Autocreate)
Létező párbeszédablakok használata(Dialogs komponenspaletta) TComponent TCommonDialog TColorDialog TFindDialog TFontDialog TOpenDialog TSaveDialog TPrinterSetupDialog TPrintDialog
Dialógusablakok • OpenDialog Megnyitás dialógusablak, felhasználható a fájlnév, valamint az elérési útvonal • SaveDialog Mentés dialógusablak, felhasználható a fájlnév, valamint az elérési útvonal • OpenPictureDialog Megnyitás dialógusablak grafikus fájlok eléréséhez, az ablakban látható a grafikus fájl képe • SavePictureDialog Mentés dialógusablak grafikus fájlok eléréséhez, az ablakban látható a grafikus fájl képe
Dialógusablakok • FontDialog Font dialógusablak, használható többek között a font mérete, színe, típusa • ColorDialog Színek beállítását segítő ablak • PrintDialog Nyomtatás dialógusablak, a nyomtatás jellemzőit használhatjuk(pl. nyomtatási oldalak, nyomtatás példányszáma) • PrinterSetupDialog Nyomtató beállítóablak, a feltelepített nyomtatók tulajdonságait érhetjük el (elérhető a PrintDialog ablakból is)
Dialógusablakok • FindDialog Kereső dialógusablak, felhasználható a keresett szöveg • ReplaceDialog Csere dialógusablak, felhasználható a helyettesítendő, valamint a helyettesített szöveg
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. OpenDialog esetén:
Párbeszédablakok használata (Opendialog) Beállítjuk a Filter jellemzőjét If OpenDialog.Execute Then ShowMessage('A kiválasztott állomány neve: '+ OpenDialog.Filename);
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 • SysUtils egységben definiált kivételosztályok: TObject Exception EConvertError EInOutError EMathError EOverflow EUnderflow EZeroDivide Eprinter...
Kivételkezelés Kivételek • 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
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ípusDoutasítás
Kivételek kezelése Fontos a sorrend! EMathError EOverFlow EZeroDivide Try ...Except On EZeroDivide Do HandleZeroDivide; On EOverflow Do HandleOverflow; On EMathError Do HandleMathError;End; Function Atlag ( Osszeg, Db: Integer): Real;Begin Try Atlag:= Oszeg / Db; Except On EZeroDivide Do Result := 0; End;End;
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
Erőforrások biztonságos használata • Erőforrások: állományok, memória, ... • Formája: erőforrások lefoglalásaTry erőforrásokat használó utasításokFinallyerőforrásokat felszabadító utasításokEnd;
Erőforrások biztonságos használata Erőforrások biztonságos használata Procedure Akarmi;Var Mutato: Pointer; Eredmeny:Real; Oszto: Integer;BeginOszto:=0; Getmem(Mutato, 1024);TryEredmeny := 10 / Oszto;...FinallyFreeMem (Mutato,1024);End;End;
Drag & Drop (vonszolás) techika • Négy fontos lépésből áll: • Vonszolás elkezdése • Vonszolás fogadása vagy (DragCursor: crDrag, crMultiDrag,...) • Dobás • Befejezés
Vonszolás elkezdése A komponensek DragMode tulajdonság értékétől függ: • dmAutomatic automatikusan elkezdődik a vonszolás • dmManual programból explicit módon kell elkezdeni BeginDrag • BeginDrag (True) automatikus • BeginDrag (False) csak egérelmozgatás után
Vonszolás elkezdése Bal oldali egérgomb Procedure TForm1.ForrasMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);Begin If Button = mbLeft Then With Sender as TListBox Do If ItemAtPos( Point(X,Y), True) >= 0 Then BeginDrag (False);End; A listadoboz fölött kezdődik a vonszolás