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

CBアプリ工房


Tips >   

GetLastActivePopup で 3 秒後に MessageBox を閉じる 

更新 : 2009/10/30

 



解説:
アプリケーションを作成していると、何かの処理に応じて、一定期間メッセージを表示して、自動的に消したい場面があります。
しかし通常、MessageBox などは表示しても、ユーザーに [OK] ボタンをクリックしてもらい閉じなければなりません。自動的に閉じることができるのでしょうか?

使用例:
Button1 をクリックすると MessageBox を表示して、3 秒間経過後、自動的に閉じています。

コンポーネントは、 Timer と Button を適当に配置するだけです。

コンストラクタで Timer1 の Enabled を false にしておきます。
Button1 をクリックすると、Timer1 の Interval を 3000 ミリ秒に設定して、MessageBox を表示します。
その後、Timer1 が動いて、GetLastActivePopup を PostMessageすることで MessageBox が閉じられます。

このように GetLastActivePopup を使うと直前までアクティブだったウィンドウが分かるので、IDCANCEL を投げると閉じることが可能になります。

※他に EndDialog を使う方法もありますので参考にしてください。

//-------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Timer1->Enabled = false;
}
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Timer1->Interval = 3000;
    Timer1->Enabled = true;

    Application->MessageBox("3 秒後に終了します。しばらくお待ちください... ",
                                         "処理中...", MB_OK);
}
//-------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Timer1->Enabled = false;

    // 3 秒後に MessageBox を閉じる
    PostMessage(GetLastActivePopup(Application->Handle), WM_COMMAND, 
                       IDCANCEL, 0);
}
//-------------------------------------------------------------------



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