ダイアログおよびダイアログエレメントは階層的に構成されます。 通常、ダイアログウィンドウは多くのコントロールを含みます。 コントロールは、ウィンドウまたはコンテナとして機能できる他のコントロールの子です。 コントロールには、多くの項目を含めることができます。 例えば、リストボックスコントロールは、複数のリストボックス項目を含めることができ、 これら項目の親となります。
ダイアログ自体も階層的に構成されます。 OPEN DIALOG
ステートメントを指定するたびに、新規作成するダイアログの親をパラメータとして指定する必要があります。 このパラメータは NULL-HANDLE
または既存ダイアログのハンドルです。 NULL-HANDLE
を指定すると、ダイアログは他のダイアログではなくデスクトップに属します。 つまり、ダイアログはアプリケーション内の他のダイアログに関係なく閉じたり、最小化したりできます。 既存ダイアログを親として持つダイアログは、親ダイアログが閉じたり最小化したりすると、親と同じように動作します。
アプリケーションの最初のダイアログは特別な役割を果たし、基本ダイアログと呼ばれることがあります。 基本ダイアログを閉じると、アプリケーション内の他のダイアログもすべて、基本ダイアログの子であるかどうかに関係なく閉じられます。
同一階層レベルの子はすべて生成順にソートされます。 したがって、各ダイアログエレメントは、自分の親、(同一階層レベルの)自分の前と後ろ、および最初と最後の子(存在する場合)を常に "認識" していることになります。 この情報は以下の属性を使用して知ることができます。
これらの属性はダイアログエレメントのハンドル値を含みます。 ハンドル値が NULL
の場合、ダイアログエレメントは親、同レベルの前、後ろ、または子を持ちません。 以下の例は、ダイアログの全ダイアログエレメントの調べ方を示しています。
1 #CONTROL HANDLE OF GUI #CONTROL := #DLG$WINDOW.FIRST-CHILD REPEAT UNTIL #CONTROL = NULL-HANDLE ... #CONTROL := #CONTROL.SUCCESSOR END-REPEAT
リストボックスコントロールおよびリストボックス項目には、さらに 1 つの属性があります。
SELECTED-SUCCESSOR
は、リストボックスコントロール自体またはリストボックス項目に対して設定できます。 これはリストボックスコントロール内の次に選択される項目を指します。 リストボックスコントロール自体の場合は、最初に選択される項目を示します。
1 #ITEM HANDLE OF LISTBOXITEM #ITEM := #LISTBOX.SELECTED-SUCCESSOR REPEAT UNTIL #ITEM = NULL-HANDLE ... #ITEM := #ITEM.SELECTED-SUCCESSOR END-REPEAT
例 2 は、複数選択(MULTI-SELECTION
属性)が可能なリストボックスコントロールで選択されたすべての項目を見つけるために必要なクエリです。