例外処理をカスタマイズする

try ... except ... finaly で例外処理を記述していないブロックで例外が発生すると、Delphi標準の例外処理が実行されます。この時 TApplication クラスの Exceptionイベントが呼ばれます。このイベントを拾うと例外処理をカスタマイズすることができます。例えば例外のログを外部ファイルへ出力したり、例外時の画面をハードコピーしたりなどなど。

■ 例外処理をカスタマイズした例
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    procedure AppException(Sender: TObject; E: Exception);
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //イベントの関連づけ
  Application.OnException :=  AppException;
end;


procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
  //例外処理
  ShowMessage('エラーだよん' + #13#10 + E.Message);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c : integer;
begin
  a :=  StrToIntDef(Edit1.Text,0);
  b :=  StrToIntDef(Edit1.Text,0);
  c :=  (a div b);  //ゼロ除算の可能性あり
  Edit1.Text := IntToStr(c);
end;