メインコンテンツまでスキップ
バージョン: 20 R7 BETA

OBJECT DUPLICATE

OBJECT DUPLICATE ( {* ;} object {; newName {; newVar {; boundTo {; moveH {; moveV {; resizeH {; resizeV}}}}}}} {; *} )

引数説明
*演算子指定時: objectはオブジェクト名 (文字列)、省略時: objectは変数またはフィールド
objectanyオブジェクト名 (*指定時)、または変数やフィールド (*省略時)
newNameText新しいオブジェクトの名前
newVarPointer新しいオブジェクトの変数へのポインター
boundToText直前の入力順の入力可能オブジェクトまたはラジオボタングループ
moveHInteger新しいオブジェクトの横シフト (>0 = 右方向, <0 = 左方向)
moveVInteger新しいオブジェクトの縦シフト (>0 = 下方向, <0 = 上方向)
resizeHIntegerオブジェクトの横リサイズ
resizeVInteger新しいオブジェクトの縦リサイズ
*演算子指定時= 絶対座標, 省略時= 相対座標

このコマンドはスレッドセーフではないため、プリエンプティブなコードには使えません。

説明

OBJECT DUPLICATEコマンドを使用して、object引数で指定したオブジェクトのコピーを作成できます。コピーはアプリケーションモードで実行されているフォームのコンテキストで生成されます。デザインモードのソースフォームは変更されません。

デフォルトで、割り当てられているオブジェクトメソッドを含む、ソースオブジェクトに対しプロパティリストで設定されているすべてのオプションがコピーに適用されます ( サイズ、リサイズオプション、カラー等)。
しかし以下の例外について留意してください:

  • デフォルトボタン: フォーム中にデフォルトボタンは1 つだけ存在できます。" デフォルトボタン" プロパティを持つボタンを複製すると、このプロパティはコピーに割り当てられ、ソースオブジェクトからは取り除かれます。
  • キーボードショートカット: ソースオブジェクトに割り当てられているキーボードショートカットは複製されません。このプロパティはコピー先では未設定となります。
  • オブジェクト名: フォーム中でオブジェクト名はユニークでなければなりません。newName引数を渡さない場合、ソースオブジェクト名が自動でインクリメントされ新しいオブジェクトで使用されます ( 後述参照)。

オプションの * 引数を渡すと、object 引数はオブジェクト名 (文字) です。この引数を渡さないと、object はフィールドまたは変数です。この場合、文字ではなくフィールドまたは変数への参照 (フィールドまたは変数オブジェクトのみ) を渡します。
フィールドや変数参照を渡した場合で、フォーム中に同じ参照を使用するオブジェクトが複数ある場合、最初に見つかったオカレンスが使用されます。このような曖昧さを避けるために、ユニークであるオブジェクト名の使用をお勧めします。

newName 引数にはオブジェクトのコピーに割り当てる名前を渡します。この名前はオブジェクト名の命名規則に沿い、フォーム中でユニークでなければなりません。有効でない、あるいは既に使用されている名前を渡すと、コマンドはなにも行わず、OK 変数に0 が設定されます。
この引数を省略するか空の文字列を渡すと、ソースオブジェクト名をインクリメントすることで、新しい名前が自動生成されます。例えば:

ソース名コピー名
ButtonButton1
Button20Button21
Button21Button23 (Button22が既に存在すれば)

newVar には新しいオブジェクトに割り当てられる変数へのポインタを渡します。ルールとして、ソースオブジェクトと同じ型の変数をポイントしなければなりません。しかし特定の種類の" 型変換" が可能です。汎用的なコードを書けるようにするために、コマンドは自動処理を提供します:

  • 通常すべての " 入力可" 変数は型変換が可能です。例えば日付や倍長整数を表示するオブジェクトを複製し、テキスト型の変数を割り当てることができます。互換のあるプロパティは保持されます。またテキストオブジェクトとピクチャオブジェクト間の型の変更も許容します。テキストオブジェクトを複製してブール変数やフィールドを割り当てると、自動でチェックボックスとして表示される点に留意してください。
  • 通常動的に変数からフィールド、あるいはその逆に変換が可能です。
    他方、グラフィックオブジェクト (ボタン、チェックボックス等) を他のタイプのコントロールに変換することはできません。

変数の型がオブジェクトと互換でない場合、コマンドはなにも行わず、OK変数に0が設定されます。この引数を省略すると、4D が変数を動的に作成します( 参照)。スタティックオブジェクト (線、四角、スタティックピクチャ等) を複製するとき、この引数は無視されます。他の引数を使用できるようにするには Nil ポインタ (->[]) を渡します。

boundTo 引数は2 つのケースで使用します:

  • 入力順の変更: この場合boundTo には複製したオブジェクトの直前の入力順の入力可オブジェクト名を渡します。新しいオブジェクトをページ中最初の入力順にしたい場合は、Object First in entry order 定数を渡します(OBJECT Get pointer コマンド参照)。
  • ラジオボタングループへの関連付け: ラジオボタンをグループ化するために使用します。複製したオブジェクトがラジオボタンのとき、boundToに新しいオブジェクトを関連付けたいグループのラジオボタンの名前を渡します。

この引数を省略するか空の文字列を渡すと、新しいオブジェクトはフォームページ中の最後の入力可能オブジェクトとなります。

新しいオブジェクトはmoveHmoveVresizeH そしてresizeV 引数を使用して移動およびリサイズできます。OBJECT MOVE コマンドのように、移動やリサイズの方向はmoveHmoveV 引数に渡された値の符号で指定されます:

  • 値が正数の場合、移動やリサイズはそれぞれ右および下方向に行われます。
  • 値が負数の場合、移動やリサイズはそれぞれ左および上方向に行われます。

デフォルトでmoveHmoveVresizeH そしてresizeV の値は、以前の場所からの相対位置で、オブジェクトの座標を変更します。この引数で絶対座標を指定したい場合、最後のオプションの * 引数を渡します。 これらの引数を省略すると、新しいオブジェクトはソースオブジェクトの上に重ねて配置されます。

このコマンドはフォームを表示するコンテキストで使用されなければなりません。コマンドは通常On Load フォームイベントやユーザアクション (On Clicked イベント) で実行されます。

Note: On Load フォームイベントがソースオブジェクトに割り当てられているとき、コマンド実行時に複製されたオブジェクトでも生成されます。これにより例えば値の初期化などが行えます。

技術的および論理的な理由により、OBJECT DUPLICATEは特定のイベント内では呼び出すことができません。特に:

  • オブジェクトメソッド内で生成されるOn Load イベント
  • On Unload イベント
  • 印刷のコンテキストに関連するイベント (On Header, On Printing Detail等)。オブジェクトを複数回印刷するにはPrint object コマンドを使用します。

サポートされていないコンテキストでコマンドが呼び出されると、オブジェクトは複製されずに、OK変数に0が設定されます。コマンドが印刷のコンテキストで呼び出されるとエラー-10601が生成されます。

コマンドが正しく実行されるとOKシステム変数に1が、そうでなければ0が設定されます。

例題 1

既存の"OKButton" オブジェクトの上に新しいボタン"CancelButton" を作成し、vCancel 変数を割り当てます:

 OBJECT DUPLICATE(*;"OKButton";"CancelButton";vCancel)

例題 2

既存のラジオボタン"bRadio5" を基に新しいラジオボタン"bRadio6" を作成します。このボタンには変数<>r6 が割り当てられ、"bRadio5" ボタンのと同じグループに入ります。位置は20 ピクセル下に作成されます。:

 OBJECT DUPLICATE(*;"bRadio5";"bRadio6";<>r6;"bRadio5";0;20)

参照

Form Objects (Access)
OBJECT Get pointer
OBJECT MOVE