このドキュメントでは、次のトピックについて説明します。
イベントドリブンアプリケーションは、基本となるダイアログを実行することによって開始されます。 通常、エンドユーザーが起動したイベントによって、他のダイアログが開始されます。 アプリケーションは、基本となるダイアログが閉じられると終了します。
イベントドリブンアプリケーション内の任意の箇所からダイアログを開くには
OPEN DIALOG
ステートメントを使用します。
このステートメントによって、ダイアログがロードされ、ダイアログを開くときの処理が実行されます。
"ダイアログボックス" スタイルのダイアログ以外は、ダイアログが開くと制御が戻ります。 ダイアログボックススタイルのダイアログの場合は、ダイアログが終了したときにのみ制御が戻ります。
開くダイアログのパラメータデータエリアに BY VALUE
でパラメータが宣言されているか、またはダイアログが "ダイアログボックス" スタイルである場合を除き、渡されるパラメータには、ダイアログを開く処理(BEFORE-OPEN イベントおよび AFTER-OPEN イベント)の間のみアクセスできます。
イベントドリブン型 Natural アプリケーション内の任意の箇所でダイアログを開くには、以下の構文を使用します。
OPEN DIALOG operand1
|
[USING]
|
[PARENT] operand2
|
||||
[
|
[GIVING]
|
[DIALOG-ID] operand3
|
]
|
|||
WITH
|
operand4... | |||||
PARAMETERS-clause |
Operand1 は、開かれるダイアログボックスの名前です。 PARAMETERS-clause を使用する場合、operand1 は定数(カタログ化されたダイアログの名前)である必要があります。
Operand2 は、親のハンドル名です。
Operand3 は、ダイアログの作成時に返される一意のダイアログ ID です。 これは、フォーマット/長さ I4 で定義する必要があります。
ダイアログボックスを開いたときに、パラメータがダイアログボックスに渡されます。
ダイアログに渡すパラメータは operand4 として指定します。
PARAMETERS-clause を使用すると、選択的にパラメータを渡すことができます。
PARAMETERS [parameter-name=operand
4] _ END-PARAMETERS
|
注意:
operand1 が英数字定数で、ダイアログがカタログ化されている場合にのみ、PARAMETERS-clause を使用できます。
Parameter-name は、ダイアログのパラメータデータエリアセクションに定義されたパラメータの名前です。
渡すオペランドとパラメータ間のフォーマット/長さの矛盾を避けるには、『ステートメント』ドキュメントに記載されている、DEFINE DATA
ステートメントの BY VALUE
オプションの説明を参照してください。
operand4 のみを使用してパラメータを渡すと、以下の例のようなダイアログが開かれます。
/* The following parameters are defined in the calling dialog's parameter /* data area (not in the parameter data area of the dialog to be opened): 1 #MYDIALOG-ID (I4) 1 #MYPARM1 (A10) /* Pass the operands #MYPARM1 and 'MYPARM2' to the parameters #DLG-PARM1 and /* #DLG-PARM2 defined in the dialog to be opened: OPEN DIALOG 'MYDIALOG' USING #DLG$WINDOW GIVING #MYDIALOG-ID WITH #MYPARM1 'MYPARM2'
PARAMETERS-clause を使用して選択的にパラメータを渡すと、以下の例のようなダイアログが開かれます。
/* The following parameters are defined in the calling dialog's parameter /* data area (not in the parameter data area of the dialog to be opened): 1 #MYDIALOG-ID (I4) 1 #MYPARM1 (A10) /* Pass the operands #MYPARM1 and 'MYPARM2' to the parameters #DLG-PARM1 and /* #DLG-PARM2 defined in the dialog to be opened: OPEN DIALOG 'MYDIALOG' USING #DLG$WINDOW GIVING #MYDIALOG-ID WITH PARAMETERS #DLG-PARM1=#MYPARM1 #DLG-PARM2='MYPARM2' END-PARAMETERS
Natural では "持続性" という用語は、基本ダイアログのローカルデータエリアに定義されたデータはダイアログの稼働中は存在を保証されていることを示すために使用します。 グローバルデータエリアはアプリケーション実行中に変更される可能性があるため、グローバルデータエリアに定義されたデータには持続性がありません。
ダイアログを開くときにパラメータデータエリアを内部的に保存することによって、持続性のあるデータへの参照が維持されます。 以下の場合にこの参照が再使用されます。
ダイアログエレメントがイベントを受け取ったとき
1 つのダイアログから別のダイアログに渡されるすべてのパラメータが持続的であるとき、つまり基本ダイアログのローカルデータエリアを参照するとき
パラメータは以下の場合にアクセスできます。
ダイアログを開く際の BEFORE-OPEN および AFTER-OPEN イベント処理の間
すべてのパラメータが基本ダイアログのローカルデータエリアを参照する場合
以下の例は、2 つのパラメータが持続的で、もう 1 つのパラメータが持続的でない場合を示しています。 まず、基本ダイアログ A が ダイアログ B を開いてパラメータ #X
と #Y
を渡します。 次に、ダイアログ B がダイアログ C にパラメータ #X
と #Y
を渡します。 現在のダイアログ C 内のパラメータ #X
と #Y
は、ダイアログ B が閉じられても持続性があります。 ただし、ダイアログ C を開くときにダイアログ B 独自のパラメータ #Z
をダイアログ B から渡す場合、ダイアログ B が閉じられるとそのローカルデータエリアへの参照が有効でなくなるため、パラメータ #Z
は持続的ではありません。 したがって、ダイアログ C のパラメータ #Z はアクセスできなくなります(#Z
は基本ダイアログのローカルデータエリアを参照しません)。
このセクションでは、ダイアログを開くときの処理内容について説明します。 ダイアログを開くには、コマンド行などから実行するか、または OPEN DIALOG
ステートメントを使用して起動します。
ダイアログオブジェクトがロードされ、実行が開始されます。
BEFORE-ANY
イベントハンドラセクションが実行されます。このときのシステム変数 *EVENT
の値は OPEN
です。
BEFORE-OPEN
イベントハンドラセクションが実行されます。
ダイアログエディタの指定に従って、ダイアログウィンドウが作成されます。
BEFORE-ANY
イベントハンドラセクションが実行されます。 *EVENT
= AFTER-OPEN
。
ダイアログエディタの指定に従って、すべてのダイアログエレメントが作成されます。
VISIBLE = FALSE
のものを除き、ダイアログウィンドウとすべてのダイアログエレメントが表示されます。
AFTER-OPEN
イベントハンドラセクションが実行されます。
AFTER-ANY
イベントハンドラセクションが実行されます。 *EVENT
= AFTER-OPEN
。
AFTER-ANY
イベントハンドラセクションが実行されます。 *EVENT
= OPEN
(ダイアログの STYLE
属性値が "ダイアログボックス" の場合)。
ダイアログをダイナミックに閉じるには、次のように指定します。
CLOSE DIALOG [USING] [DIALOG-ID]
|
operand1 | ||
*DIALOG-ID
|
Operand1 は、OPEN DIALOG
ステートメントで返されるダイアログ ID です。
例:
CLOSE DIALOG *DIALOG-ID /* Close the current Dialog
ダイアログが画面から消去され、メモリから削除されます。 ダイアログに関連付けられていたローカルデータもすべて削除されます。
注意:
モーダルダイアログがダイアログ階層で子である場合、モーダルダイアログの親を閉じるとデッドロックが生じるので、親を閉じないでください。
Operand1 は、閉じるダイアログの名前です。
現在のダイアログを閉じるには、*DIALOG-ID
を指定します。
ダイアログを開いたり閉じたりするための条件を指定できます。この条件指定は、BEFORE-OPEN、AFTER-OPEN、および CLOSE の各イベントに適用されます。 これらの条件を使用して、ダイアログ内の属性値を初期化できます。
以下に、AFTER-OPEN イベントハンドラコードの例を示します。関連付けられている入力フィールドにデータを入力した後に押す必要のあるプッシュボタンの前景色に、赤を設定します。
DEFINE DATA LOCAL ... 1 #OK-BUTTON HANDLE OF PUSHBUTTON 1 #CALC-BUTTON HANDLE OF PUSHBUTTON 1 #SAVE-BUTTON HANDLE OF PUSHBUTTON 1 #CONVERT-BUTTON HANDLE OF PUSHBUTTON ... END-DEFINE ... #OK-BUTTON.FOREGROUND-COLOUR-NAME := RED #CALC-BUTTON.FOREGROUND-COLOUR-NAME := RED #SAVE-BUTTON.FOREGROUND-COLOUR-NAME := RED #CONVERT-BUTTON.FOREGROUND-COLOUR-NAME := RED
ダイアログを開いて画面に表示する前にダイアログエレメントおよびダイアログの属性値を変更する場合、ダイアログエレメントおよびダイアログウィンドウはまだ作成されていないため、"BEFORE OPEN" イベントハンドラコードで設定を変更しないでください。 代わりに、ダイアログエディタでダイアログを作成し、[ダイアログ属性]ウィンドウで VISIBLE
属性を FALSE
に設定します。 そして(ハンドルが使えるようになったときに)、AFTER-OPEN イベントハンドラコードですべての属性値を変更します。 その後、VISIBLE = TRUE
を指定して、ダイアログを表示可能にします。
例:
DEFINE DATA LOCAL ... 1 #DIA-1 HANDLE OF DIALOG 1 #OK-BUTTON HANDLE OF PUSHBUTTON 1 #CALC-BUTTON HANDLE OF PUSHBUTTON ... END-DEFINE ... /* AFTER OPEN event-handler code section ... #OK-BUTTON.FOREGROUND-COLOUR-NAME := RED #CALC-BUTTON.FOREGROUND-COLOUR-NAME := RED #DIA-1.VISIBLE := TRUE