Výjimečné situace. Prevence a řešení chyb

Jak bylo uvedeno výše, v programu se mohou během jeho provozu vyskytnout chyby, jejichž příčinou jsou zpravidla akce uživatele. Uživatel může například zadat nesprávná data nebo, jak se často stává, smazat požadovaný programem soubor.

Porušení v programová práce označil za výjimku. Zpracování výjimek (chyb) je řešeno kódem, který se automaticky přidává do vykonávajícího programu a zajišťuje mimo jiné výstup informační zprávy. Delphi však umožňuje programu zpracovat výjimku sám.

Návod na zacházení s výjimkami v celkový pohled vypadá takto: zkuste

// zde jsou instrukce, jejichž provedení může způsobit výjimku

Kromě // začátek sekce pro zpracování výjimek na Exception Type! proveďte zpracování!; na výjimce typu2 proveďte 0processing2;

na ExceptionTypeJ do Processing J; else // zde jsou pokyny pro zpracování dalších výjimek

Zkuste - klíčové slovo označující, že následují další instrukce, jejichž provedení může způsobit výjimky, a že program přebírá zpracování těchto výjimek; kromě je klíčové slovo označující začátek sekce zpracování výjimek. Pokyny v této části budou provedeny, pokud v programu dojde k chybě; on je klíčové slovo následované typem výjimky, kterou zpracuje příkaz následující do;

else je klíčové slovo, za nímž následují instrukce, které zpracovávají výjimky, jejichž typ není specifikován v sekci výjimkou.

Jak bylo uvedeno výše, každá výjimka je charakterizována typem. V tabulce 13.1 uvádí nejčastější výjimky a uvádí důvody, které mohou vést k jejich výskytu.

Tabulka 13.1. Typické výjimky

Následující program, vzhled jeho dialogového okna je znázorněn na Obr. 13.3 a text ve výpisu 13.1 demonstruje zpracování výjimek pomocí příkazu try.

Rýže. 13.3. Dialogové okno programu

Výpis 13.1. Zpracování výjimek

Unit UsTry_; rozhraní používá Windows, zprávy, SysUtils, třídy, grafiku, ovládací prvky, formuláře, dialogy, StdCtrls; typ TForml = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel;

Editl: TEdit; // napětí

Edit2: TEdit; // odpor

Label5: TLabel; // výsledek výpočtu - aktuální

Tlačítko: TButton; // tlačítko Vypočítat

Procedure ButtonlClick(Sender: TObject); private ( Private deklarace ) public ( Public deklarace ) end;

var Forml: TForml; implementace

($R *.DFM) procedure TForml.ButtonlClick(Sender: TObject); var a: skutečný; // napětí g: real; // odpor i: real; // aktuální začátek Labe15.Caption:= " "; pokus

// instrukce, které mohou způsobit výjimku (chybu) u:= StrToFloat(Editl.Text); g:= StrToFloat(Edit2.Text); i:= u/r; kromě // sekce zpracování výjimek na EZeroDivide do // dělení nulou begin ShowMessage("Odpor nemůže být nula!"); výstup; konec; on EConvertError do // error převodu řetězce na číslo begin ShowMessage("Napětí a odpor musí být " + "určeny číslem." +#13+ "Při psaní zlomkové číslo použijte čárku."); exit; end; end; Label5.Caption:= FloatToStr(i) + " A"; end; end.

Ve výše uvedeném programu mohou nastat výjimky při výpočtu aktuální hodnoty. Pokud uživatel určí, že odpor je nulový, pak

PŘI provádění I:=u/r DOJDE K VÝJIMCE EZeroDivide.

Pokud je číselná hodnota zadaná nesprávně, například pro oddělení celého čísla a zlomkové částičíslo, místo čárky se použije tečka, vyvolá se výjimka typu EConvertError. Obě výjimky se zpracovávají stejným způsobem: vytiskne se zpráva, po které se procedura události onclick ukončí.

Úkol 1: Vytvořte aplikaci, která vytvoří textový soubor text1.txt a zapíše do něj text zadaný uživatelem v okně Upravit a poté soubor zavře.

Řešení:

Vytvořit formuláře a nastavte jeho vlastnost Caption na „Vytvořit soubor a vytisknout do něj text“. Umístěte komponenty Edit1, Labbel1, Button1 na formulář, jak je znázorněno na Obr. 6.1. Nastavte hodnoty pro vlastnost Label1. Titulek – „Zadejte text“, Tlačítko1. Titulek – „Uložit“. Zarovnejte součásti a zafixujte jejich polohu na formuláři.

Uložit pojmenované soubory modulu hlavní a projekt pod jménem TextEditFile ve složce Zpracování textového souboru.

Rýže. 6.1 Příklad formuláře projektu

Vytvořte postup zpracování události tlačítka „Uložit“, zadejte do okna Editor kódu následující text:

F : TextFile ; (popis proměnné souboru)

AssignFile ( F , " text 1. txt "); (asociace proměnné souboru se souborem)

Přepsat ( F ); (vytvořit nový soubor)

Writeln(f, Upravit1. Text);(zapsat do souboru)

CloseFile(f); konec;(zavřít soubor)

Běh aplikaci a do okna Upravit zadejte následující větu – „Můj první příklad textu.“ Klikněte na tlačítko „Uložit“ a zavřete okno aplikace.

OTEVŘENO Okno Průzkumníka složka Windows Zpracování textového souboru, ve kterém se ukládají soubory projektu. V seznamu souborů v této složce je nově vytvořený soubor text1.txt. Poklepejte levým tlačítkem myši na název souboru text1.txt. Ujistěte se, že se jedná o stejný text, který byl zadán v okně aplikace. Otevře se okno editoru poznámkového bloku s tímto souborem. Zavřete okno editoru Poznámkový blok a Průzkumník.

Úkol 2: Vytvořte aplikaci, která otevře textový soubor pro čtení a přečte z něj text do okna Poznámky. Před otevřením souboru byste měli zkontrolovat jeho přítomnost, pokud chybí, měla by se zobrazit odpovídající zpráva.

Řešení:

Vytvořte novou aplikaci(projekt). Vytvořte formulář "Přečíst text ze souboru do okna". Umístěte součásti Memo1, Label1, Button1 na formulář, jak je znázorněno na Obr. 6.2. Nastavte hodnoty vlastnosti Label1. Titulek – „Text ze souboru“, Tlačítko1. Titulek – „Přečíst text ze souboru“.

Chcete-li odstranit text Memo1 z komponenty, vyberte objekt Memo1 v okně Object Inspector, poté na stránce Properties vyberte vlastnost Lines a v poli s hodnotou Strings proveďte dvojitým kliknutím. Poté v okně StringListEditor odstraňte text a klikněte na tlačítko OK.

Pro zajištění možnosti zobrazení v okně Memo1 dlouhé texty Pomocí vertikálního posuvníku v okně Object Inspector nastavte vlastnost ScrollBars na ssVertical. Zarovnejte součásti a zafixujte jejich polohu na formuláři.


Rýže. 6.2 Příklad formuláře žádosti

Vytvořte postup zpracování události tlačítka „Načíst text ze souboru“, upravte text procedury následovně:

postup TForm1. Button1Click(Sender: TObject);

var f: TextFile;

ch: Char;

AssignFile(f, "text1.txt");

Reset(f);

pokud IOResult=0 pak začněte

zatímco ne Eof(f) dělat

Read(f, ch);

Poznámka1. Text:=Memo1. Text+ch;

CloseFile(f);

konec jinak

ShowMessage(" Žádný takový soubor ");

Uložit soubor modulu s názvem main1 a soubor projektu s názvem TextMemoFile1 ve složce Text File Processing. Zkompilujte a spusťte aplikaci, zkontrolujte její fungování.

Úkol 3: Vytvořte aplikaci, která otevře textový soubor pro dokončení a poté k němu připojí zadaný text.

Řešení:

Vytvořit nový projekt, nastavte název formuláře na „Přidání textu do souboru“. Umístěte součásti Button1,2, Memo1, Label1,2, Edit1 na formulář, jak je znázorněno na Obr. 6.3. Přiřaďte hodnoty vlastnostem Label1. Titulek – „Text ze souboru“, Tlačítko1. Capton – „Přečíst text ze souboru“, Label2. Titulek – „Text k přidání“, Tlačítko2. Titulek – „Přidat text do souboru“. Odstraňte text z komponent Memo1, Edit1. Nastavte pravítko vertikální rolování poskytnout možnost prohlížet dlouhé texty v komponentě Memo1. Zarovnejte součásti a zafixujte jejich polohu na formuláři.



Rýže. 6.3 Příklad formuláře žádosti

Vytvořit handler pro samostatné kliknutí na tlačítko „Číst text ze souboru“. Pro tlačítko „Přidat text do souboru“ zapište následující kód události:

Postup TForm1. Button2Click(Sender: TObject);

F:TextFile;

AssingFile(f, 'text1.txt');

Append(f);

Writeln(f, Upravit1. Text);

CloseFile(f);

Konec ;

Uložte soubor modul pod názvem Main2 a soubor projektu pod názvem TextMemoFile2 ve složce Text File Processing.

Běh a zkontrolujte aplikaci.

Úkol 4: Vytvořte aplikaci, která otevře textový soubor pomocí metody OpenDialog, přečte z něj text do objektu Memo, poté uloží upravený text do souboru pomocí metody SaveDialog a vytiskne text pomocí metody PrintDialog.

Řešení:

Vytvořit nový projekt a uložte jej do složky "Dialogový panel". Umístěte komponenty Memo1, Button1,2,3 na formulář. Tlačítka pojmenujte „Uložit“, „Otevřít“, „Tisk“. Součást sady Memo1 svislý pruh posouvat a mazat text. Vyrovnejte a zajistěte součásti k formě (viz obrázek 6.4).


Rýže. 6.4 Formulář projektu „Dialogový panel“

Vybrat v paletě komponent na stránce Dialog a umístěte do formuláře komponenty OpenDialog, SaveDialog, PrintDialog. Protože oni nejsou vizuální komponenty, mohou být umístěny kdekoli ve formuláři.

Soubor pro vlastnost SaveDialog. Název je hodnota „Uložit textový soubor“, která se zobrazí v názvu dialogového okna pro uložení souboru. Chcete-li zajistit, aby byl typ souboru vybrán v dialogovém okně při ukládání souboru, vyberte Vlastnost filtru a dvakrát klikněte v seznamu hodnot. Otevře se okno FilterEditor. Nastavením filtrů vyberte typ a příponu souboru:

A klikněte na tlačítko OK, poté nastavte příponu *.txt na výchozí - nastavte vlastnost OpenDialog1. Hodnota FilterIndex 1.

Komu v dialogovém okně Tisk Chcete-li povolit možnost vybrat rozsah vytištěných stránek a vytisknout vybraný fragment, nastavte vlastnosti PrintDialog1. Options.poPageNums a PrintDialog1. Options.poSelection má hodnotu True.

Poté v části popisu modulu přidejte do seznamu POUŽITÍ modul TISKÁRNY, abyste nezadali svou proměnnou. Tento modul umožňuje řídit proces tisku.

Upravit sekce popisu proměnné:

Form1: TForm1;

FName: string;

F:TextFile;

S : řetězec ;

Vytvořte procedury zpracujte události tří tlačítek následovně:

1) úspora:

postup TForm1. Button1Click(Sender: TObject);

fName:="Text1";

UložitDialog1. FileName:=FNname;

pokud SaveDialog1. Proveďte a poté začněte

fName:=SaveDialog1. Název souboru;

případ SaveDialog1. Filtr Index of

1: fName:=fName+.txt";

2: fName:=fName+".doc";

Poznámka1. Čáry. SaveToFile(fName);

2) otevírání:

postup TForm1. Button2Click(Sender: TObject);

pokud OpenDialog1. Pak proveďte

AssignFile(f, OpenDialog1. FileName);

fName:=OtevřítDialog1. Název souboru;

Reset(F);

Readln(F, s);

Poznámka1. Text:=s;

CloseFile(F);

3) tisk:

postup TForm1. Button3Click(Sender: TObject);

pokud PrintDialog1. Pak proveďte

AssignPrn(f);

Přepsat(F);

Writeln(f, Memo1. Text);

Při vývoji aplikace musíte napsat kód, který problém vyřeší, a také kód, který bude kontrolovat chyby. Kód pro zpracování chyb je obvykle postaven kolem operátora -li. -li Operátor často se používá k ověření uživatelského vstupu i výsledků funkcí. V jednoduché algoritmy -li můžete se omezit na používání operátora , nicméně v aplikacích s grafické rozhraní uživatel, kde uživatelé majíúplná svoboda -li akce, chyby mohou nastat kdykoli a kdekoli. Použití pouze jednoho operátora

chránit aplikaci není dobrý nápad. Mechanismus zpracování výjimek je nejvhodnější pro zachycení chyb a reakci na ně.(Zpracování strukturovaných výjimek ( Strukturované zpracování výjimek – SHE ) je metoda zpracování chyb, která umožňuje obnovu normální práce aplikace po selhání programu, které by jinak bylo fatální)

Vyvolání výjimky jednoduše znamená, že aplikace vytvořila objekt výjimky a popsala chybu co nejpodrobněji. Pokud výjimku nezpracováváme (tj speciální kód k zachycení výjimky), aplikace to provede automaticky. Aplikace obvykle zpracuje výjimku zobrazením okna na monitoru, které indikuje, že došlo k chybě. Například pokud předáte funkce StrToInt

řádek obsahující prázdný řetězec, funkce vyvolá výjimku.

Procedure TForm1.Button1Click(Sender: TObject); var x: celé číslo; begin x:= StrToInt(Edit1.Text); konec; k zachycení výjimky), aplikace to provede automaticky. Aplikace obvykle zpracuje výjimku zobrazením okna na monitoru, které indikuje, že došlo k chybě. Například pokud předáte funkce Ke zpracování výjimky vyvolané funkcí k zachycení výjimky), aplikace to provede automaticky. Aplikace obvykle zpracuje výjimku zobrazením okna na monitoru, které indikuje, že došlo k chybě. Například pokud předáte funkce, musíme zavolat funkci

do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:
pokus
operátor(é)
kromě
příkazy pro zpracování výjimek;

konec do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: Příkazy, které mohou vyvolat výjimku, jsou zapsány v bloku operátor(é) a v obslužné rutině výjimky je zapsán kód, který zpracovává výjimky. Obsluha výjimky je součástí chráněného bloku začínajícího vyhrazeným slovem

v Delphi. Pokud předáte funkce StrToInt do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: platný řetězec a výjimka nenastane, provede se pouze kód, který je v bloku

.

Kód v bloku výjimky se provede pouze v případě, že příkaz uvnitř bloku vyvolá výjimku.

Procedure TForm1.Button1Click(Sender: TObject); var x: celé číslo; begin try x:= StrToInt(Edit1.Text); kromě ShowMessage("Chyba konverze"); konec; konec;

Zpracování specifických výjimek v Delphi Nyní si zkusme vytvořit jednoduchou kalkulačku, kterou lze čísla dělit. Uživatelské rozhraní tohoto malý program

zobrazeno na obrázku níže. K oddělení hodnot zadaných v komponentách TEdit , musíme napsat kód, který je nejprve převede na celá čísla a poté je dělí jedno druhým. Tento kód může snadno vyvolat dvě výjimky. jeden z nich, EConvertError

Procedure TForm1.Button1Click(Sender: TObject); var Num1,Num2: Celé číslo; begin try Num1:= StrToInt(Edit1.Text);

Num2:= StrToInt(Edit2.Text); ShowMessage("Result: " + IntToStr(Num1 div Num2)); kromě ShowMessage("Tato čísla nemůžete dělit");

ShowMessage("Result: " + IntToStr(Num1 div Num2)); konec; konec; Ačkoli můžete napsat obslužnou rutinu pro zachycení všech výjimek, měli byste se snažit zpracovat pouze konkrétní výjimky. Konkrétní výjimku můžete zpracovat pomocí vyhrazeného slova na

, který má následující syntaxi: Některé-výjimka dělat

do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:
Zpracování_výjimek;
operátor(é)
ShowMessage("Result: " + IntToStr(Num1 div Num2)); design Ačkoli můžete napsat obslužnou rutinu pro zachycení všech výjimek, měli byste se snažit zpracovat pouze konkrétní výjimky. Konkrétní výjimku můžete zpracovat pomocí vyhrazeného slova on-do
ShowMessage("Result: " + IntToStr(Num1 div Num2)); lze použít pouze v rámci obsluhy výjimky: Ačkoli můžete napsat obslužnou rutinu pro zachycení všech výjimek, měli byste se snažit zpracovat pouze konkrétní výjimky. Konkrétní výjimku můžete zpracovat pomocí vyhrazeného slova operátor(é);

Výjimka Některé-výjimka Zpracování_výjimek; K oddělení hodnot zadaných v komponentách Other_Exception jeden z nich, Jeho_Zpracování;

Kdykoli je to možné, je lepší použít konstrukt ke zpracování různých výjimek

. Můžete například zpracovat výjimku Některé-výjimka, zobrazí chybovou zprávu a výjimku - upozornění uživatele, že druhé číslo se nemůže rovnat nule, a jeho automatické nahrazení jedničkou..

do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:
Zpracování_výjimek;
operátor(é)
Procedure TForm1.Button1Click(Sender: TObject); var Num1,Num2: Celé číslo; begin try Num1:= StrToInt(Edit1.Text); design Ačkoli můžete napsat obslužnou rutinu pro zachycení všech výjimek, měli byste se snažit zpracovat pouze konkrétní výjimky. Konkrétní výjimku můžete zpracovat pomocí vyhrazeného slova Num2:= StrToInt(Edit2.Text);
Procedure TForm1.Button1Click(Sender: TObject); var Num1,Num2: Celé číslo; begin try Num1:= StrToInt(Edit1.Text); lze použít pouze v rámci obsluhy výjimky: ShowMessage("Result: " + IntToStr(Num1 div Num2)); operátor(é);
- upozornění uživatele, že druhé číslo se nemůže rovnat nule, a jeho automatické nahrazení jedničkou.
kromě on EConvertError do ShowMessage("Jedno z čísel je nesprávné");
příkazy pro zpracování výjimek;

on EDivByZero do begin ShowMessage("Dělen nemůže být roven 0");

Edit2.Text:= "1"; Edit2.SetFocus; konec; // Dokončení konstrukce na EDivByZero do end; konec; Edit2.SetFocus; Pokud design

použít ke zpracování konkrétních výjimek, musíte také napsat kód pro zpracování chyb, o kterých nebudete vědět.

Edit2.SetFocus; Chcete-li zpracovat výjimky, které nemůžete zpracovat specifickým způsobem, můžete přidat část do obslužné rutiny výjimky jiný na

His_Operation; Pokud předáte funkce dělat K oddělení hodnot zadaných v komponentách Handling_All_Other_Exceptions; Vyhazování výjimek Vyhrazené slovo

Jednotka Jednotka1; rozhraní používá Windows, zprávy, SysUtils, varianty, třídy, grafiku, ovládací prvky, formuláře, dialogy, StdCtrls; typ TForm1 = class(TForm) Edit1: TEdit;

Edit2: TEdit;

Tlačítko1: TButton; Některé-výjimka procedure Button1Click(Sender: TObject);

ShowMessage("Result: " + IntToStr(Num1 div Num2)); private ( Private deklarace ) public ( Public deklarace ) function CustomStrToInt(const s:string): Integer; Ačkoli můžete napsat obslužnou rutinu pro zachycení všech výjimek, měli byste se snažit zpracovat pouze konkrétní výjimky. Konkrétní výjimku můžete zpracovat pomocí vyhrazeného slova operátor(é);

konec; var Form1: TForm1; implementace ($R *.dfm) ( TForm1 ) procedure TForm1.Button1Click(Sender: TObject); var Num1, Num2: Celé číslo; begin Num1:= CustomStrToInt(Edit1.Text); Num2:= CustomStrToInt(Edit2.Text); ShowMessage(IntToStr(Num1 div Num2)); konec; function TForm1.CustomStrToInt(const s: string): Integer; var ErrorCode: Integer; begin Val(s, Result, ErrorCode);

if ErrorCode 0 then begin if s = "" then raise EConvertError.Create("Prázdný řetězec nelze použít") jinak raise EConvertError.Create("Ahoj. "" + s + "" nelze převést na celé číslo" );

konec; konec; konec.

Použití objektu výjimky Design umožňuje dočasně získat objekt výjimky pomocí následující syntaxe Num2:= CustomStrToInt(Edit2.Text);.

Identifikátor: Výjimka
Jako identifikátor se obvykle používá velké písmeno

E

Jednotka Jednotka1; rozhraní používá Windows, zprávy, SysUtils, varianty, třídy, grafiku, ovládací prvky, formuláře, dialogy, StdCtrls; type ENoUpperCaseLetters = class(Exception); TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit;

Tlačítko1: TButton;

Edit2.Text:= "1"; do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: procedure Button1Click(Sender: TObject); private ( Private deklarace ) public ( Public deklarace ) function CountUpperCase(const s: string): Integer; konec; var Form1: TForm1; implementace ($R *.dfm) ( TForm1 ) procedure TForm1.Button1Click(Sender: TObject); var Cnt: Integer; begin try Cnt:= CountUpperCase(Edit1.Text); operátor(é) Titulek:= IntToStr(Cnt) + " velká písmena. "; kromě na E: ENoUpperCaseLetters do Caption:= E.Message; end; end; function TForm1.CountUpperCase(const s: string): Integer; var ch: Char; begin Result:= 0; for ch in s do if ch v ["A".."Z"] then Inc(Result (Vyvolat výjimku, pokud nejsou žádná velká písmena) if Result = 0 pak zvýšit ENoUpperCaseLetters.Create("No velká písmena"); Ochrana alokace zdrojů

do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:
...
umožňuje postavit dva
...
příkazy pro zpracování výjimek;

jiný blok do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:: handler, blok ochrany výjimek a prostředků. Blok obsluhy výjimek je vytvořen pomocí vyhrazeného slova umožňuje postavit dva a blok ochrany zdrojů - pomocí vyhrazeného slova do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: konečně do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: Syntaktická struktura do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: Blok ochrany zdrojů v Delphi vypadá takto: umožňuje postavit dva konečně do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:.

Zpracování výjimek a bloky ochrany zdrojů se používají odlišně a fungují odlišně. Příkazy obslužné rutiny výjimek se provádějí pouze v případě, že příkazy v bloku vygeneroval výjimku a příkazy v bloku do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: jsou vždy provedeny, i když jsou příkazy v bloku do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto: nehodil žádnou výjimku. Pokud v bloku velká písmena.

bude vyvolána výjimka, řízení bude přeneseno do bloku final a bude proveden čistící kód. Pokud v bloku
do chráněného bloku kódu. Chráněný blok kódu je takový, který může reagovat na nějakou výjimku. V Delphi vypadá chráněný blok takto:
výjimky nenastanou, příkazy v bloku
umožňuje postavit dva
budou provedeny po příkazech v bloku
příkazy pro zpracování výjimek;

Blok ochrany zdrojů se často používá k zajištění správného uvolnění dynamicky vytvářených objektů. Například dynamická tvorba modální forma musí být vždy chráněna blokem zkuste-konečně.

Procedure TForm1.Button1Click(Sender: TObject); var NewForm: TForm; begin NewForm:= TForm.Create(Self);

zkuste NewForm.ShowModal; konečně NewForm.Free; konec; konec; zkuste-konečně.

Níže uvedený výpis ukazuje více

krátká cesta jeden z nich, dynamicky vytvářet blokově chráněný formulář

Procedure TForm1.Button1Click(Sender: TObject); začněte s TForm.Create(Self) zkuste ShowModal;

konečně zdarma; jeden z nich, konec; konec;

Dalším rozdílem mezi bloky pro zpracování výjimek a bloky pro zpracování zdrojů je to, že blok zpracování zdrojů nezpracovává výjimky. Tímto způsobem, pokud dojde k výjimce, bude předána první dostupné obsluze výjimky. Pokud například spustíte následující kód, pak výjimka

způsobí, že výchozí obsluha výjimky zobrazí chybovou zprávu informující uživatele, že došlo k výjimce.

Procedure TForm1.Button1Click(Sender: TObject); začněte s TForm.Create(Self) zkuste (Vyhoďte výjimku EDivByZero, protože hodnota tagu je 0) Caption:= IntToStr(Top div Tag);

ShowModal; konečně zdarma; konec; konec; Pokud chcete vyřídit výjimku(nebo jakákoli jiná výjimka) uvnitř bloku ochrany prostředků, musíte napsat vnořený blok obsluhy výjimek. Následující seznam ukazuje, jak by měla vnořená obslužná rutina výjimek vypadat uvnitř bloku ochrany prostředků. Bloky ochrany zdrojů můžete také vnořit do jiných bloků ochrany zdrojů nebo bloků zpracování výjimek. Procedure TForm1.Button1Click(Sender: TObject); začněte s TForm.Create(Self) zkuste zkusit Caption:= IntToStr(Top div Tag);

kromě EDivByZero do Caption:= "Tag = 0"; Pokud chcete vyřídit výjimku konec; ShowModal; konečně zdarma; konec; konec;

ZMĚNA VÝCHOZÍ OBSLUHY VÝJIMEK konečně zdarma; Globální objekt TExceptionEvent. konečně zdarma; Postup, který událost zpracovává , má dva parametry: objekt Odesílatel Design.

a objekt postup TMainForm.}


Přejděte na začátek