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

Windows での SDIモード

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

info

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

SDIモード利用条件

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

SDIモードの有効化

アプリケーションで SDIモードを有効にするには、ストラクチャー設定ダイアログボックスの "インターフェース" ページ 内にある WindowsでSDIモードを使用する オプションがチェックするだけです。

有効化した後、アプリケーションを実際に SDIモードで実行するには、次のいずれかの方法があります:

  • 組み込みアプリケーション (スタンドアロンまたはクライアントアプリケーション) をビルドし、Windows で実行します。
  • Windows で 実行 メニューから アプリケーションをテスト(SDIモード) を選択します。
info

開発環境は MDI で実行されるため、アプリケーションをテスト(SDIモード) のメニューを選択して開発モードからランタイムモードに切り替えることは、アプリケーションを再起動することを意味します。

SDIモードでのアプリケーションの管理

4Dアプリケーションを SDIモードで実行するために、特別な実装は必要ありません。既存のメニューバーは自動的に SDIウィンドウへと移されます。 しかしながら、以下に挙げられている特定の原則に注意する必要があります。

ウィンドウ内のメニュー

SDIモードでは、同プロセス中に開かれたすべてのドキュメントタイプウィンドウ (たとえばフローティングパレットはこれに含まれません) には自動的にプロセスメニューバーが表示されます。 ただし、プロセスメニューバーが非表示の状態でも、メニュー項目のショートカットは有効です。

メニューは、コンテンツのサイズを変更することなくウィンドウの上部に追加されます:

このため、ウィンドウは MDIモードあるいは SDIモードのどちらにおいてもオブジェクトの位置を再計算することなく使用することができます。

スプラッシュスクリーン

  • ストラクチャー設定 において スプラッシュスクリーン インターフェースオプションが選択されていた場合、スプラッシュウィンドウは、MDIウィンドウであれば表示されていたメニューをすべて格納します。 MDIモード同様、スプラッシュスクリーンを閉じるとアプリケーションを終了することになるという点に注意してください。
  • スプラッシュスクリーンオプションが選択されていなかった場合、メニューは開かれているウィンドウにおいて、プログラマーの選択に応じて表示されます。

デバッガー

SDIモードで表示されている場合、デバッガーウィンドウ には 編集ボタン がありません。これは、開発環境に切り替えるにあたって実行を中断し、MDIモードでアプリケーションを再起動する必要があるためです。

自動終了

MDIモードで実行時、ユーザーによってアプリケーションウィンドウ (MDIウィンドウ) が閉じられると、4Dアプリケーションが終了します。 しかしながら、SDIモードで実行時、4Dアプリケーションにはアプリケーションウィンドウがなく、また開いているウィンドウをすべて閉じたとしても、必ずしもユーザーがアプリケーションを終了したいと思っているとは限りません (たとえばフェイスレスプロセスが熟考中かもしれません) が、場合によっては終了したいという場合もあります。

こういった場合を管理するため、SDIモードで実行されている 4Dアプリケーションには、以下の条件が満たされた場合に自動的に (QUIT 4D コマンドを呼び出して) 終了する機構が含まれています:

  • ユーザーがこれ以上アプリケーションとやりとりすることができない
  • 生きているユーザープロセスがない
  • 4Dプロセスあるいはワーカープロセスはイベント待機中である
  • Webサーバーが開始されていない
  • WebAdmin サーバーが開始されていない

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サポートされていません
info

Get application info コマンドを使用すると、Windows で現在実行中のモードを確認することができます。