バージョン 6.3.3
 —  プログラミングガイド  —

ダイアログをオープンおよびクローズする方法

このドキュメントでは、次のトピックについて説明します。


ダイアログを開く

イベントドリブンアプリケーションは、基本となるダイアログを実行することによって開始されます。 通常、エンドユーザーが起動したイベントによって、他のダイアログが開始されます。 アプリケーションは、基本となるダイアログが閉じられると終了します。

Start of instruction setイベントドリブンアプリケーション内の任意の箇所からダイアログを開くには

このステートメントによって、ダイアログがロードされ、ダイアログを開くときの処理が実行されます。

"ダイアログボックス" スタイルのダイアログ以外は、ダイアログが開くと制御が戻ります。 ダイアログボックススタイルのダイアログの場合は、ダイアログが終了したときにのみ制御が戻ります。

開くダイアログのパラメータデータエリアに BY VALUE でパラメータが宣言されているか、またはダイアログが "ダイアログボックス" スタイルである場合を除き、渡されるパラメータには、ダイアログを開く処理(BEFORE-OPEN イベントおよび AFTER-OPEN イベント)の間のみアクセスできます。

イベントドリブン型 Natural アプリケーション内の任意の箇所でダイアログを開くには、以下の構文を使用します。

OPEN DIALOG operand1   [USING]   [PARENT] operand2    
  [ [GIVING]   [DIALOG-ID] operand3 ]  
 

WITH

operand4...

  PARAMETERS-clause

Top of page

オペランド

Operand1 は、開かれるダイアログボックスの名前です。 PARAMETERS-clause を使用する場合、operand1 は定数(カタログ化されたダイアログの名前)である必要があります。

Operand2 は、親のハンドル名です。

Operand3 は、ダイアログの作成時に返される一意のダイアログ ID です。 これは、フォーマット/長さ I4 で定義する必要があります。

Top of page

ダイアログへのパラメータ渡し

ダイアログボックスを開いたときに、パラメータがダイアログボックスに渡されます。

ダイアログに渡すパラメータは 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

Top of page

データの生成、引き渡し、およびチェック時の持続性

Natural では "持続性" という用語は、基本ダイアログのローカルデータエリアに定義されたデータはダイアログの稼働中は存在を保証されていることを示すために使用します。 グローバルデータエリアはアプリケーション実行中に変更される可能性があるため、グローバルデータエリアに定義されたデータには持続性がありません。

ダイアログを開くときにパラメータデータエリアを内部的に保存することによって、持続性のあるデータへの参照が維持されます。 以下の場合にこの参照が再使用されます。

パラメータは以下の場合にアクセスできます。

以下の例は、2 つのパラメータが持続的で、もう 1 つのパラメータが持続的でない場合を示しています。 まず、基本ダイアログ A が ダイアログ B を開いてパラメータ #X#Y を渡します。 次に、ダイアログ B がダイアログ C にパラメータ #X#Y を渡します。 現在のダイアログ C 内のパラメータ #X#Y は、ダイアログ B が閉じられても持続性があります。 ただし、ダイアログ C を開くときにダイアログ B 独自のパラメータ #Z をダイアログ B から渡す場合、ダイアログ B が閉じられるとそのローカルデータエリアへの参照が有効でなくなるため、パラメータ #Z は持続的ではありません。 したがって、ダイアログ C のパラメータ #Z はアクセスできなくなります(#Z は基本ダイアログのローカルデータエリアを参照しません)。

Open and close dialogs

Top of page

ダイアログを開くときの処理手順

このセクションでは、ダイアログを開くときの処理内容について説明します。 ダイアログを開くには、コマンド行などから実行するか、または OPEN DIALOG ステートメントを使用して起動します。

Top of page

ダイアログを閉じる

ダイアログをダイナミックに閉じるには、次のように指定します。

CLOSE DIALOG [USING] [DIALOG-ID]

operand1

*DIALOG-ID

Operand1 は、OPEN DIALOG ステートメントで返されるダイアログ ID です。

例:

CLOSE DIALOG *DIALOG-ID /* Close the current Dialog

ダイアログが画面から消去され、メモリから削除されます。 ダイアログに関連付けられていたローカルデータもすべて削除されます。

注意:
モーダルダイアログがダイアログ階層で子である場合、モーダルダイアログの親を閉じるとデッドロックが生じるので、親を閉じないでください。

operand1

Operand1 は、閉じるダイアログの名前です。

現在のダイアログを閉じるには、*DIALOG-ID を指定します。

Top of page

属性値の初期化

ダイアログを開いたり閉じたりするための条件を指定できます。この条件指定は、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

Top of page