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

EAbort Tzv. tichá výjimka, která nevypisuje chybové hlášení a o jejíž existenci se uživatel nedozví.
EAccessViolation Nepovolený přístup do paměti.
EConvertError Chyba při provádění konverze (např. při použití funkce StrToInt, StrToFloat).
EDivByZero Celočíselné dělení nulou.
ERangeError Celočíselná hodnota mimo přípustný rozsah.
EIntOverflow Přetečení celočíselné operace, výsledek se nevejde do alokované oblasti.
EInOutError Vstupně/výstupní chyba, všeobecná výjimka pro chyby souborů.
EInvalidPointer Neplatná operace s ukazateli.
EOutOfMemory Neúspěšný pokus o alokaci paměti.
EWin32Error Třída pro chyby Windows.
EZeroDivide Dělení nulou v pohyblivé řádové čárce (reálných čísel).
EOverflow Přetečení v pohyblivé řádové čárce.
EUnderFlow Podtečení v pohyblivé řádové čárce.
EInvalidOp Nedefinovaná 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

Vlastnost Popis a použití
EditMask Slouží k zadání masky představující omezení vstupních dat pomocí Input Mask Editoru.
Text Vlastní text (zadaný uživatelem).
EditText Maskou formátovaný text tak, jak jej vidí uživatel.
MaxLength Maximální délka textu; automaticky se upravuje podle nastavení masky.
IsMasked Umožň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

Symbol Vý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á.
L Povinný alfabetický znak (malé nebo velké písmeno).
l Nepovinný alfabetický znak (malé nebo velké písmeno).
A Povinný alfanumerický znak (písmeno nebo číslice).
a Nepovinný alfanumerický znak (písmeno nebo číslice).
C Povinný libovolný znak (char).
c Nepovinný libovolný znak (char).
0 Povinná číslice.
9 Nepovinná čí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).

 

 

[Celkem: 1 Průměr: 5]

Napsat komentář