いわゆる例外とは、プログラム自体の問題や、プログラム実行中のユーザーの不適切な操作によって発生する一時的なエラーを指します。
プログラムの実行を停止し、誤った結果を生成します。 Delphi でプログラムを書いたことがある人なら誰でも例外についてよく知っているでしょう。例外の原因
NULL ポインターへの参照、範囲外の代入、ゼロによる除算など、さまざまな要因が例外を引き起こす可能性があります。異常事態に対して適切な措置を講じないと、
不適切な取り扱いをすると、プログラム全体がクラッシュする可能性があります。幸いなことに、Delphi は発生する可能性のあるほぼすべての例外を自動的に処理できます。
対処する。
1. Delphi が例外を自動的に処理する簡単な例
1. Delphi (3.0) 統合環境で、[ツール]、[環境オプション] メニューを選択し、表示される環境で
[オプション] ウィンドウ (左下) の [PReferences] ページに、[例外でブレーク] オプションがあります。このオプションはデフォルトで
ステータスが選択されているため、Delphi 統合環境でプログラムを実行中に例外が発生した場合、プログラムは自動的に中断され、復帰します。
Delphi のデバッグ状態では、プログラマがコードを変更できるように、カーソルは例外が発生したコード上に留まります。このオプションをクリックして使用不可にします
チェックを入れてOKです。
2. 新しいプロジェクトを作成して Excep.dpr として保存し、対応するユニットを Excpunit.pas として Form1 に保存します。
そこに TmaskEdit コンポーネントを配置し、その EditMask プロパティを Date に設定してから、Tbutton コンポーネントを配置してダブルクリックします。
OnClick イベントを次のように記述します。
プロシージャ TForm1.BitBtn1Click(送信者: TObject);
var k:整数;
始める
k:=0;
k:=9 div k;{0 による除算例外がここで生成されます}
終わり;
3. プログラムを保存して実行します。MaskEdit1 に 1 つまたは 2 つの数字を入力して Enter を押すだけで、これが生成されます (覚醒とも呼ばれます)。
例外が発生すると、次のウィンドウが表示されます。
これは、MaskEdit ボックスに入力されたデータが不完全であるため、例外が発生します。
「OK」の後、プログラムは実行を続けます。 Button1 をクリックすると、別の同様のウィンドウが表示されます。
ゼロ除算例外。
2. Delphi の異常事態に対するプロンプトは英語ですが、中国人は英語を使用しません。これらの例外をインターセプトし、次の方法で実装できます。
中国語のヒント。具体的な手順は次のとおりです。
1. Button1 の OnClick イベントを次のように変更します。
プロシージャ TForm1.BitBtn1Click(送信者: TObject);
var k:整数;
始める
k:=0;
試す
k:=9 div k;
を除外する
showmessage('除数をゼロにすることはできません');
終わり;
終わり;
2. プログラムを保存して実行します。Button1 をクリックした後に表示されるプロンプト ボックスは、中国語のメッセージ「除数をゼロにすることはできません」に置き換えられます。使用
try...excel...end ステートメントは、例外を処理する一般的な方法です。予約語 try の後のステートメントが実行されます。
例外が発生した場合は、予約語の else と end の間のステートメントが実行され、それ以外の場合は end の後のステートメントが実行され、Delphi のステートメントが置き換えられます。
例外のデフォルトの処理。もう 1 つの同様のステートメントは try...finally...end です。これは try...excel.. と同じです。
....end との違いは、try の後のステートメントが例外を生成するかどうかに関係なく、finally の後のステートメントは必ず実行されることです。
ただし、TmaskEdit ボックスによって生成されるような例外の場合、try ステートメントを使用しても、見つけることができないため無力です。
Try ステートメントを作成する場所。別の方法で解決するしかありません。
3. Delphi のすべてのプロジェクトには、目に見えないオブジェクトである Tapplication オブジェクトがあります。我々はできる
OnException イベントを変更することで、特別な例外を制御できます。具体的なメソッドは次のとおりです。
1. Form1 のクラスで MyException という処理を宣言します。この処理は、Tapplication の OnException イベントに関連します。
同じパラメータ:
公共
{公的宣言}
プロシージャ MyException(Sender:TObject;E:Exception);
2. プロセス コードを記述します。
プロシージャ TForm1.MyException(Sender:TObject;E:Exception);
始める
E が EDBEditError の場合、showmessage('入力がルールに準拠していません')
それ以外
Application.ShowException(E); {デフォルトの例外処理の呼び出し}
終わり;
3. Form1 の OnCreate イベント内の Tapplication の OnException イベントに値を割り当てます。
プロシージャ TForm1.FormCreate(送信者: TObject);
始める
Application.OnException :=MyException;
終わり;
4.プログラムを保存して実行し、MaskEdit ボックスに 1 つまたは 2 つの数字を入力して Enter を押すと、中国語のプロンプト ボックスが表示されます。
元の英語のプロンプト ボックスを置き換えます。
4. ここで皆さんに次の 3 つの点に注意していただきたいと思います。
1.Delphi は、すべての例外を 1 つのクラス、つまり例外クラス (Exception) にまとめます。
特殊なケース、c:program ファイルまたは landDelphi 3source tlsys ディレクトリの sysutils.pas
Exceptionクラスの定義があります。
2. Tapplication オブジェクトは、プログラム内で発生した未処理のエラーを処理するためのプロセス HandleException を提供します。
例外イベント。Tapplication の OnException イベントに値を割り当てると、HandleException は新しいイベントを呼び出します。
デフォルトのエラーメッセージ表示を置き換える手順。ハンを実現するために、表示されるコンテンツを独自のプロセスで自由にアレンジします。
変身効果。
3. IF 判定文を使用して、指定された例外の名前を取得する簡単な方法を使用できます。
記事の冒頭の例に戻ります。ここでは、「例外で中断」オプションを選択し、プログラムを再度実行して、次のように入力します。
数値が不適切な場合、MaskEdit1 で例外が生成され、次のウィンドウが表示されます。
ウィンドウの 2 行目の EDBEditError は、この記事のプログラムのコードの名前です。
E が EDBEditError の場合、showmessage('入力が要件を満たしていません')
この名前に基づいて書かれました。例外の正確な名前がわからない場合は、ここで情報を取得できます。これを使うと
Delphi のデフォルトの例外処理を置き換えたので、例外イベントを処理するときは注意してください。
これにより、システムがクラッシュする可能性があります。
上記のプログラムは Windows 95 Delphi 3.0 で正常に動作します。