バージョン 6.3.3
 —  エディタ  —

拡張されたソースコードフォーマット

ダイアログエディタは、次のソース形式をサポートします。

このセクションでは、プログラムエディタに備えられているソースコードウィンドウでコードを入力する場合の構文規則について説明します。


構文規則

構文の説明では、次のメタ表記を使用しています。

syntax_element_name :=: description
構文要素 説明
syntax_element_name :=: 構造が description. によって定義される構成体を識別します。
description 大文字で表示されるプログラムコードです。

このセクションで使用している構文記号については、『ステートメント』ドキュメントを参照してください。 図では、次の記号も使用しています。

記号 説明
{element1 | element2} 中カッコで囲まれ垂直バーで区切られている要素は、1 つの要素のみを確実に指定する必要があることを示します。
< > 山カッコの対は、コードが複数行に分割されていることを示します。 山カッコのそれぞれの対は、Natural ソース行の終わりを表します。
/*[ および /*] これらの角カッコの対は、ユーザーコードセクションに存在する場合でも、リストモードの圧縮可能なブロックを成形します。

ダイアログエディタでは、行番号参照を考慮せずにダイアログソースの行番号が生成されるため、ダイアログ内では行番号参照は明示的にサポートされません

行の長さおよびソースサイズは、Natural の一般制限の対象となります。

注意:
空白で区切られて示されている構文要素には、空白が必要ですが、その正確な数は重要ではありません。

Top of page

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 として使用できます(この属性を設定してウィンドウを作成する必要があります)。

Top of page

構文

全般的な構文

これはダイアログの完全なソースです。

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

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

dialog_options_section_22D 
 :=: 

上記のオプション設定は、[設定値の保存]オプション

(『Natural スタジオの使用』ドキュメントの「ダイアログエディタオプション」および「オプションの設定」を参照)がオンの場合にのみダイアログエディタで生成されます。 ダイアログのロード時にこのセクションが存在していると、

オプションがオンになります。

[/*[ DEFINE OPTION SETTINGS {/** SET option_name option_value}... 
 /*] END-OPTION-SETTINGS] 

dialog_data_section_22D

dialog_data_section_22D 
 :=:

グローバル、パラメータ、およびローカルの各データエリアで構成されるダイアログのデータセクションです。

順序は固定です。

 DEFINE DATA gda_section_22D 
 pda_section_22D lda_section_22D 
 END-DEFINE 

dialog_data_section_22D のサブセクション

gda_section_22D

gda_section_22D 
 :=: 

オプションのグローバルデータエリア指定です。 ブロックを参照する場合があります。

/*[ DEFINE GLOBAL DATA [GLOBAL USING gda_specification] /*] END-GLOBAL-DATA 
 

pda_section_22D

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

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

user_subroutines_section_22D 
 :=: 

ユーザー定義サブルーチンのリストです。 次の擬似構文は、

サブルーチンが実際に存在する場合にのみ生成されます。

/*[ DEFINE SUBROUTINES [DEFINE SUBROUTINE subroutine_name 
 user_code_section_22D END-SUBROUTINE]... 
 /*] END-SUBROUTINES 

window_definition_22D

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

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_handler_section_22D 
 :=: 

サブルーチンとして指定された DEFAULT イベントハンドラです。 このサブルーチンはさまざまな場所から呼び出されるため、

コンパイル時に存在している必要があります。

DEFINE SUBROUTINE 
 #DLG$HANDLER$DEFAULT /** DEFINE EVENT DEFAULT user_code_section_22D 
  END-SUBROUTINE /** END-EVENT 

error_handler_section_22D

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_section_22D 
 :=: 

BEFORE-ANY イベントハンドラです。これは、

*CONTROL および *EVENT を評価する DECIDE ステートメントに先行するコードです。

/*[ DEFINE EVENT BEFORE-ANY user_code_section_22D 
 /*] END-EVENT 

event_handlers_22D

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_section_22D 
 :=: 

AFTER-ANY イベントハンドラです。これは、

*CONTROL および *EVENT を評価する DECIDE ステートメントに続くコードです。

/*[ DEFINE EVENT AFTER-ANY user_code_section_22D 
 /*] END-EVENT 

従属構文セクション

user_data_section_22D

user_data_section_22D 
 :=: 

データ宣言のセクションです。 ダイアログエディタでは、ユーザー

コードが存在しない場合にコメントが生成されます。 セクション全体が適切に段落付けされることを除き、

ユーザーコードのレイアウトは保持されます。

[frame_code_section_22D] 
 {/** EMPTY USER CODE SECTION | user_code_line_22D...} 
 [frame_code_section_22D] 

user_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

frame_code_section_22D 
 :=: 

この保護セクションは、フレームギャラリーダイアログ内のコードです。 このコードは変更しないでください。

/*[ DEFINE FRAME CODE [user_code_line_22D...] 
 /*] END-FRAME-CODE 

user_code_line_22D

user_code_line_22D 
 :=: 

イベントセクションまたはサブルーチン内のコード行です。 段落付けは、

ダイアログエディタで保持されます。 ただし、最小限の段落付けは強制的に行われます。

indented_code_line 

event_handler_section_22D

event_handler_section_22D 
 :=: 

単一のイベントハンドラセクションです。つまり、関連するダイアログエレメントの DECIDE

ステートメント内のイベントに対する VALUE 節です。

/*[ DEFINE EVENT event_name 
 VALUE 'event_name' user_code_section_22D 
  /*] END-EVENT 

control_events_section_22D

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

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

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

extra_control_attributes_22D 
 :=: 

一部の属性は、ダイアログエレメントを作成する PROCESS GUI ACTION

ADD で意味のある定義を行うことができません。例えば、修正不可能な選択ボックス

コントロールの STRING は、項目のいずれかの STRING 値でなければなりません。 したがって、この属性は、

すべての項目の追加後に定義されます。

control_name_and_index.attribute_name 
 := attribute_value 

extra_window_attributes_22D

extra_window_attributes_22D 
 :=: 

一部の属性は、ダイアログを作成する PROCESS GUI ACTION

ADD で意味のある定義を行うことができません。例えば、デフォルトボタンは、

そのボタンの作成後でしか定義できません。

window_name.attribute_name 
 := attribute_value 

Top of page