このドキュメントでは、次のトピックについて説明します。
イベントドリブンアプリケーションは、プログラムドリブンアプローチ以外の新しい開発アプローチです。 Natural は、この両方を提供しています。 イベントドリブンプログラミングでは、グラフィカルユーザーインターフェイスを通した入力に従って、アプリケーションが実行されます。
プログラムドリブンアプリケーションでは、イベントではなくアプリケーションが、実行するコードを制御します。 実行可能なコードの最初の行から実行が開始され、定義されたパスウェイに従ってアプリケーションを通過し、あらかじめ設定された順序で指示どおりに追加のプログラムを呼び出します。
イベントドリブンプログラミングでは、ユーザーアクションまたはシステムイベントに関連付けられているコードが起動されます。 したがって、コードの実行順序は、発生するイベント、つまりユーザーの行動に依存します。 これが、グラフィカルユーザーインターフェイスおよびイベントドリブンプログラミングの基本です。主体はユーザーで、コードはユーザーの行動に応答します。 イベントドリブンプログラムはキャラクタ指向のインターフェイスでも実行できますが、グラフィカルユーザーインターフェイスで実行する方がより一般的です。
ユーザーが何をするかは予測できないため、コードは実行時に状況を想定する必要があります。 例えば、アプリケーションでは、
ボタンを押す前にユーザーは編集エリアコントロールにテキストを追加している、などと想定します。想定をする場合、これらの想定が常に有効となるようにアプリケーションを構築する必要があります。 例えば、ユーザーにテキストを確実に追加させるために、あらかじめボタンを無効にしておき、編集エリアコントロールの CHANGE イベントが発生した場合にのみボタンを有効にします。
コードでは、特定の操作を実行しながら別のイベントを起動できます。 例えば、スクロールバーコントロールのスライダを動かすと、CHANGE イベントが起動されます。
以下の図は、プログラムドリブンアプリケーションとイベントドリブンアプリケーションの違いを示しています。
典型的なプログラムドリブンアプリケーションでは、以下の一連の手順が適用されます。
プログラムが端末に画面を送信します。
ユーザーは画面のデータフィールドに入力します。
ユーザーが Enter キーまたはファンクションキーを押します。
プログラムはユーザーの入力が有効かどうかを判断します。
データが有効な場合、END
ステートメントに達するまで処理が続けられます。
典型的なイベントドリブンアプリケーションでは、以下の一連の手順が適用されます。
ユーザーが画面上でアクションを要求します。
イベントハンドラコードはコンテキストに従ってバックグラウンドで対応します。
一定の条件が満たされると、実行されたイベントハンドラコードは他の Natural コード(ここではサブルーチン)を起動するか、または画面に制御を戻します。
プログラムドリブンアプローチでは、ユーザーは Enter キーとファンクションキーを通してコードと対話します。一方、イベントドリブンアプリケーションでは、ユーザーが特定のコード(イベントハンドラ)を起動します。 一般に、イベントドリブンアプリケーションでは、ユーザーの入力を待っている間はどのようなコードも実行されていません。同じ状況でもプログラムドリブンアプリケーションでは、INPUT
ステートメントが処理されている可能性があります。
グラフィカルユーザーインターフェイスプログラムでは、ユーザーによって開始される個々のイベントに対応するプログラムを作成する必要があります。
イベントとは、ダイアログまたはダイアログエレメントによって認識されるアクションのことです。 イベントドリブンアプリケーションは、イベントに応答してコードが実行されます。 各ダイアログまたは各ダイアログエレメントには、一連のイベントがあらかじめ定義されています。 これらのイベントの 1 つが発生すると、Natural は、関連付けられているイベントハンドラのコードを呼び出します。
プログラマは、アプリケーションのダイアログおよびダイアログエレメントが特定のイベントにどのように応答するかを指定します。 プログラムをイベントに応答させる場合は、そのイベントに対するイベントコードを作成します。
作成する各ダイアログまたは各ダイアログエレメントには、プログラム(イベントハンドラ)が応答できる一連のイベントが Natural によってあらかじめ定義されています。 イベントに応答することは簡単です。ダイアログとダイアログエレメントには、ユーザーアクションを認識し、それらに関連付けられているコードを実行する組み込み機能が備わっています。
すべてのイベントのコードを作成する必要はありません。 ダイアログオブジェクトをイベントに応答させる場合は、そのイベントに応答して Natural が実行するイベントコードを作成します。
典型的なイベントドリブンアプリケーションでは、以下の一連のアクションが実行されます。
ダイアログまたはダイアログエレメントがアクションをイベントとして認識します。 アクションはユーザーが起こすことができます(クリックやキーストロークなど)。
イベントに対応するイベントコードがある場合は、そのコードが実行されます。
アプリケーションは次のイベントを待ちます。
イベントに応答するために作成するイベントコードでは、計算の実行、入力データの取得、およびインターフェイスの一部の操作を実行できます。 Natural を使用して属性の設定値を変更することにより、ダイアログまたはダイアログエレメントを操作します。
注意:
繰り返し発生するイベントによって生じるカスケードイベントを、コードで作成しないようにしてください。 例えば、ユーザーがスクロールバーコントロールのスライダをドラッグすると、現在の SLIDER
属性の設定が自動的に変更され、CHANGE イベントが起動されます。 CHANGE イベントに関連付けられているコードでも現在の SLIDER
属性の設定が変更されていると、CHANGE イベントが再び起動され、現在の SLIDER
属性設定が再度調整され、CHANGE イベントがもう一度起動される、というふうに繰り返されます。 この速度では、あっという間にメモリが不足します。
以下では次のトピックについて説明します。
ダイアログは、イベントドリブンアプリケーションの中心的な Natural オブジェクトです。 イベントドリブンアプリケーションは、基本ダイアログを実行することによって開始されます。 OPEN DIALOG
ステートメントを指定すると、基本ダイアログから他の従属ダイアログを開くことができます。 プログラムドリブンアプリケーションとは異なり、これらのダイアログは通常はモードレス、つまり、エンドユーザーはすべての開いているダイアログを同時に処理することができます。
アプリケーションは、基本ダイアログが閉じられると終了します。
ダイアログは、ダイアログエディタで作成します。 マップエディタと同様に、ダイアログエディタは、ダイアログウィンドウとそのダイアログエレメント、グローバルデータエリア(GDA)、ローカルデータエリア(LDA)、パラメータデータエリア(PDA)、サブルーチン、および特定のイベントハンドラセクションの指定に基づいて、Natural オブジェクトを構築します。
ダイアログの実行時における、システム変数 *DIALOG-ID
によって識別されるランタイムインスタンスと、ダイアログウィンドウの GUI インスタンス(ハンドル。デフォルトのハンドル名は #DLG$WINDOW
)との間には違いがあります。
アプリケーションで複数のダイアログを使用する場合は、基本ダイアログウィンドウと他のダイアログをどのように関連付けるのかを指定する必要があります。 まず、アプリケーションを MDI(マルチドキュメントインターフェイス)にする必要があるかどうかを決める必要があります。
MDI アプリケーションを選択した場合、基本ダイアログは "MDI フレームウィンドウ" タイプに、従属ダイアログは "MDI 子ウィンドウ" タイプおよび "標準ウィンドウ" タイプにする必要があります。
非 MDI を選択した場合、アプリケーションは "標準ウィンドウ" タイプのダイアログのみを使用できます。
"標準ウィンドウ" タイプのダイアログには、"ポップアップ"、"モーダル"、または "ダイアログボックス" の各スタイルがあります。
ほとんどすべてのダイアログエレメントは、エンドユーザーとイベントドリブンアプリケーションとの対話を可能にする、ダイアログ内のグラフィック要素です。 ダイアログをダイアログエディタで開いて属性を設定すると(下記参照)、プログラマはウィンドウ内のダイアログエレメントを "作成" できます。通常、これは、メニューコントロール、ツールバー、およびその他の要素(プッシュボタンコントロールや入力フィールドコントロールなど)から構成されます。
ダイアログエレメントの "作成" とは、ダイアログエディタのメニューまたはツールバーからダイアログエレメントのタイプを選択し、マウスを使用して必要な位置に配置することを意味します。 また、グリッドを定義することもできます。グリッドを定義すると、ダイアログエレメントをグリッドに対して位置合わせできるので、配置操作が簡単になります。
属性はダイアログおよびダイアログエレメントのプロパティです。 ダイアログまたはダイアログエレメントの作成後にマウスでダブルクリックすると、対応する属性ウィンドウが表示されます。 その後、属性に値を設定できます。設定しない場合は、システムデフォルト値のままになります。 属性ウィンドウには、イベントハンドラウィンドウを開くプッシュボタンコントロールも含まれています。
イベントハンドラとは、イベントが発生すると起動される Natural コードのことです。 例えば、エンドユーザーがプッシュボタンコントロールをクリックすると、CLICK イベントが発生します。 イベントハンドラウィンドウでは、まず(属性を設定したばかりの)ダイアログまたはダイアログエレメントで有効なイベントのリストからイベントのタイプを選択する必要があります。 その後、コードウィンドウが有効になり、Natural コードを入力できます。
グローバルデータエリア(GDA)は、アプリケーション内の Natural オブジェクト間でデータフィールドを共有するために使用します。 アプリケーションごとに 1 つの GDA を指定できます。
ローカルデータエリア(LDA)には、ダイアログ専用のデータフィールドを格納します。
パラメータデータエリア(PDA)は、常にダイアログに存在します。 PDA は、OPEN DIALOG
ステートメントまたは SEND EVENT
ステートメントでパラメータをダイアログに渡すために使用します。 これらのステートメントでは、WITH
節でパラメータの名前を指定するか、またはパラメータを連続してリストすることによって、パラメータを渡します。 ダイアログのパラメータデータエリアウィンドウを使用すると、自由形式でパラメータデータを入力することができます。
インラインサブルーチンは、多くのイベントハンドラによって呼び出される使用頻繁の高いタスクに使う標準コードを定義します。 ダイアログウィンドウの[インラインサブルーチン]プッシュボタンコントロール経由で、インラインサブルーチンウィンドウにアクセスします。