|
|
||||
Tips > |
|||||
システムエラーを非表示(SetErrorMode) |
更新 : 2010/05/28 |
||||
|
|
||
解説: 重大なエラーが発生すると、OS からのエラーダイアログが表示されます。 ユーザーへのメッセージとしては、このダイアログでたいがい間に合います。ただ、内容によってはアプリケーション特有のメッセージを表示したい場合があります。 たとえば、外部メディアからファイルを読み込み、処理中なのにメディアが抜かれた、などでは、「ドライブにディスクがありません」 というメッセージより、ユーザーをサポートするようなメッセージの方が適切です。 ここでは、 FD からソフトを起動し、実行中に FD を抜いたとき表示されるエラーメッセージに対処してみます。システムに任せないで、独自に用意したメッセージを表示させています。 使用例: FD から "Project1.exe" を起動後(実行中のまま)、FD を抜き BitBtn1 をクリックしてアプリを終了させます。通常はシステムエラーメッセージが出力されますが、記述した独自メッセージが表示されます。 準備としては、BitBtn をひとつ適当に配置するだけです。 Kind プロパティに bkClose を設定しておいてください。 OnCloseQuery イベントハンドラで、OS のエラーダイアログが出ないように SetErrorMode 関数を設定します。この関数は引数に SEM_FAILCRITICALERRORS を指定すると、OS からのエラーダイアログが表示されないようになります。 CanClose にファイルの存在結果を代入しておきます。 最後にシステムエラーに対応したメッセージを Exception の引数に記述して終わりです。 SetErrorMode 関数は、エラーが出そうな場面で使うと効果的ですので、利用してみてください。 //------------------------------------------------------------------- void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { // 以前のモードが返る UINT OldMode = SetErrorMode(SEM_FAILCRITICALERRORS); // ファイルの存在結果を代入 CanClose = FileExists(Application->ExeName); // 以前のモードに戻す SetErrorMode(OldMode); if (!CanClose) throw Exception("FD を入れてください。 "); } //------------------------------------------------------------------- |