17時48分13秒 [C++ Builder]
フォームを表示させた直後(OnShowやOnPaintイベントの直後)に何らかの処理を実行させたいことがよくあります。でも、OnShowイベントは、フォームの表示直前に発生するので、OnShowメソッド内に記述した内容は、「フォームが表示される前」に実行されてしまいます。
では、フォームを表示させた直後に何らかの処理を実行させるには、どこに記述すればいいか?
…というと、どうやら、そんなメソッドは用意されていないようです。
仕方がないので、フォームの表示直後に実行されるイベント「 OnShowed イベント」を作ってしまいましょう。…と思い立ちました。思い立ったというか、必要に迫られたというか…。
ネットで検索したところ、Delphiでの実現方法を解説したページはヒットしましたが、C++ Builderでの方法は見つけられませんでした。
幸い、C++ Builder ML の過去ログにいくつかヒント(というかほぼ答えなんだけど)がありましたので、それらを合わせて、次のように実現しました。
まずは、ヘッダーファイル側。( Hoge.h )
上部で独自のメッセージを定義します。+100ってのは適当です。+1でもいいと思います。あんまりでかいとダメみたいです。^^;
そして、そのメッセージが来たときに呼び出されるメソッド(メッセージハンドラ) OnShowed メソッドを宣言しときます。
UM_SHOWEDメッセージが来たらOnShowed関数を実行してね…という、メッセージとハンドラの割り当てを記述します。
以上をヘッダーファイルに記述します。
んで、こんどはソースファイル側。( Hoge.cpp )
OnShowイベントの直後にOnShowedイベントが発生するよう、OnShowメソッドを次のように記述しときます。
PostMessageによって、OnShowイベントの終了直後(つまりフォームの描画が完了した後)にUM_SHOWEDメッセージを送信させます。これで、OnShowの直後にOnShowedが実行されます。
※SendMessageじゃなくてPostMessageなのは、SendMessageだとすぐにメッセージを送信してしまうので、結局OnShowイベント中に送信してしまい、フォームの表示前に実行してしまうからです。PostMessageは、今やってる作業がアイドルになってから(=ここではフォームの表示が完了してから)メッセージを送信するので、OnShowイベントの終了後(=フォームの表示後)に実行されるわけです。
というわけで、その OnShowedメソッド本体を作成します。
以上で、フォーム描画直後に実行される OnShowed イベントが出来上がりました。
めでたし、めでたし。
つーか、なんでこういうイベントが最初から用意されてないんでしょうかね?(^^;)
参考文献は次の通り。参考文献というか元ネタというか、ほとんど正解が載ってるようなもん。(^^;)
この日記へのコメントはお気軽に! コメント数:0件
コメント数: 0件