59
1. Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése Negyedik Generációs Negyedik Generációs Nyelvek Nyelvek ( Delphi ) ( Delphi )

1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

  • Upload
    yitro

  • View
    30

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

1. Többablakos applikációkTForm komponensDialógusablakok

2. Kivételek kezelése3. Drag & Drop technika

Negyedik Generációs Negyedik Generációs NyelvekNyelvek

( Delphi ) ( Delphi )

Negyedik Generációs Negyedik Generációs NyelvekNyelvek

( Delphi ) ( Delphi )

Page 2: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

1. TÖBBABLAKOS 1. TÖBBABLAKOS APPLIKÁCIÓKAPPLIKÁCIÓK

1. TÖBBABLAKOS 1. TÖBBABLAKOS APPLIKÁCIÓKAPPLIKÁCIÓK

Page 3: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 33

TabControlFülsor

egy lappal

PageControlFülsor

több lappal

AnimateAnimáció

StatusBarÁllapotsor

ToolBarEszközsor

DateTimePickerDátumkezelő

Page 4: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 44

Többablakos applikációkTöbbablakos applikációk• Egy ablakban több oldalra helyezett info. (ld.

TPageControlTPageControl, TTabControlTTabControl komponensek)

• Több egymással kommunikáló ablak

Page 5: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 55

Többablakos applikációkTöbbablakos applikációk

• 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:

• TabsTabs: TStrings: a fülek feiratát tartalmazza külön sorokban

• TabIndexTabIndex: az aktuális fül indexe (az első indexe 0)

• TabPositionTabPosition: tpTop, tpBottom, a fülek pozíciója

TTabControl TTabControl

Page 6: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 66

Többablakos applikációkTöbbablakos applikációk

• Fontos eseményei

• OnChangeOnChange: fülváltáskor következik be. A TabIndex ilyenkor az új fül indexét tartalmazza.

• OnChangingOnChanging: fülváltás közben következik be

TTabControl TTabControl

Page 7: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 77

Többablakos applikációkTöbbablakos applikációk

Szerepe: fülsor több lappal.Minden fülhöz tartozik egy lap.

Fontosabb jellemzői:

• ActivePageActivePage: az aktuális lapÚj lap: gyorsmenü, New Page, felirat a Caption jellemzőbe

• TabPositionTabPosition: tpTop, tpBottom, a fülek pozíciója

TPageControlTPageControl

Page 8: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 88

Többablakos applikációkTöbbablakos applikációk

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

TPageControlTPageControl

Page 9: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 99

Többablakos applikációkTö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ókTöbbablakos applikációk

Page 10: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1010

Többablakos applikációkTö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)

Többablakos applikációkTöbbablakos applikációk

Page 11: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1111

Egyszerű adatbeviteli és üzenetablakokEgyszerű adatbeviteli és üzenetablakokEzek az ablakok modálisan jelennek meg ShowMessage

procedure ShowMessage(const Msg: WideString);

A lehető legegyszerűbb üzenetablak A lehető legegyszerűbb üzenetablak szöveggel, és egy OK gombbal.szöveggel, és egy OK gombbal.Az ablak címsorában az alkalmazásunkAz ablak címsorában az alkalmazásunkprojektállományának neve található.projektállományának neve található.Az ablak a képernyő közepén jelenik meg.Az ablak a képernyő közepén jelenik meg.

Page 12: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1212

Egyszerű adatbeviteli és üzenetablakokEgyszerű adatbeviteli és üzenetablakok

Procedure ShowMessage(Szöveg: String);

Pl.:ShowMessage ('Bármilyen üzenet');

Projekt neveProjekt neve

Egyszerű üzenetablakokEgyszerű üzenetablakok

Page 13: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1313

Egyszerű adatbeviteli és üzenetablakokEgyszerű adatbeviteli és üzenetablakokEzek 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.

Page 14: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1414

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}begin If Inputbox('Bejelentkezési ablak',

'Gépelje be a jelszót', '')= 'A jelszó' thenbegin Application.CreateForm(TPelda, Pelda); Application.Run;...

Egyszerű adatbevitelEgyszerű adatbevitel

Page 15: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1515

Egyszerű adatbeviteli és üzenetablakokEgyszerű adatbeviteli és üzenetablakokEzek 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.

Page 16: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1616

Többablakos applikációkTöbbablakos applikációk

Function MessageDlg( Szöveg: String; Típus: TMsgDlgType;Gombok: TMsgButtons; Súgóidx: LongInt): Longint;

Pl.MessageDlg('Kívánja menteni aváltozásokat?',mtConfirmation,

[mbNo, mbOk,mbCancel], 0);

Egyszerű üzenetablakokEgyszerű üzenetablakok

Page 17: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1717

Többablakos applikációkTöbbablakos applikációk

• 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ő,... )

Applikációk típusaiApplikációk típusai

Page 18: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1818

Többablakos applikációkTöbbablakos applikációk

• 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

Az MDI applikáció részei:Az MDI applikáció részei:

Page 19: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 1919

Többablakos applikációkTöbbablakos applikációk

• 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

Szabályok:Szabályok:

Page 20: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2020

Többablakos applikációkTöbbablakos applikációk

• 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

TForm komponensTForm komponens

Page 21: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2121

Többablakos applikációkTöbbablakos applikációk

• 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

TForm komponensTForm komponens

Page 22: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2222

Többablakos applikációkTöbbablakos applikációk

• MenuMenu:: TMainMenu (főmenüje)

• ModalResultModalResult: mrOk, mrCancel,...(bezárása után jelzi bezárásának okát)

• KeyPreviewKeyPreview: 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)

• FormStyleFormStyle: TFormStylefsNormal, fsMDIForm, fsMDIChild, fsStayOnTop

TForm komponensTForm komponens

Page 23: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2323

Többablakos applikációkTöbbablakos applikációk

MDI keretablak esetén:MDIChildCountMDIChildCount: Integer

(megnyitott gyerekablakok száma)

MDIChildrenMDIChildren [ I: Integer]: TForm

ActiveMDIChildActiveMDIChild: TForm

WindowMenuWindowMenu: TMenuItem(melyik menüpont alján jelenjen meg a nyitott gyerekablakok listája)

TForm komponensTForm komponens

Page 24: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2424

Többablakos applikációkTöbbablakos applikációk

Fontosabb metódusai:

• procedure ShowShow

• function ShowModalShowModal: Integer(modálisan jeleníti meg az ablakot, majd bezárása után visszaadja a kilépés okát)

• PrintPrint (kinyomtatja az ablakot)

• CloseClose

• CloseQueryCloseQuery: Boolean

TForm komponensTForm komponens

Page 25: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2525

Többablakos applikációkTöbbablakos applikációk

• MDI keretablak esetén:NextNext

(aktivizálja a köv. gyerekablakot)

TileTile

CascadeCascade

ArrangeIcons

gyerekablakogyerekablakok rendezések rendezése

TForm komponensTForm komponens

Page 26: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2626

Többablakos applikációkTöbbablakos applikációk

Fontosabb eseményei:

• OnCreateOnCreate (életrekeltése)

• OnShowOnShow (megjelenítése)

• OnActivateOnActivate (aktivizálása)

• OnPaintOnPaint (újrarajzolása)

• OnDeactivateOnDeactivate (fókusz elvesztése)

• OnCloseOnClose (bezárás)

• OnCloseQueryOnCloseQuery (bezárás előtt)

• OnDestroyOnDestroy (megszüntetés)

TForm komponensTForm komponens

Page 27: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2727

SDI alkalmazásokbanSDI alkalmazásokban

Több ablak együttműködése egy Több ablak együttműködése egy applikációbanapplikációban

MainFormMainForm

frmHarmadikfrmHarmadik

Page 28: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2828

Többablakos applikációkTöbbablakos applikációk

• 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

Több ablak együttműködése egy Több ablak együttműködése egy applikációbanapplikációban

Page 29: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 2929

unit Umain;interfaceuses SysUtils, ...typeTfrmMain=class(TForm)

... end;Var frmMain: TfrmMain;implementationUses uAbout;procedure TfrmMain.AboutmenuClick

(Sender: TObject);begin frmAbout.ShowModal;end;

unit Umain;interfaceuses SysUtils, ...typeTfrmMain=class(TForm)

... end;Var frmMain: TfrmMain;implementationUses uAbout;procedure TfrmMain.AboutmenuClick

(Sender: TObject);begin frmAbout.ShowModal;end;

unit Uabout;interfaceuses

WinTypes,...typeTfrmAbout = class(TForm)

... end;var frmAbout: TfrmAbout;implementation...end.

unit Uabout;interfaceuses

WinTypes,...typeTfrmAbout = class(TForm)

... end;var frmAbout: TfrmAbout;implementation...end.

Page 30: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3030

Többablakos applikációkTöbbablakos applikációk

MDI alkalmazásokban

• Beállítjuk a keret- és gyerekablak típusát:KeretAblak.FormStyle:= fsMDIform ;

GyerekAblak.FormStyle:= fsMDIChild ;

• A keretablak marad AutoCreateAutoCreate-nek; ő az alkalmazás főablaka is.

• A gyerekablak nem AutoCreateAutoCreate.

• A keretablakból hozzuk létre a gyerekablakokat (pl. NewMenuClick)

Több ablak együttműködése egy Több ablak együttműködése egy applikációbanapplikációban

Page 31: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3131

Többablakos applikációkTöbbablakos applikációkMDI alkalmazás

GyerekAblak GyerekAblak

KeretAblak KeretAblak

Page 32: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3232

unit uMDIKeret;interfaceusesSysUtils, ...uGyerek;typeTfrmKeret=class(TForm)... end;varfrmKeret: TfrmKeret;implementationprocedure TfrmKeret.NewmenuClick (Sender: TObject);var Gyerek: TfrmGyerek;beginGyerek:= TfrmGyerek. Create (Application);Gyerek.Show;end;

end.

unit uMDIKeret;interfaceusesSysUtils, ...uGyerek;typeTfrmKeret=class(TForm)... end;varfrmKeret: TfrmKeret;implementationprocedure TfrmKeret.NewmenuClick (Sender: TObject);var Gyerek: TfrmGyerek;beginGyerek:= TfrmGyerek. Create (Application);Gyerek.Show;end;

end.

unit uGyerek;interfaceuses WinTypes,...typeTfrmGyerek = class(TForm)... end;Var frmGyerek: TfrmGyerek;implementationuses uMDIKeret;

unit uGyerek;interfaceuses WinTypes,...typeTfrmGyerek = class(TForm)... end;Var frmGyerek: TfrmGyerek;implementationuses uMDIKeret;

GyerekAblak GyerekAblak ((nem nem Autocreate, Autocreate, példányaitpéldányait dinamikusan dinamikusan hozzuk létre)hozzuk létre)

KeretAblak (marad KeretAblak (marad Autocreate)Autocreate)

Page 33: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3333

TComponentTCommonDialog

TColorDialogTFindDialogTFontDialogTOpenDialogTSaveDialogTPrinterSetupDialogTPrintDialog

Létező párbeszédablakok használataLétező párbeszédablakok használata(Dialogs komponenspaletta)(Dialogs komponenspaletta)

Page 34: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3434

DialógusablakokDialógusablakok

OpenDialogOpenDialog Megnyitás dialógusablak, felhasználható a fájlnév, valamint az elérési útvonal

SaveDialogSaveDialog Mentés dialógusablak, felhasználható a fájlnév, valamint az elérési útvonal

OpenPictureDialogOpenPictureDialog Megnyitás dialógusablak grafikus fájlok eléréséhez, az ablakban látható a grafikus fájl képe

SavePictureDialogSavePictureDialog Mentés dialógusablak grafikus fájlok eléréséhez, az ablakban látható a grafikus fájl képe

Page 35: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3535

DialógusablakokDialógusablakok

FontDialogFontDialog Font dialógusablak, használható többek között a font mérete, színe, típusa

ColorDialogColorDialogSzínek beállítását segítő ablak PrintDialogPrintDialog Nyomtatás dialógusablak, a

nyomtatás jellemzőit használhatjuk(pl. nyomtatási oldalak, nyomtatás példányszáma)

PrinterSetupDialogPrinterSetupDialog Nyomtató beállítóablak, a feltelepített nyomtatók tulajdonságait érhetjük el (elérhető a PrintDialog ablakból is)

Page 36: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3636

DialógusablakokDialógusablakok

FindDialogFindDialog Kereső dialógusablak, felhasználható a keresett szöveg

ReplaceDialogReplaceDialog Csere dialógusablak, felhasználható a helyettesítendő, valamint a helyettesített szöveg

Page 37: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3737

• Láthatatlan komponensek

• Az őt használó formban deklaráljuk

• Objektum-felügyelőben adatait beállítjuk

• Execute - al végrehajtjuk

Pl. OpenDialogPl. OpenDialog esetén:esetén:Pl. OpenDialogPl. OpenDialog esetén:esetén:

Párbeszédablakok használata (Opendialog)Párbeszédablakok használata (Opendialog)

Page 38: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 3838

Beállítjuk a Filter jellemzőjét

If OpenDialog.Execute Then ShowMessage('A kiválasztott állomány

neve: '+ OpenDialog.Filename);

Párbeszédablakok használata (Opendialog)Párbeszédablakok használata (Opendialog)

Page 39: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

2. KIVÉTELEK KEZELÉSE2. KIVÉTELEK KEZELÉSE2. KIVÉTELEK KEZELÉSE2. KIVÉTELEK KEZELÉSE

Page 40: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4040

KivételkezelésKivételkezelés

• 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:

TObjectException

EConvertErrorEInOutErrorEMathError

EOverflowEUnderflowEZeroDivideEprinter...

Kivételek kezeléseKivételek kezelése

Page 41: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4141

KivételkezelésKivételkezelés

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ételek Kivételek

Page 42: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4242

KivételkezelésKivételkezelés

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

Kivételek kezeléseKivételek kezelése

Page 43: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4343

Try ...Except

On EZeroDivide Do HandleZeroDivide;On EOverflow Do HandleOverflow;On EMathError Do HandleMathError;

End;

Function Atlag ( Osszeg, Db: Integer): Real;Begin

TryAtlag:= Oszeg / Db;

ExceptOn EZeroDivide Do Result := 0;

End;End;

Fontos a Fontos a sorrend!sorrend!

EMathErrorEMathErrorEOverFlowEOverFlowEZeroDividEZeroDividee

Fontos a Fontos a sorrend!sorrend!

EMathErrorEMathErrorEOverFlowEOverFlowEZeroDividEZeroDividee

Kivételek kezeléseKivételek kezelése

Page 44: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4444

KivételkezelésKivételkezelés

• 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

Kivételek kezeléseKivételek kezelése

Page 45: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4545

Erőforrások biztonságos használataErő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ásokFinally

erőforrásokat felszabadító utasításokEnd;

Page 46: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4646

Erőforrások biztonságos használataErő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

FreeMem (Mutato,1024);End;

End;

Erőforrások biztonságos Erőforrások biztonságos használatahasználata

Page 47: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

3. DRAG & DROP 3. DRAG & DROP TECHNIKATECHNIKA

3. DRAG & DROP 3. DRAG & DROP TECHNIKATECHNIKA

Page 48: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4848

Drag & Drop (vonszolás) Drag & Drop (vonszolás) techikatechika

Négy fontos lépésből áll:

• Vonszolás elkezdése

• Vonszolás fogadása vagy (DragCursor: crDrag, crMultiDrag,...)

• Dobás

• Befejezés

Page 49: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 4949

Vonszolás elkezdéseVonszolá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

Page 50: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5050

Vonszolás elkezdéseVonszolás elkezdése

Procedure TForm1.ForrasMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);Begin

If Button = mbLeft ThenWith Sender as TListBox Do

If ItemAtPos( Point(X,Y), True) >= 0 Then

BeginDrag (False);End;

Bal oldali Bal oldali egérgombegérgombBal oldali Bal oldali egérgombegérgomb

A listadoboz A listadoboz fölött kezdődik fölött kezdődik a vonszolása vonszolás

A listadoboz A listadoboz fölött kezdődik fölött kezdődik a vonszolása vonszolás

Page 51: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5151

Vonszolás fogadásaVonszolás fogadása

Az objektum ami fölött vonszolunk OnDragOver üzenetet kap

OnDragOver(Sender, Source: TObject;X, Y: Integer; State: TDragState;

var Accept: Boolean); Ha fogadja Accept := True

Ha nem fogadja Accept := False

Ami fölött Ami fölött vonszolunkvonszolunkAmi fölött Ami fölött vonszolunkvonszolunk

Amit Amit vonszolunkvonszolunkAmit Amit vonszolunkvonszolunk

Page 52: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5252

Vonszolás fogadásaVonszolás fogadása

Procedure TForm1.CelDragOver(Sender, Source: TObject; X, Y:

Integer; State: TDragState; var Accept:

Boolean);Begin

If Source is TListBox ThenAccept := True

ElseAccept := False;End;

Page 53: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5353

DobásDobás

Ha egy objektum fogadja, egérgomb felengedésekor OnDragDrop üzenetet kap

OnDragDrop(Sender, Source: TObject; X, Y: Integer)

Ami fölött Ami fölött vonszolunkvonszolunkAmi fölött Ami fölött vonszolunkvonszolunk

Amit Amit vonszolunkvonszolunkAmit Amit vonszolunkvonszolunk

Page 54: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5454

DobásDobásPl.Procedure TForm1.CelDragDrop

(Sender, Source: TObject; X, Y: Integer);Begin

With Source as TListBox DoBegin

TListBox(Sender).Items.

Add(Items[Itemindex]);Items.Delete(Itemindex);

End;End;

Elem Elem hozzáadáshozzáadásaa

Elem Elem hozzáadáshozzáadásaa

Elem Elem törlésetörléseElem Elem törlésetörlése

Page 55: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5555

Vonszolás befejezéseVonszolás befejezése

Befejezéskor a vonszolt objektum kap egy OnEndDrag üzenetet

OnEndDrag(Sender, Target: TObject; X, Y: Integer);

Ide írjuk a fogadó objektum frisítését (ha ez nem automatikus)

Amit Amit vonszolunkvonszolunk

Amit Amit vonszolunkvonszolunk

Ami Ami fogadta (ha fogadta (ha

fogadta)fogadta)

Ami Ami fogadta (ha fogadta (ha

fogadta)fogadta)

Page 56: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5656

Vonszolás befejezéseVonszolás befejezésePl.Procedure TForm1.ForrasEndDrag

(Sender, Target: TObject; X, Y: Integer);Begin

If Target<> Nil ThenShowMessage(Format('A %s objektum

fogadta',[TComponent(Target).Name]));

End;

Ha létezik a Ha létezik a fogadófogadóHa létezik a Ha létezik a fogadófogadó

Page 57: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5757

TypeTSajatForm = Class(TForm)

ProtectedProcedure Atmeretezes ( Var

Msg:TMessage); Message WM_SIZE;

End;...Procedure TSajatForm. Atmeretezes;

BeginShowMessage('Most méreteznek át');Inherited;

End;...

Eseménykezelő metódus Eseménykezelő metódus (Message)(Message)

Page 58: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5858

Eredmény: Minden ablakátméretezésnél:

Eseménykezelő metódus Eseménykezelő metódus (Message)(Message)

Page 59: 1.Többablakos applikációk TForm komponens Dialógusablakok 2. Kivételek kezelése

DelphiDelphiIII / III / 5959

• TípusmegállapításTípusmegállapítás : Is

• TípuskonverzióTípuskonverzió : As

Var Obj: TComponent;...

Obj := TButton.Create(...);

Általában együtt használjuk őket:Általában együtt használjuk őket:

If Obj Is TButton Then(Obj As TButton).Caption := 'Ok

gomb';

OsztályoperátorokOsztályoperátorok

TComponent

TComponent

TButtonTButton