メインコンテンツまでスキップ
バージョン: v19

Windows での SDIモード

Windows において、組みこみ 4Dアプリケーションを SDI (シングルドキュメントインターフェース) アプリケーションとして設定することができます。 SDIアプリケーションでは、それぞれのウィンドウが互いに独立し、それぞれが独自のメニューバーを持つことができます。 SDIアプリケーションは MDI (マルチドキュメントインターフェース) に対する概念で、MDI ではすべてのウィンドウが一つのメインウィンドウの中に含まれ、それに依存した作りになっています。

SDI/MDI という概念は macOS には存在しません。 この機能は Windows用アプリケーション専用のもので、関連オプションは macOS においてはすべて無視されます。

SDIモード利用条件

SDIモードは以下の実行環境に限り利用可能です:

  • Windows
  • 組み込みスタンドアロン4Dアプリケーション、またはクライアント4Dアプリケーション

SDIモードの有効化

アプリケーションにおいて SDIモードを有効化し使用する手順は次の通りです:

  1. ストラクチャー設定ダイアログボックスの "インターフェース" ページ内にある WindowsでSDIモードを使用する オプションをチェックします。
  2. 組み込みアプリケーションをビルドします (スタンドアロンまたはクライアントアプリケーション)。

その後、サポートされているコンテキスト (上記参照) において実行されると、組み込みアプリケーションは自動的に 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 windowSDIモードにおけるフローティングウィンドウのサポート (Controller form window) およびメニューバーの削除 (Form has no menu bar) のオプション
Menu bar heightメニューバーが 2行以上に折り返されている場合でも単一行のメニューバーのピクセル単位での高さを返します。 フォームウィンドウをともなわないプロセスからコマンドが呼ばれている場合には 0 を返します。
SHOW MENU BAR / HIDE MENU BARカレントの (コードが実行されている場所の) フォームウィンドウにのみ適用されます
MAXIMIZE WINDOWウィンドウはスクリーンサイズいっぱいまで最大化されます
CONVERT COORDINATESXY Screen はメインスクリーンが (0,0) に位置するグローバルな座標系です。 座標系の左側、あるいは上側にあるスクリーンについては、負の値の座標を持つことができ、右側、あるいは下側にあるスクリーンについては Screen heightScreen width から返される値より大き値を持つことができます。
GET MOUSEグローバル座標はスクリーンからの相対位置になります
GET WINDOW RECTwindow パラメーターに -1 を渡した場合、コマンドは 0;0;0;0 を返します
On Drop database methodサポートされていません