7.29.1 DEFINE_COMのパラメータ

CLASS

DESC

HELP

NAME

OPTIONS

SCOPE

REFERENCE

CLASS

CLASSは、コマンド・ボタン、チェックボックス、フォームなどのコンポーネントのタイプです。

フィールドには、#SALARYなどの単純なフィールドをクラスにするか、#SALARY.VISUALまたは#SALARY.MYPARTなどの表示方法にすることができます。

*VARIANTには、バリアント型変数を使用できます。バリアント型変数から値を読み書きできます。プロパティはありません。今のところ、バリアント型変数を使用するのがより望ましい選択肢です。

OPTIONS

OPTIONSパラメータには、以下のように、COMPUTEか*MAX.の値を指定したキーワードLIST_ENTRIESを追加することができます。

OPTIONS(*LIST_ENTRIES *MAX)

 

この*List_Entriesキーワードでは、リストタイプのコンポーネントが持つことのできる項目数を指定します。リストタイプのコンポーネントには以下のものがあります。

      Grid

      ListView

      TreeView

      ComboBox

      ListBox

      Memo

      Graph

      Property Sheet

許可される項目の数は、リストにRDMLXフィールドが含まれるかどうか、および、フルRDMLXを使用可能なコンポーネントにリストがあるかどうかによって異なります。

*COMPUTEは、リストのフィールドに基づいた最大の項目数が必須とされることを設定します。リストに含まれるのがRDMLフィールドのみの場合は、項目数はRDMLレベルに制限されます(最大32767項目)。リストにRDMLXフィールドが含まれる場合は、リストはフルRDMLXリストとみなされ、プラットフォームに応じてより多くの最大項目数が許可されます。

*MAXは、項目数の上限を、リストが含まれるコンポーネントに許可されている最大数に設定します。リスト内のフィールドがRDMLXであるかどうかにかかわらず、リストがRDMLコンポーネントにある場合はRDMLのリスト項目数に上限が設定されますが、フルRDMLXコンポーネントにある場合はRDMLXのリスト項目数に設定されます。

NAME

NAMEは、コンポーネントのこのインスタンスの固有の名前です。

SCOPE

SCOPEパラメータを使用して(値に*SHAREDを指定)、オーナー・コンポーネントの異なるインスタンス間で共有されるコンポーネント・インスタンスを作成することができます。DEFINE_COM内で*SHAREDが指定されると、メンバー・コンポーネントの共有インスタンスが1つだけ作成されます。これは、オーナー・コンポーネントのインスタンスがいくつ作成されているかには関係ありません。

*SHAREDを使用できるのは、コンポーネントのBEGIN_COMステートメントのすぐ後ろにあるDEFINE_COMコマンド内だけです。

SCOPEパラメータの値が*DEFAULTである場合は、DEFINE_COMコマンドの有効範囲は、その位置によって決まります。BEGIN_COMステートメントのすぐ後ろにある場合、有効範囲は*INSTANCEとして解釈されます。DEFINE_COMコマンドがイベント、メソッド、プロパティ・ルーチンの後ろにある場合は、*LOCALとして解釈されます。

有効範囲が*INSTANCEであると、オーナー・コンポーネントの新しいインスタンスが作成されるたびに、メンバー・コンポーネントの新しいインスタンスが作成されます。この値を指定できるのは、コンポーネントのBEGIN_COMステートメントのすぐ後ろにあるDEFINE_COMコマンド内だけです。

有効範囲が*LOCALであると、イベント、メソッド、プロパティ・ルーチンが実行されるたびに、コンポーネントの新しいローカル・インスタンスが作成されます。この値を指定できるのは、イベント、メソッド、プロパティ・ルーチンのすぐ後ろにあるDEFINE_COMコマンド内だけです。

すべての*APPLICATION変数は、変数名で識別できます。したがって、対象の変数名に関するDEFINE_COMを組み込み、スコープとして*APPLICATIONを指定するだけで、1つのコンポーネント・インスタンスを2つのコンポーネント・クラスで共有することが可能になります。

*DYNAMICではない*APPLICATIONスコープの変数に対する最初の参照によって、コンポーネント・インスタンスが作成されます。それ以降のすべてのアクセスでは、そのインスタンスが取得されます。

*APPLICATIONスコープのコンポーネント・インスタンスの取得時にチェックされるのは、そのコンポーネント・インスタンスのクラスが、その変数のDEFINE_COMで指定されているクラスに間違いなくキャストされるかどうかという点だけです。

*APPLICATION変数は、アプリケーションの終了時に解放されます。したがって、*APPLICATIONスコープのコンポーネント・インスタンスが使用するコンポーネント・クラスを十分に理解しているかどうかを慎重に確認する必要があります。そのコンポーネント・クラスを実装するために必要なすべてのコンポーネントDLLがメモリー内に留まっているのは、コンポーネント・インスタンスの存続期間中であり、それはアプリケーションの存続期間と同一である場合もあります。

REFERENCE

REFERENCEパラメータは、定義中のコンポーネントへの参照を解決する方法を定義するために使用します。参照は、CLASSパラメータで定義されたオブジェクトに対して作成され、DEFINE_COMステートメント中のNAMEパラメータによって定義される変数に割り当てられます。

参照を割り当てることによって、オブジェクトへの参照を作成および解放する時期を制御できることから、不要になったメモリの位置を空けることができるため、システム・リソースを経済的に使用できます。また、ActiveXを介して外部コンポーネントおよびアプリケーションを使用するときに、実行時参照を設定する必要があります。

*DEFAULTを指定すると、*SCOPEパラメータによって決定される省略時の参照が使用されます。

*STATICを指定すると、実行中にDEFINE_COMステートメントに到達した時点で、CLASSパラメータで定義されたコンポーネントに対して参照が作成され、NAMEパラメータで定義された変数にこの参照が割り当てられます。CLASSパラメータでは、具体的なクラスを定義する必要があります。これは、SCOPEに*INSTANCE(フォームを除く)または*LOCALが指定されているときのデフォルトです。

*DEFERREDを指定すると、実行中にDEFINE_COMステートメントに到達した時点で、コンポーネント参照が*NULLに設定されます。その後は、コンポーネントがコード内で使用されると、CLASSパラメータで定義されたコンポーネントに対して参照が作成され、NAMEパラメータで定義された変数にこの参照が割り当てられます。このコンポーネントを使用するコードが実行されないと、参照は作成されないことになります。CLASSパラメータでは、具体的なクラスを定義する必要があります。これはSCOPEに*INSTANCEが指定されているときのデフォルトです。

*DYNAMICを指定すると、実行中にDEFINE_COMステートメントに到達した時点で、コンポーネント参照が*NULLに設定され、コンポーネントに対しては自動的に参照が作成されません。CLASSパラメータで定義されたコンポーネントに参照を割り当て、NAMEパラメータで定義された変数に参照を割り当てるには、SET_REFコマンドを使用する必要があります。

RDMLXファンクションでDEFINE_COMコマンドを使用することができます。*HEAVYUSAGEとして実行するファンクションは、 呼び出しの期間中、参照されるコンポーネントのステータスが保持されます。ステータスが保持されない場合は、*DYNAMICのコンポーネントを使用してください。

注:

コンポーネントのこのインスタンスに対するプロパティのうち、変更されたものがDEFINE_COMステートメントに表示されます。プロパティのデフォルトは表示されません。

DESC

DESCパラメータを使用して、コンポーネントのこのインスタンスに対する短い記述を指定することができます。40文字が最長です。

DEFINE_EVTコマンドのOPTIONSパラメータの設定によって、イベントを処理するEVTROUTINEコマンドのOPTIONSパラメータの値が自動的に設定されます。

HELP

HELPパラメータを使用して、コンポーネントのこのインスタンスに対する長い記述を指定することができます。ヘルプ・テキストは、ヘルプメニューの機能オプションを使用して表示することができます。250文字が最長です。