例外のメッセージを正確に表示する
例外を捕捉したApplicationオブジェクトは、例外のメッセージをダイアログで表示します。この時、メッセージがピリオド、感嘆符、疑問符など、シングルバイト文字の記号で終わっていない場合、ピリオドが自動的に追加されます。
例: "Index out of range" => "Index out of range."
この動作の問題点は、メッセージがマルチバイト文字の句読点で終わる時にも、ピリオドが追加されてしまうことです。
例: "インデックスが範囲を越えています。" => "インデックスが範囲を越えています。."
それを回避するには、ApplicationオブジェクトのOnExceptionにハンドラを設定し、このハンドラでメッセージの表示を代行します。例えば、次のようにします。
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationException(TObject* ASender, Exception* AException)
{
try {
Application->MessageBox(
AException->Message.c_str(),
Application->Title.c_str(),
MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
}
catch(...) {
// Prevent the endless loop of exceptions
}
}
//---------------------------------------------------------------------------
最終更新: 2008-08-17
戻る