|
|
||||
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); } //------------------------------------------------------------------- |