Windows での SDIモード
概要
Windows において、組みこみ 4Dア プリケーションを SDI (シングルドキュメントインターフェース) アプリケーションとして設定することができます。 SDIアプリケーションでは、それぞれのウィンドウが互いに独立し、それぞれが独自のメニューバーを持つことができます。 SDIアプリケーションは MDI (マルチドキュメントインターフェース) に対する概念で、MDI ではすべてのウィンドウが一つのメインウィンドウの中に含まれ、それに依存した作りになっています。
SDI/MDI という概念は macOS には存在しません。 この機能は Windows用アプリケーション専用のもので、関連オプションは macOS においてはすべて無視されます。
SDIモード利用条件
SDIモードは以下の実行環境に限り利用可能です:
- Windows
- 組み込みスタンドアロン4Dアプリケーション、またはクライアント4Dアプリケーション
SDIモードの有効化
アプリケーションにおいて SDIモードを有効化し使用する手順は次の通りです:
- データベース設定ダイアログボックスの "インターフェース" ページ内にある WindowsでSDIモードを使用する オプションをチェックします。
- 組み込みアプリケーションをビルドします (スタンドアロンまたはクラ イアントアプリケーション)。
その後、サポートされているコンテキスト (上記参照) において実行されると、組み込みアプリケーションは自動的に SDIモードで実行されます。
SDIモードでのアプリケーションの管理
4Dアプリケーションを SDIモードで実行するために、特別な実装は必要ありません。既存のメニューバーは自動的に SDIウィンドウへと移されます。 しかしながら、以下に挙げられている特定の原則に注意する必要があります。
ウィンドウ内のメニュー
SDIモードでは、同プロセス中に開かれたすべてのドキュメントタイプウィンドウ (たとえばフローティングパレットはこれに含まれません) には自動的にプロセスメニューバーが表示されます。 ただし、プロセスメニューバーが非表示の状態でも、メニュー項目のショートカットは有効です。
メニューは、コンテンツのサイズを変更することなくウィンドウの上部に追加されます:
このため、ウィンドウは MDIモードあるいは SDIモードのどちらにおいてもオブジェクトの位置を再計算することなく使用することができます。
スプラッシュスクリーンについての注意:
- データベース設定において スプラッシュスクリーン インターフェースオプションが選択されていた場合、スプラッシュウィンドウは、MDIウィンドウであれば表示されていたメニューをすべて格納します。 MDIモード同様、スプラッシュスクリーンを閉じるとアプリケーションを終了することになるという点に注意してください。
- スプラッシュスクリーンオプションが選択されていなかった場合、メニューは開かれているウィンドウにおいて、プログラマーの選択に応じて表示されます。
自動終了
MDIモードで実行時、ユーザーによってアプリケーションウィンドウ (MDIウィンドウ) が閉じられると、4Dアプリケーションが終了します。 しかしながら、SDIモードで実行時、4Dアプリケーションにはアプリケーションウィンドウがなく、また開いているウィンドウをすべて閉じたとしても、必ずしもユーザーがアプリケーションを終了したいと思っているとは限りません (たとえばフェイスレスプロセスが熟考中かもしれません) が、場合によっては終了したいという場合もあります。
こういった場合を管理するため、SDIモードで実行されている 4Dアプリケーションには、以下の条件が満たされた場合に自動的に (QUIT 4D
コマンドを呼び出して) 終了する機構が含まれています:
- ユーザーがこれ以上アプリケーションとやりとりすることができない
- 生きているユーザープロセスがない
- 4Dプロセスあるいはワーカープロセスはイベント待機中である
- Webサーバーが開始されていない
quit (終了) 標準アクションが割り当てられているメニューが呼び出された場合、そのメニューがどこから呼ばれたものであろうと、アプリケーションは終了し、すべてのウィンドウが閉じられます。
ランゲージ
4D によって透過的に管理されるとはいえ、SDIモードではアプリケーションインターフェースの管理に関してこれまでと若干の差異が存在します。 4Dランゲージにおける特異性は以下の表にある通りです。
コマンド/機能 | Windows での SDIモードの特徴 |
---|---|
Open form window | SDIモードにおけるフローティングウィンドウのサポート (Controller form window ) およびメニューバーの削除 (Form has no menu bar ) のオプション |
Menu bar height | メニューバーが 2行以上に折り返されている場合でも単一行のメニューバーのピクセル単位での高さを返します。 フォームウィンドウをともなわないプロセスからコマンドが呼ばれている場合には 0 を返します。 |
SHOW MENU BAR / HIDE MENU BAR | カレントの (コードが実行されている場所の) フォームウィンドウにのみ適用されます |
MAXIMIZE WINDOW | ウィンドウはスクリーンサイズいっぱいまで最大化されます |
CONVERT COORDINATES | XY Screen はメインスクリーンが (0,0) に位置するグローバルな座標系です。 座標系の左側、あるいは上側にあるスクリーンについては、負の値の座標を持つことができ、右側、あるいは下側にあるスクリーンについては Screen height や Screen width から返される値より大き値を持つことができます。 |
GET MOUSE | グローバル座標はスクリーンからの相対位置になります |
GET WINDOW RECT | window パラメーターに -1 を渡した場合、コマンドは 0;0;0;0 を返します |
On Drop database method | サポートされていません |