2005年11月 5日(土) 17時48分13秒 [C++ Builder]
フォーム表示直後に実行されるメソッド OnShowed を作る
フォームを表示させた直後(OnShowやOnPaintイベントの直後)に何らかの処理を実行させたいことがよくあります。でも、OnShowイベントは、フォームの表示直前に発生するので、OnShowメソッド内に記述した内容は、「フォームが表示される前」に実行されてしまいます。
では、フォームを表示させた直後に何らかの処理を実行させるには、どこに記述すればいいか?
…というと、どうやら、そんなメソッドは用意されていないようです。
仕方がないので、フォームの表示直後に実行されるイベント「 OnShowed イベント」を作ってしまいましょう。…と思い立ちました。思い立ったというか、必要に迫られたというか…。
ネットで検索したところ、Delphiでの実現方法を解説したページはヒットしましたが、C++ Builderでの方法は見つけられませんでした。
幸い、C++ Builder ML の過去ログにいくつかヒント(というかほぼ答えなんだけど)がありましたので、それらを合わせて、次のように実現しました。
まずは、ヘッダーファイル側。( Hoge.h )
上部で独自のメッセージを定義します。+100ってのは適当です。+1でもいいと思います。あんまりでかいとダメみたいです。^^;
#define UM_SHOWED (WM_USER + 100)
そして、そのメッセージが来たときに呼び出されるメソッド(メッセージハンドラ) OnShowed メソッドを宣言しときます。
void __fastcall OnShowed( TMessage &Msg ); // フォーム表示直後のイベント関数
UM_SHOWEDメッセージが来たらOnShowed関数を実行してね…という、メッセージとハンドラの割り当てを記述します。
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER( UM_SHOWED, TMessage, OnShowed);
END_MESSAGE_MAP( TForm )
以上をヘッダーファイルに記述します。
んで、こんどはソースファイル側。( Hoge.cpp )
OnShowイベントの直後にOnShowedイベントが発生するよう、OnShowメソッドを次のように記述しときます。
{
// フォーム描画直後に処理を実行するようメッセージを送信
PostMessage( Handle, UM_SHOWED, 0, 0 );
}
PostMessageによって、OnShowイベントの終了直後(つまりフォームの描画が完了した後)にUM_SHOWEDメッセージを送信させます。これで、OnShowの直後にOnShowedが実行されます。
※SendMessageじゃなくてPostMessageなのは、SendMessageだとすぐにメッセージを送信してしまうので、結局OnShowイベント中に送信してしまい、フォームの表示前に実行してしまうからです。PostMessageは、今やってる作業がアイドルになってから(=ここではフォームの表示が完了してから)メッセージを送信するので、OnShowイベントの終了後(=フォームの表示後)に実行されるわけです。
というわけで、その OnShowedメソッド本体を作成します。
{
// On Showed
// ここにフォーム表示後に実行したいコードを書く。
}
以上で、フォーム描画直後に実行される OnShowed イベントが出来上がりました。
めでたし、めでたし。
つーか、なんでこういうイベントが最初から用意されてないんでしょうかね?(^^;)
参考文献は次の通り。参考文献というか元ネタというか、ほとんど正解が載ってるようなもん。(^^;)
- WEB: N.E.SITE - Delphi 工房 - Tips - フォーム表示後のイベント
- ML: [builder:20613] Re: 初期化の処理のタイミング
- ML: [builder:11181] RE:Re: OnPaintイベントの後のイベントってないの?
この日記へのコメントはお気軽に! コメント数:0 トラックバック数:0
| « 文字コードの判別って難しいねえ… |
前後のエントリ < 旧 / 新 > | RSS自動生成ソフト 開発進行中 » |
このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)
コメント数: 0件