C++Builderアプリケーションの起動時のイベント

掲示板などの質問を見ていると、初期化処理を行うイベントに不適切なイベントを使用して、はまっているのを見かけます。

そこで、アプリケーションを起動したときのイベントを整理してみます。

メンバ関数が呼ばれる順番

アプリケーションが起動したときに、メインフォームのメンバ関数が呼ばれる順番は次のようになります。
(C++Builder 2010で確認しました。)

コンストラクタ -> OnCreate -> OnShow -> OnActivate -> OnResize -> OnPaint -> …

コンストラクタ

一番最初に呼ばれるのはコンストラクタです。
フォーム上のコンポーネントにもアクセスできます。
基本的な初期化処理はここで行います。

OnCreate

C++Builderでは、OnCreateイベントの使用は推奨されていません。
代わりにコンストラクタを使用します。

OnShow

フォームが表示されるときに呼ばれます。
アプリケーション起動時の他に、フォームのVisibleプロパティがtrueになったときやShowメソッドが呼ばれます。

起動時に一度だけ行う処理を記述するには、不適です。

OnActivate

OnActiveイベントは、フォームがフォーカスを受け取ったときに呼ばれます。

OnPaint

OnPaintイベントは、フォームが再描画されたときに呼ばれます。

OnResize

OnResizeは、コントロールのサイズが変更された直後に発生します。
起動後もフォームのサイズが変更されるたびに呼ばれます。

TApplicationEvents::OnIdle

TApplicationEvents::OnIdleイベントは、アプリケーションがアイドル状態になったときに呼ばれます。

アプリケーションの起動時では、アプリケーションの起動時の処理を一通り終えて、フォームが表示された後に呼ばれます。

コンストラクタ -> OnCreate -> OnShow -> OnActivate -> OnResize -> TApplicationEvents::OnIdle

このイベントを上手に活用することで、フォームの初期化処理が楽になります。

まとめ

起動時の初期化処理を行う場所はは、メインフォームのコンストラクタとTApplicationEvents::OnIdleイベントを使い分けるといいでしょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください