ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


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 を入れてください。 ");
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.