12. Výjimky a masky

Výjimky

Chyby, na které upozorní překladač, nejsou jediné, které mohou v programu nastat. Daleko horší jsou chyby, které překladač nemůže odhalit, protože vznikají až za běhu programu a kterým říkáme run-time chyby (nebo běhové chyby). V okamžiku, kdy tato chyba vznikne, přeruší běh programu a dojde ke ztrátě dat. Jakmile tušíme, že by se v daném úseku programového kódu mohla taková chyba vyskytnout, je nutné všechny možnosti správně ošetřit.

Mechanismus výjimek

Mechanismus výjimek je postaven na čtyřech klíčových slovech:

  • try – označuje začátek tzv. chráněného bloku, tj. bloku, ve kterém se očekává vznik výjimky a který se má zkusit provést.
  • except – označuje konec chráněného bloku a uvádí příkazy pro obsluhu výjimek:
  • finally – blok je proveden vždy, ať k výjimce dojde nebo ne. Používá se např. k uvolnění zdrojů alokovaných v bloku try předtím, než je obsloužena výjimka.
  • raise – příkaz používaný k ručnímu vyvolání výjimky.

Blok except

Přesná syntaxe bloku except:

try

nebezpečné příkazy;

except

on typ očekávané výjimky do ošetření výjimky.

on typ očekávané výjimky do ošetření výjimky.

…..

else ošetření jiné (neočekávané) výjimky.

end;

V sekci else je možné ošetřit jakoukoliv výjimku, i tu, kterou jsme neočekávali a tedy nezařadili do výčtu on … do. Zpravidla je ale lepší nechat ošetření neznámé výjimky na implicitním handleru Delphi. Platí pravidlo, že buď výjimku identifikujeme a ošetříme, nebo ji necháme bez povšimnutí ošetřit Delphi.

Výjimka může být ošetřena v sekci do i více než jedním příkazem, tyto příkazy jsou pak standardně uvozeny klíčovými slovy begin a end.

Typy výjimek

EAbortTzv. tichá výjimka, která nevypisuje chybové hlášení a o jejíž existenci se uživatel nedozví.
EAccessViolationNepovolený přístup do paměti.
EConvertErrorChyba při provádění konverze (např. při použití funkce StrToInt, StrToFloat).
EDivByZeroCeločíselné dělení nulou.
ERangeErrorCeločíselná hodnota mimo přípustný rozsah.
EIntOverflowPřetečení celočíselné operace, výsledek se nevejde do alokované oblasti.
EInOutErrorVstupně/výstupní chyba, všeobecná výjimka pro chyby souborů.
EInvalidPointerNeplatná operace s ukazateli.
EOutOfMemoryNeúspěšný pokus o alokaci paměti.
EWin32ErrorTřída pro chyby Windows.
EZeroDivideDělení nulou v pohyblivé řádové čárce (reálných čísel).
EOverflowPřetečení v pohyblivé řádové čárce.
EUnderFlowPodtečení v pohyblivé řádové čárce.
EInvalidOpNedefinovaná instrukce v aritmetice reálných čísel.

Masky a komponenta MaskEdit

Slouží ke vstupu jedné řádky textu s kontrolou vstupních dat. Lze využít i pro formátování výstupu (zobrazení v požadovaném formátu). Základem je tzv. maska, která obsahuje předpis, jak data mají vypadat.

Vlastnosti

VlastnostPopis a použití
EditMaskSlouží k zadání masky představující omezení vstupních dat pomocí Input Mask Editoru.
TextVlastní text (zadaný uživatelem).
EditTextMaskou formátovaný text tak, jak jej vidí uživatel.
MaxLengthMaximální délka textu; automaticky se upravuje podle nastavení masky.
IsMaskedUmožňuje testovat, zda maska byla definována.

Ostatní vlastnosti a události jsou stejné jako u komponenty Edit.

Masku obvykle nevpisujeme přímo jako řetězec do vlastnosti EditMask, ale vytváříme pomocí Input Mask Editoru vyvolaného přes tuto vlastnost. Maska se skládá ze tří částí oddělených středníkem. První část obsahuje samotnou masku skládající se ze symbolů pro tvorbu masek. Druhá část určuje, zda se znaky masky budou ukládat společně se zadanými. Toto nastavení se týká pouze vlastnosti Text, neboť u vlastnosti EditText jsou znaky masky ukládány vždy. Pokud chceme ukládat pouze znaky zadané uživatelem, vložíme hodnotu 0, pokud i znaky masky, vložíme 1. Tuto hodnotu můžeme nastavit i pomocí položky Save Literal Characters v Input Mask Editoru. Třetí část masky říká, který znak bude v MaskEditu zobrazován jako místo určené pro vstup (standardně podtržítko). Znak je možné zadat i do položky Charakter for Blanks. Položka Test Input zobrazuje, jak bude editační pole vidět uživatel. Input Mask Editor obsahuje i některé jednoduché předdefinované masky v seznamu Sample Masks, ty ale většinou neodpovídají českým národním zvyklostem.

Symboly pro tvorbu masek

SymbolVýznam
!Odstranění počátečních mezer.
>Převede všechna následující písmena (až do symbolu <) na velká.
<Převede všechna následující písmena (až do symbolu >) na malá.
LPovinný alfabetický znak (malé nebo velké písmeno).
lNepovinný alfabetický znak (malé nebo velké písmeno).
APovinný alfanumerický znak (písmeno nebo číslice).
aNepovinný alfanumerický znak (písmeno nebo číslice).
CPovinný libovolný znak (char).
cNepovinný libovolný znak (char).
0Povinná číslice.
9Nepovinná číslice.
#Nepovinná číslice nebo znaky + či -.
\Literál (za ním jinak speciální znak).
:Oddělovač hodin, minut, sekund (dle nastavení ve Windows).
/Oddělovač dnů, měsíců, roků (dle nastavení ve Windows).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Přesunout se na začátek