FAQ

複数のウィンドウを同時に使うことはできますか

ID91
カテゴリーデータベースデザイン ユーザインターフェース
プラットフォーム

複数のウィンドウを同時に使うようにするためには、プログラミングが必要です。

4Dのプログラム環境

4Dはデータベースの器を定義することで、プログラムすること無しにデータを操作することができます。一方4Dには、非常に強力なプログラム言語が搭載されています。この4D言語を使ってプログラムを行うことができるようになると、OSでできることはほとんど全て制御が可能になります。

プログラムはメソッドと呼ばれる単位で管理され、メソッドは独立したプロセスメソッドとしていくつも登録できる他に、ボタンやポップアップメニューなどに付随するオブジェクトメソッドにボタンの動作をプログラムすることができます。またイベントを拾って動作させるようにプログラムすることや、全くウィンドウを使わないバックグラウンドで動作させるプログラムを書くこともできます。

4Dで複数のウィンドウを扱うようにするためには、ウィンドウとプロセスの関係を把握して、コントロールするプログラムをすることが重要です。

このように書くと尻込みされてしまうかもしれませんが、4Dで複数のウィンドウをコントロールすることは、プロセスさえ把握できれば問題なくプログラムすることができます。以下、ウィンドウについて、解説いたします。

アラートダイアログ

何かオペレータに注意を促すようなときに、メッセージだけが表示されたウィンドウを開くのはとても簡単です。例えば、ボタンが押されたときに動作するボタンオブジェクトメソッドに、たった1行だけ次のように記述したとします。

ALERT("ボタンが押されました")

このプログラムはボタンが押されると実行され、アラートダイアログウィンドウを表示し、そのウィンドウ上に「ボタンが押されました」と表示します。

処理のためのウィンドウを開く

自分でデザインしたフォームを新しいウィンドウに開くためには、次のようにメソッドに記述します。

$ref:=Open form window([Table1];"Form1")
DIALOG([Table1];"Form1")
CLOSE WINDOW($ref)

例えばボタンメソッドに記述しますと、ボタンを押すことで「[Table1];"Form1"」のフォームを新しいウィンドウにダイアログ表示します。

4D以外のアプリケーションと同時に利用するような環境では、CLOSE WINDOW のパラメータは必須と考えてください。

複数のウィンドウを同時に処理

前述の方法では、複数のウィンドウを同時に開いてそれぞれ独立させて処理をさせることはできません。しかしプログラムを工夫することで、別々のウィンドウを独立させて同時に処理させることができます。そのためには、それぞれのウィンドウが別々のプロセスで動作していなければなりません。

プロセスとはプログラム処理を行う単位で、プログラムを実行するときにはプロセスとよばれる単位で起動され、そのプロセスの中でプログラムされたコマンドが1つづつ順番に実行されて行くのです。そのため同時にプログラムを処理させるためには、複数のプロセスを同時に起動しなければなりません。4Dには、新しいプロセスを起動するコマンドがあるので、複数のプログラムを同時に処理させることが可能なのです。言い換えるなら、独立したウィンドウが互いに異なるプロセスで動作しているなら、ウィンドウ毎に同時に処理をさせることが可能になります。

例えば前述のメソッドと同じものをプロジェクトメソッドとして作成し「Method1」と名付けて保存します。念のためもう一度、メソッドの内容を確認しますと…

//Method1として作成
$ref:=Open form window([Table1];"Form1")
DIALOG([Table1];"Form1")
CLOSE WINDOW($ref)

…となっています。これを次のようにコマンドで呼び出します。

$ref:=New process("Method1";0)

この記述をボタンのオブジェクトメソッドに書いたなら、ボタンを押すたびに新しいウィンドウが表示され、そのどれもが独立して動作します。

メニューから起動

メニューから起動するなら、New process コマンドの記述をしなくとも、独立したプロセスを起動することができます。メニューエディタを使ってメニューを作成する時に、ひとつオプションを設定するだけです。

メニュー項目のオプション「新規プロセス開始」にチェックを入れてください。例えば、このチェックを入れたメニュー項目で駆動されるメソッドに、先ほどの「Mathod1」を指定すると、New process コマンドの記述を行ったのと同様に、このメニュー項目を選択するたびに独立して動作するウィンドウが開きます。

ウィンドウとプロセス

複数のウィンドウをコンントロールするために、ウィンドウとプロセスが1対1の関係であるように心がけてメソッドを記述することを心がけてください。もちろんツールや、その他の情報を同じプロセスで別ウィンドウにて表示することはあると思いますし、それを否定するものではありません。ですが、ウィンドウとプロセスを1対1の関係にすることが、ウィンドウコントロールを容易にする基本になります。

複数のウィンドウをコンントロールするために、ウィンドウとプロセスが1対1の関係であるように心がけてメソッドを記述しているような場合、CLOSE WINDOW コマンドは不要です。4Dはメソッドで記述されたプロセスの動作を終えると、つまりNew processで指定したメソッドが終了すると、不必要になったウィンドウを自動的に閉じます。

言い換えるなら、CLOSE WINDOW コマンドでウィンドウが閉じないようなケースは、まだフォームを表示するコマンド(DIALOG、MODIFY SELECTION等)が終了していないことを意味しています。ウィンドウを閉じるためには、CLOSE WINDOW コマンドではなく、フォームを表示するコマンドを終了させるコマンド(CANCEL、ACCEPT等)をフォーム上で実行して終了することが重要です。

まとめ

このように、一歩踏み込んでプログラムすることさえ決心することで、独立して動作するウィンドウは簡単に作ることが可能になります。独立して動作するウィンドウは、色々な応用が利くはずです。お試しください。