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

ネスト構造のコントロールの操作

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


はじめに

ダイアログの直下の子である "最上位" コントロール以外にも、他のコントロールの子としてコントロールを作成できます。 このようなコントロールはネスト構造コントロールと呼ばれ、 親コントロールはコンテナと呼ばれます。 同一の親を持つ子コントロール集合を表すのに兄弟という用語を使います。 明らかに、コントロール階層内には多くの異なる兄弟コントロール集合が存在し得ます。

コントロール階層を作成することによって、Natural プログラマはコントロールをグループ化でき、Natural プログラム内で簡単かつ効率的に操作できるようになります。 以下に、ネスト構造コントロールの特徴について説明します。

注意:
Natural はコントロール階層に含まれるレベル数を制限しません。 ダイアログエディタステータスバーのコンボボックスに、コントロール名とともにコントロールのレベルが表示されます。

Top of page

コンテナになり得るコントロールタイプ

すべてのコントロールタイプがコンテナになれるわけではありません。 例えば、コントロールを入力フィールドの子として作成することはできません。 Natural によってサポートされるコンテナコントロールには、現時点では以下の 3 つのタイプがあります。

Top of page

ネスト構造コントロールの作成

ネスト構造コントロールは、ネストしないコントロールと同じ方法でダイアログエディタで作成します。 コントロール挿入時に最初にマウスの左ボタンをコンテナコントロール上でクリックすると、Natural によって新しいコントロールがコンテナの子として自動的に作成されます。 マウスボタンを挿入モードでクリックする前でも、マウスカーソルがダイアログ上を移動するのに合わせて、ダイアログエディタのステータスバーがコンテナに対する相対的なマウス座標で絶えず更新されます。

また、前述のようにグループフレームをコンテナに変換するときに、ネスト構造コントロールがダイアログエディタ内で間接的に作成されます。

ダイアログのハンドルではなく必要なコンテナコントロールのハンドルとして PARENT 属性を指定することによって、PROCESS GUI ACTION ADD ステートメントを使用してランタイム時にネスト構造コントロールをダイナミックに作成できます。 ネスト構造コントロールの位置(RECTANGLE-X 属性および RECTANGLE-Y 属性)は、コンテナのクライアントエリアに対して相対的に指定する必要があります。 コントロールのクライアントエリアは、3-D ボーダー、"フレーム" スタイルによって生じる 1 ピクセルフレーム、コントロールのスクロールバーなどのフレームコントロールを除いた、コントロールの内部エリアです。

Top of page

複数選択、コントロールシーケンス、およびクリップボード操作

ダイアログエディタは、親が同じではない(つまり、兄弟でない)コントロールの複数選択を禁止します。 これは、複数のコントロールが "rubber banding"(マウスの左ボタンを押したままドラッグして範囲を選択する)と拡張選択(Shift キーを押したままコントロールを選択する)のどちらで選択されたかに関係なく適用されます。 ただし、選択したコンテナコントロールを削除すると、その直接的および間接的な子(子孫)はすべて、明示的に選択していなくても削除されます。 そのため、クリップボードへの切り取り操作は、選択したコントロールおよびすべての子孫コントロールをクリップボードにコピーします。 クリップボードへのコピー操作はコンテナだけをコピーするかコンテナに加えてすべての子孫をコピーするか決まっていません。 この場合は、メッセージボックスが表示され、ユーザーはこれらの 2 つのオプションから選択できます。

クリップボードからのコントロールの貼り付けでは、新規作成されるコントロールと同じコントロールシーケンス(タブオーダー)挿入位置ロジックが使用されます。 どちらの場合も、新しいコントロールが、選択された兄弟およびその子孫のすぐ後のコントロールシーケンス位置に作成されます。 兄弟以外のコントロールが選択された場合は、選択された(アクティブな)コントロールのコントロールシーケンス内の位置に基づいて、"事実上の兄弟" が代わりに使用されます。 選択された "アクティブ" であるコントロールとは、黒(グレーではない)の選択ハンドルを使用して強調表示された選択済みコントロールを指します。 選択がアクティブでない場合、コントロールはコントロールシーケンス内で最初の兄弟コントロールの直前か、あるいはコンテナが空であればコンテナの直後(または最上位コントロールのコントロールシーケンスの前)に挿入されます。 ただし、コントロールシーケンスは階層に関係なくメンテナンスされることに注意してください。 コントロールが作成されたら、[ダイアログ]メニューの[操作順序設定]オプションを使用して、どのコントロールもコントロールシーケンス内の任意の位置に明示的に移動できます。

新規作成されるコントロールの階層内での位置の決定方法は、これら 2 つの場合で少し異なります。 コントロールを新しく作成する場合は、マウスの左ボタンを押した位置で最上位コンテナを探すとコンテナを特定できます。 ただし、コントロールをクリップボードから貼り付ける場合は、使用できる "(X, Y)" 位置がないため、 コントロールが選択されていればそのコンテナ、選択されていなければダイアログ自体がコンテナであるとみなされます。 つまり、例えばコントロールをあるコンテナから別のコンテナにコピーおよび貼り付けする場合、貼り付ける前に、コンテナ自体ではなく 2 つ目のコンテナ内のコントロールを選択する必要があります。 2 つ目のコンテナが空であれば、まずダミーの子コントロールを暫定的に作成する必要があります。ダミーの子コントロールは、貼り付け操作の完了後に削除できます。

コントロールを削除すると、その子孫コントロールも削除されます。

ネスト構造コントロールの導入によって、[すべてを選択]コマンドの動作が以下のように変わりました。

したがって、階層の 1 レベルだけを使用する一般的な場合では、[すべてを選択]コマンドは以前と同様にすべてのダイアログコントロールを選択します。

Top of page