サイレント例外
VCL 例外クラス への移動
VCL アプリケーションは、コードが特別に処理しない、ほとんどの例外について、例外オブジェクトから渡されるメッセージ文字列を表示するメッセージ ボックスを表示することで処理します。 また、「サイレント」例外を定義することも可能です。これは、デフォルトでは、アプリケーションにエラー メッセージを表示させません。
サイレント例外は、ユーザーに例外をレポートする必要はないが、オペレーションは中止したい、といった場合に便利です。 オペレーションの中止は、Break や Exit のプロシージャを使用して、ブロックから抜けることに似ていますが、多層レベルに入れ子になったブロックから一気に抜けることができます。
サイレント例外は、すべて、標準例外型 EAbort の下位クラスです。 VCL アプリケーションのデフォルト例外ハンドラは、到達したすべての例外のエラー メッセージ ダイアログ ボックスを表示しますが、EAbort から派生したものついては例外となります。
メモ: コンソール アプリケーションの場合、エラーメッセージ ダイアログは、処理されなかった EAbort 例外についても表示されます。
サイレント例外用のショートカットがあります。 手動でオブジェクトを構築する代わりに、Abort プロシージャを呼び出すことができます。 Abort は、自動的に EAbort 例外を発生させ、これは、エラー メッセージを表示せずに、現在のオペレーションを抜けます。
メモ: Abort と abort には違いがあります。 abort は、アプリケーションを強制終了します。
次のコードでは、オペレーションを中止するシンプルな例を示します。 空のリストボックスとボタンがあるフォーム上に、次のコードをボタンの OnClick イベントにアタッチします:
procedure TForm1.Button1Click(Sender: TObject);
var
I, J: Integer;
begin
for I := 1 to 10 do{ loop ten times }
for J := 1 to 10 do {loop ten times }
begin
ListBox1.Items.Add(IntToStr(I) + IntToStr(J));
if I = 7 then Abort;{ abort after the 7th iteration of outer loop}
end;
end;
この例では、Abort は、実行のフローが内部ループだけでなく、内部および外部のループの中断させてしまう点に注目してください。