2.14.5 ユーザー・デザイン・コントロール

ユーザー・デザイン・コントロールは、リスト・タイプの情報を表示するための、特殊な再利用可能パーツです。ツリー・ビューやリスト・ビュー・コントロールなどの事前定義済みのコントロールより大きな柔軟性を設計者に提供します。

ユーザー・デザイン・コントロールは、DirectXモードで実行するアプリケーションでのみ使用できます。

Visual LANSAのユーザー・デザイン・コントロールには、以下の特徴があります。

ユーザー・デザイン・コントロールの例を参照するには、DirectXデモ・アプリケーションを実行します([区画の初期化]ダイアログから起動します)。

ユーザー・デザイン・コントロールは他のリスト・コントロールと同様に動作し、ツリー・ビュー、リスト・ビュー、およびグリッドと同じリスト処理ルールに従います。例えば、Add_EntryやUpd_Entryなどの標準のリスト・コマンドを使用して操作でき、フォーカス、選択、マウスオーバーなどビジュアルなリスト・コントロールに関連付けられた標準のイベントに応答できます。

しかし、外観が定義されていません。つまり、デザインが「ユーザー・コントロール」の対象です。

事前定義済みのリスト・ビュー(Prim_ltvw)コントロールでは、ソースの定義は例えば次のようになります。使用するデータを示す列が定義されています。

Define_Com Class(#PRIM_LTVW) Name(#LTVW_1) Columnbuttonheight(19) Componentversion(2) Displayposition(1) Fullrowselect(True) Height(342) Keyboardpositioning(SortColumn) Left(9) Parent(#COM_OWNER) Showsortarrow(True) Tabposition(1) Top(11) Width(680)
Define_Com Class(#PRIM_LVCL) Name(#LVCL_1) Displayposition(1) Parent(#LTVW_1) Source(#EMPNO)
Define_Com Class(#PRIM_LVCL) Name(#LVCL_2) Displayposition(2) Parent(#LTVW_1) Source(#SURNAME) Width(27)
Define_Com Class(#PRIM_LVCL) Name(#LVCL_3) Displayposition(3) Parent(#LTVW_1) Source(#GIVENAME) Width(32)
 

ユーザー・コントロールのタイル(prim_tile)では、定義は次のようになります。

Define_Com Class(#prim_Tile<#XDXTileDesign>) Name(#Tile) Displayposition(1) Height(359) Left(0) Parent(#COM_OWNER) Tabposition(1) Top(30) Width(686)

 

タイルには列ではなく単純にデザインがあります。この場合は#XDXTileDesignです。これが、アイテムの外観と、各アイテムで使用可能なフィールド値を定義します。

詳細については、「デザイン」を参照してください。

デザイン

ビジュアル・デザインとコントロールにはやり取りが必要です。つまり、選択やフォーカスの外観など、事前定義済みコントロールに組み込まれている機能を、ユーザー・デザイン・コントロールではコーディングする必要があるということです。 

コントロールとやり取りするには、デザインでインターフェースを実装する必要があります。

Function Options(*DIRECT)
Begin_Com Role(*EXTENDS #XDXBasePanel *Implements #Prim_Tile.iTileDesign *ListFields #ListFields) Height(60) Layoutmanager(#Layout) Mouseoverstyle(#XDXStyles<MouseOver>) Style(#XDXStyles<Item>) Width(248)

* Fields received as on Add_entry
Group_By Name(#ListFields) Fields(#Empno #Surname #Givename #Deptment #Section #Deptdesc #Secdesc)
 

*ListFieldsパラメータもBegin_Comに追加できます。このパラメータによって、リストの基となるデータとして機能するフィールドが定義されます。コントロールは、Add_Entryコマンドが実行されたタイミングで、指定したフィールドをデザイン・インスタンスに渡します。

デザインに対して発生する可能性があるそれぞれのイベントに対して、対応するOnXxxxxメソッドがインターフェース上に存在し、デザイン内で再定義できます。これにより、親コントロールによって、コントロールをデザイン・インスタンスに渡すことができます。このようにして、Add_Entryの使用によってデザインが作成されたときにOnAddメソッドが実行されます。

Mthroutine Name(OnAdd) Options(*Redefine)
#lEmployee := ("&1 &2 (&3)").Substitute( #GiveName #Surname #Empno )
#lDepartment := ("&1 (&2)").Substitute( #Deptdesc #Deptment )
#lSection := ("&1 (&2)").Substitute( #Secdesc #Section )
Endroutine
 

同様に、設定するフォーカスを管理するには、スタイルを追加してフォーカスを表示し、アイテムからフォーカスが外れたらスタイルを削除する必要があります。

Mthroutine Name(OnItemGotFocus) Options(*Redefine)
#Com_self.Styles.Add( #XDXStyles<Focus> )
Endroutine
Mthroutine Name(OnItemLostFocus) Options(*Redefine)
#Com_self.Styles.Remove( #XDXStyles<Focus> )
Endroutine

 

個々のユーザー・デザイン・コントロールには、独自のインターフェースがあります。ほとんどの場合、追加、削除、フォーカス、選択について、似通ったメソッドがあります。ツリーのみが異なります。アイテムの展開と折りたたみのメソッドを提供する必要があるためです。

ユーザー・デザイン・コントロールのプロパティ、メソッド、およびイベントの詳細については、機能ヘルプ (F1) を参照してください。