ダイアログエディタは、次のソース形式をサポートします。
213. これは、Natural バージョン 2.1.3 で生成されるフォーマットです(新しい次元)。 入力でのみサポートされています。 Natural バージョン 2.2 および Natural バージョン 3 では 2.1.3 フォーマットを生成できません。
22C。 これは、Natural バージョン 2.2.2 で生成されるフォーマットです。 Natural for Windows、UNIX バージョン 4.1 および OpenVMS では、このフォーマットを生成できません。
22D。 標準の "拡張" ソースコードフォーマットです。 Natural バージョン 2.2.3 以上で、ダイアログのコンパイル、保存、および編集のために生成されます。
このセクションでは、プログラムエディタに備えられているソースコードウィンドウでコードを入力する場合の構文規則について説明します。
構文の説明では、次のメタ表記を使用しています。
syntax_element_name :=: description
構文要素 | 説明 |
---|---|
syntax_element_name :=: | 構造が description. によって定義される構成体を識別します。 |
description | 大文字で表示されるプログラムコードです。 |
このセクションで使用している構文記号については、『ステートメント』ドキュメントを参照してください。 図では、次の記号も使用しています。
記号 | 説明 |
---|---|
{element1 | element2} | 中カッコで囲まれ垂直バーで区切られている要素は、1 つの要素のみを確実に指定する必要があることを示します。 |
< > | 山カッコの対は、コードが複数行に分割されていることを示します。 山カッコのそれぞれの対は、Natural ソース行の終わりを表します。 |
/*[ および /*] | これらの角カッコの対は、ユーザーコードセクションに存在する場合でも、リストモードの圧縮可能なブロックを成形します。 |
ダイアログエディタでは、行番号参照を考慮せずにダイアログソースの行番号が生成されるため、ダイアログ内では行番号参照は明示的にサポートされません。
行の長さおよびソースサイズは、Natural の一般制限の対象となります。
注意:
空白で区切られて示されている構文要素には、空白が必要ですが、その正確な数は重要ではありません。
このセクションでは、ダイアログソースのさまざまな要素の動作に関する理解を深めるため、基本情報を提供します。
Natural ダイアログは実行可能モジュールです。 Natural ダイアログの呼び出しは、Natural 環境から直接行うか、または OPEN DIALOG
ステートメントを使用して別の実行モジュールから行います。 ダイアログを呼び出すと、ダイアログの実行可能プログラムがインスタンス化され、NULL-HANDLE
に等しいシステム変数 *CONTROL
、および OPEN
に等しいシステム変数 *EVENT
を使用して実行されます。 この OPEN
イベントは、ダイアログウィンドウを作成するインラインサブルーチン *DLG$SUBR$CREATE$WINDOW
を呼び出すことで処理されます。 ウィンドウ作成では、NULL-HANDLE
に等しい *CONTROL
、および AFTER-OPEN
に等しい *EVENT
を使用してダイアログが呼び出され、これに対してダイアログは、インラインサブルーチン *DLG$SUBR$CREATE$CONTROLS
を呼び出すことで応答します。 このサブルーチンは、ダイアログ用に定義されるダイアログエレメントを作成した後、PROCESS GUI ACTION AFTER-CREATION
を呼び出してウィンドウ作成が完了したことを Natural に通知します。
以降のアプリケーション処理およびユーザー入力に応じて、適切に設定された *CONTROL
および *EVENT
を使用してダイアログが繰り返し実行されます。 ウィンドウが破壊されているためにダイアログが明示的にアンロードされるまで、ダイアログはインスタンス化されたままになります。 これは、エンドユーザー操作または CLOSE DIALOG
ステートメントの結果生じる CLOSE
イベントに対するデフォルトの動作です。
同じダイアログモジュールが複数回インスタンス化される可能性があり、その場合、複数のダイアログ、そのウィンドウおよびダイアログエレメントがアクティブになります。 各ダイアログには一意の数値 ID があります。この ID は、ダイアログの実行中に
*DIALOG-ID
として使用でき、ダイアログのウィンドウハンドルにアクセス可能な場合には window_handle.CLIENT-DATA として使用できます(この属性を設定してウィンドウを作成する必要があります)。
これはダイアログの完全なソースです。
dialog_source_22D :=:
/** DIALOG SOURCE 22D dialog_info_section_22D [dialog_options_section_22D] dialog_data_section_22D [user_subroutines_section_22D] window_definition_22D control_definitions_22D default_handler_section_22D error_handler_section_22D before_any_section_22D event_handlers_22D after_any_section_22D END /** END-DIALOG-SOURCE
dialog_info_section_22D :=:
ダイアログの "info" セクションは、バナー行、フレームギャラリー情報、
およびオプションのコメントで構成されます。
/*[ DEFINE DIALOG INFO
次の行は、ダイアログエディタで常に生成されますが、入力時には無視されます。
/*D* Natural Dialog Description version_string / date time
1 行または複数行からなる次の行は、フレームギャラリーを使用して生成されたダイアログに存在します。
存在する場合は、ダイアログエディタによって保持されます(変更はできません)。
[/*DF frame_gallery_info]...
空のコメント行は、ユーザーコメントが存在しない場合にダイアログエディタで生成されますが、
入力時には無視されます。
[dialog_comment :=: {/** EMPTY DIALOG COMMENT | [user_code_line_protected_by_/**_prefix]...}] /*] END-DIALOG-INFO
dialog_options_section_22D :=:
上記のオプション設定は、[設定値の保存]オプション
(『Natural スタジオの使用』ドキュメントの「ダイアログエディタオプション」および「オプションの設定」を参照)がオンの場合にのみダイアログエディタで生成されます。 ダイアログのロード時にこのセクションが存在していると、
オプションがオンになります。
[/*[ DEFINE OPTION SETTINGS {/** SET option_name option_value}... /*] END-OPTION-SETTINGS]
dialog_data_section_22D :=:
グローバル、パラメータ、およびローカルの各データエリアで構成されるダイアログのデータセクションです。
順序は固定です。
DEFINE DATA gda_section_22D pda_section_22D lda_section_22D END-DEFINE
gda_section_22D :=:
オプションのグローバルデータエリア指定です。 ブロックを参照する場合があります。
/*[ DEFINE GLOBAL DATA [GLOBAL USING gda_specification] /*] END-GLOBAL-DATA
pda_section_22D :=:
ダイアログのパラメータデータエリアには、親ハンドルが
最初のフィールドに含まれている必要があります。
/*[ DEFINE DIALOG PARAMETERS PARAMETER 01 #DLG$PARENT HANDLE OF GUI BY VALUE user_data_section_22D /*[ DEFINE USING [PARAMETER USING pda_name]... /*] END-USING /*] END-DIALOG-PARAMETERS
lda_section_22D :=:
ダイアログのローカルデータエリアです。 すべてのダイアログエレメントのハンドル宣言は、
ダイアログのコンパイルには必要ですが、入力時にはダイアログエディタで無視され、
次に示す実際のダイアログエレメント定義から再生成されます。
/*[ DEFINE LOCAL DATA LOCAL /*[ DEFINE HANDLES {01 control_name HANDLE OF control_class[<>]}... /*] END-HANDLES user_data_section_22D /*[ DEFINE USING [LOCAL USING lda_name]... /*] END-USING /*] END-LOCAL-DATA
user_subroutines_section_22D :=:
ユーザー定義サブルーチンのリストです。 次の擬似構文は、
サブルーチンが実際に存在する場合にのみ生成されます。
/*[ DEFINE SUBROUTINES [DEFINE SUBROUTINE subroutine_name user_code_section_22D END-SUBROUTINE]... /*] END-SUBROUTINES
window_definition_22D :=:
ウィンドウは標準サブルーチン(常に存在する必要があります)内で定義されます。
DEFINE SUBROUTINE #DLG$ SUBR$CREATE$WINDOW /** DEFINE CONTROL window_name non_array_control_definition_22D END-SUBROUTINE /** END-CONTROL
control_definitions_22D :=:
すべてのダイアログエレメントは、1 つの標準サブルーチン
(常に存在する必要があります)内で定義されます。 ダイアログエディタでは、メニューバー、
ツールバー、フォントコントロール、タイマー、他のダイアログエレメントの順に生成されます。
DEFINE SUBROUTINE #DLG$SUBR$CREATE$CONTROLS /** DEFINE DIALOG ELEMENTS [control_definition :=:
各ダイアログエレメント定義は、擬似コメントで囲まれます。
/*[ DEFINE CONTROL control_name[array_bounds]
次のオプションのコメントは、ソースコード内にのみ存在します。
[control_comment :=: {user_code_line_protected_by_/**_prefix}...]
次のコードはダイアログエレメントを作成します。
{non_array_control_definition_22D | array_control_definition_22D}
リストボックスコントロールおよび選択ボックスコントロールには、
ダイアログエレメントの 1 つの配列として定義される項目リストが含まれる場合があります。 項目リストは、ダイアログエレメントの作成コードの後に続きます。
[control_items :=: /* DEFINE ITEMS control_name_array_bounds array_control_definition_22D /*] END-ITEMS ] /*] END-CONTROL
]... END-SUBROUTINE /** END-DIALOG-ELEMENTS
default_handler_section_22D :=:
サブルーチンとして指定された DEFAULT イベントハンドラです。 このサブルーチンはさまざまな場所から呼び出されるため、
コンパイル時に存在している必要があります。
DEFINE SUBROUTINE #DLG$HANDLER$DEFAULT /** DEFINE EVENT DEFAULT user_code_section_22D END-SUBROUTINE /** END-EVENT
error_handler_section_22D :=:
ON ERROR セクションとして指定された ERROR イベントハンドラです。 オプションです。
ON ERROR /** DEFINE EVENT ERROR user_code_section_22D END-ERROR /** END-EVENT
before_any_section_22D :=:
BEFORE-ANY イベントハンドラです。これは、
*CONTROL および *EVENT を評価する DECIDE ステートメントに先行するコードです。
/*[ DEFINE EVENT BEFORE-ANY user_code_section_22D /*] END-EVENT
event_handlers_22D :=:
最初に *CONTROL を評価し、次に *EVENT を評価する DECIDE ステートメントで、
適切なイベントハンドラを起動します。
DECIDE ON FIRST *CONTROL /** DEFINE ALL EVENTS {dialog_events :=: /*[ DEFINE EVENTS FOR DIALOG VALUE NULL-HANDLE
*CONTROL = NULL-HANDLE は、
ウィンドウまたはダイアログのどちらかに関連付けられているイベントを示します。
DECIDE ON FIRST *EVENT /*[ DEFINE EVENT OPEN VALUE 'OPEN'
OPEN イベントハンドラは、任意の BEFORE-OPEN ユーザーコードで開始し、
ウィンドウ作成コールで終了します。
user_code_section_22D PERFORM #DLG$SUBR$CREATE$WINDOW /*] END-EVENT /*[ DEFINE EVENT AFTER-OPEN VALUE 'AFTER-OPEN'
AFTER-OPEN イベントは、ウィンドウ作成コールの処理中に発生します。
つまり、これはダイアログのネストされたコールです。 AFTER-OPEN イベントでは、すべてのダイアログエレメントが作成され、
ダイアログエレメントハンドル(メニューバーのハンドルなど)を
使用するウィンドウ属性が割り当てられます。 ユーザー
コードが後に続くことがあります。
PERFORM #DLG$SUBR$CREATE$CONTROLS [extra_window_attributes_22D] PROCESS GUI ACTION AFTER-CREATION WITH window_name PROCESS GUI ACTION RESET-ATTRIBUTES
ユーザーの AFTER-OPEN コードが続きます。
user_code_section_22D /*] END-EVENT /*[ DEFINE EVENT CLOSE
CLOSE イベントは、エンドユーザーがウィンドウを直接閉じた、
親ウィンドウが閉じられた、または CLOSE
DIALOG ステートメントが実行された結果、発生します。
VALUE 'CLOSE' {dialog_close_handler_22D :=: user_code_section_22D}
次のコールは、ウィンドウを "破棄" し、ダイアログをアンロードします。
PROCESS GUI ACTION DELETE-WINDOW WITH window_name
次のステートメントは、AFTER-ANY
ハンドラを迂回してダイアログを終了します。
ESCAPE ROUTINE IMMEDIATE /*] END-EVENT
次のダイアログイベントハンドラはオプションであり、任意のユーザー定義
イベントが含まれます。
[event_handler_section_22D...] NONE PERFORM #DLG$HANDLER$DEFAULT END-DECIDE /*] END-EVENTS
}
*DLG$SUBR$CREATE$CONTROLS で定義されているダイアログエレメントのイベントハンドラはすべて、
次のようにリストされます。
[control_events_section_22D...] NONE PERFORM #DLG$HANDLER$DEFAULT END-DECIDE /** END-ALL-EVENTS
処理または抑制が行われなかったイベントはすべて、
DEFAULT イベントハンドラで処理されます。 DLG$SUBR$CREATE$CONTROLS 外で作成されたダイアログエレメントは、
そこで処理されます。
after_any_section_22D :=:
AFTER-ANY イベントハンドラです。これは、
*CONTROL および *EVENT を評価する DECIDE ステートメントに続くコードです。
/*[ DEFINE EVENT AFTER-ANY user_code_section_22D /*] END-EVENT
user_data_section_22D :=:
データ宣言のセクションです。 ダイアログエディタでは、ユーザー
コードが存在しない場合にコメントが生成されます。 セクション全体が適切に段落付けされることを除き、
ユーザーコードのレイアウトは保持されます。
[frame_code_section_22D] {/** EMPTY USER CODE SECTION | user_code_line_22D...} [frame_code_section_22D]
user_code_section_22D :=:
実行可能ステートメントのセクションです。 ダイアログエディタでは、ユーザー
コードが存在しない場合にコメントが生成されます。 セクション全体が適切に段落付けされることを除き、
ユーザーコードのレイアウトは保持されます。
[frame_code_section_22D] {;/** EMPTY USER CODE SECTION | user_code_line_22D...} [frame_code_section_22D]
frame_code_section_22D :=:
この保護セクションは、フレームギャラリーダイアログ内のコードです。 このコードは変更しないでください。
/*[ DEFINE FRAME CODE [user_code_line_22D...] /*] END-FRAME-CODE
user_code_line_22D :=:
イベントセクションまたはサブルーチン内のコード行です。 段落付けは、
ダイアログエディタで保持されます。 ただし、最小限の段落付けは強制的に行われます。
indented_code_line
event_handler_section_22D :=:
単一のイベントハンドラセクションです。つまり、関連するダイアログエレメントの DECIDE
ステートメント内のイベントに対する VALUE 節です。
/*[ DEFINE EVENT event_name VALUE 'event_name' user_code_section_22D /*] END-EVENT
control_events_section_22D :=:
1 つのダイアログエレメントのすべてのイベントハンドラの集まりです。つまり、
*EVENT の DECIDE ステートメントが含まれているダイアログエレメントのハンドルに対する VALUE 節です。 ダイアログエレメントが
配列の場合、すべての要素がこのセクションで処理されます。
/*[ DEFINE EVENTS FOR control_name VALUE control_name[(*[,*)] DECIDE ON FIRST *EVENT event_handler_section_22D... NONE PERFORM #DLG$HANDLER$DEFAULT END-DECIDE /*] END-EVENTS
non_array_control_definition_22D :=:
ダイアログエレメントを作成する PROCESS GUI ステートメント操作に対応する、
配列以外のダイアログエレメントの定義です。 WITH PARAMETERS ...
END-PARAMETERS 節を使用する場合、未指定の属性にはすべてデフォルト
値が使用されます。 ダイアログエディタでは、このような属性は生成されません。
最初および 2 番目の属性は、それぞれ HANDLE-VARIABLE および TYPE でなければなりません。
標準のローカルデータエリア NGULKEY1 がダイアログに含まれている場合、
ダイアログエディタではこのデータエリアで事前定義されている属性値の名前が
使用されます。 このデータエリアが含まれていないと、ダイアログをコンパイルできません。 変数参照は、
属性のサブセットに対してのみ有効です。
PROCESS GUI ACTION ADD WITH PARAMETERS {attribute_name = {constant | variable_reference}<>}... END-PARAMETERS [frame_code_line_22D...] /*] END-CONTROL
array_control_definition_22D :=:
ダイアログエレメントの配列定義は、
配列要素ごとに 1 つの PROCESS GUI ステートメントで構成されます。 配列として定義できるのは、ダイアログエレメントのサブセットのみ
(ダイアログウィンドウまたはリストボックスコントロールなどは無効)です。 WITH
PARAMETERS ... END-PARAMETERS 節の代わりに、明示的な属性割り当ておよび
単純な WITH 節が使用されます。これは、同一ではあってもデフォルトではない多くの属性値が
配列要素で共有されるからです。
ダイアログエディタは、ダイアログエレメントの配列に関して非常に厳密です。
最大 2 次元までが有効であり、要素の個別配置はできず、
属性のサブセットのみが要素間で変更可能です。
ダイアログエレメントの配列定義をスキャンするとき、
最初の要素の定義から変更していない属性値のみがダイアログエディタで使用されます。 特に、
最初の座標定義を除くすべての座標定義は、擬似属性である
H-SPACING、V-SPACING、および ARRANGE-IN-COLUMNS から派生します (ただし、
すべてのダイアログエレメントに座標が存在するわけではありません)。デフォルト値が明示的に指定されていないすべてのダイアログエレメントでは、
最初の PROCESS GUI ACTION
RESET-ALL によってこの処理が強制的に行われます。
PROCESS GUI ACTION RESET-ATTRIBUTES [spacing_info:=: /** H-SPACING = horiz_spacing /** V-SPACING = vert_spacing /** ARRANGE-IN-COLUMNS = {TRUE|FALSE}<>] ] {
1 つの配列要素の作成です。 メッセージファイル文字列への数値参照は、
その文字列に対する明示的な PROCESS GUI ステートメント操作で処理する必要があります。
これは、数値への直接割り当てを行うと、その数値が単に文字列に変換されるからです。
[attribute_assignment:=:{ control_name_and_index.attribute_name := attribute_value| PROCESS GUI ACTION GET-MESSAGE-TEXT WITH number indexed_control_name }<>]... PROCESS GUI ACTION ADD WITH parent_name type_name control_name_and_index
}...
extra_control_attributes_22D :=:
一部の属性は、ダイアログエレメントを作成する PROCESS GUI ACTION
ADD で意味のある定義を行うことができません。例えば、修正不可能な選択ボックス
コントロールの STRING は、項目のいずれかの STRING 値でなければなりません。 したがって、この属性は、
すべての項目の追加後に定義されます。
control_name_and_index.attribute_name := attribute_value
extra_window_attributes_22D :=:
一部の属性は、ダイアログを作成する PROCESS GUI ACTION
ADD で意味のある定義を行うことができません。例えば、デフォルトボタンは、
そのボタンの作成後でしか定義できません。
window_name.attribute_name := attribute_value