このサンプルプログラムで使用したように、ActivateメソッドはPowerCOBOLで作成したActiveXコントロールを別画面として開く場合に利用します。
このように、ActiveXコントロールを別画面として表示することを、COMの用語でアウトプレースアクティベートと呼び、その状態をアウトプレースアクティブ状態と呼びます。また、別画面として表示しないで、コンテナ(フォーム)上に表示することをインプレースアクティベートと呼び、その状態をインプレースアクティブ状態と呼びます。
逆に、Deactivateメソッドは、別画面として開いているActiveXコントロールを閉じる場合に利用します。
このように、Deactivateメソッドにより、アウトプレースアクティベート状態を終了することを、COMの用語でアウトプレースデアクティベートと呼びます。また、インプレースアクティベート状態のActiveXコントロールがアウトプレースアクティベートによりインプレースアクティベート状態でなくなることを、インプレースデアクティベートと呼びます。
つまり、このサンプルプログラムでの動作は、ActiveXコントロールの動作および状態と以下のように対応しています。
アプリケーションを起動する。
→コンテナ上にインプレースアクティベートされ、インプレースアクティブ状態になります。
[別画面で開く]ボタンをクリックする。
→コンテナ上のActiveXコントロールはインプレースデアクティベートされ、かつ、アウトプレースアクティベートされて、アウトプレースアクティブ状態になります。
[別画面を閉じる]ボタンをクリックする。
→ActiveXコントロールはアウトプレースデアクティベートされ、かつ、インプレースアクティベートされて、インプレースアクティブ状態になります。
PowerCOBOLでは、ActiveXコントロールは、つねにインプレースアクティブ状態またはアウトプレースアクティブ状態になっています。ActiveXコントロールの状態と呼び出したメソッドに対応するActiveXコントロールの動作を、以下に示します。
ActiveXコントロールの状態 | Activateメソッド | Deactivateメソッド(*1) |
---|---|---|
インプレース | インプレースデアクティベートされ、アウトプレースアクティベートされる。 | 何も起きない。 |
アウトプレース | フォーカスが与えられ、最前面に表示される。(*2) | アウトプレースデアクティベートされ、インプレースアクティベートされる。 |
(*1)CloseFormメソッドを呼び出した場合および[閉じる]ボタンをクリックした場合も同様です。
(*2)他のウィンドウの状態により、最前面に表示されない場合もあります。