このドキュメントでは、次のトピックについて説明します。
指定した Natural データフォーマットでデータをローカルクリップボードに挿入します。 ローカルクリップボードにこのフォーマットですでにデータが含まれている場合、そのデータはこの呼び出しにより置き換えられます。
Natural は、事前定義されたフォーマットとプライベートデータフォーマット(下記参照)の両方をサポートします。 事前定義フォーマットを使用する利点は、これらのフォーマットが他の多くの Windows アプリケーションで認識され、理解されることです。 事前定義フォーマットは数値文字列で表されます。このために、記号定数がローカルデータエリア NGULKEY1 に定義されています。 例えば、フォーマット CF-TEXT は標準テキストフォーマット(データはキャリッジリターン/改行文字のペアで区切られたテキストの行で構成される)を示します。 同様に、CF-FILELIST フォーマットは、ヌルターミネータ(値 0 の文字)で区切られたファイル名および(または)ディレクトリパス名と、リスト終了を示す付加的な末尾ヌルターミネータでデータが構成されることを示します。 このようなファイルリストは、Windows Explorer で使用される標準クリップボードフォーマット、および Natural のようなファイルのドラッグドロップをサポートする他の多くのアプリケーションに対応します。 Natural は、フォーマットに応じて、Natural が書き込む各フィールド(スカラまたは配列要素)の間のデータ項目間に必要なデリミタ(キャリッジリターン/改行またはヌルターミネータ)を自動的に挿入します。最後のデータ項目の後にトレーラがあれば、これも挿入します。 ただし、複数項目(テキスト行またはファイル名)を書き込むために、単一の大きなフィールド(例:ダイナミックアルファ変数)を使用する場合は、データ項目間にデリミタを明示的に指定しなければなりません。 配列範囲を使用する場合、配列範囲は暗黙的に内部拡張され、範囲内の各配列要素が順々に明示的に指定された場合(下の例を参照)のように処理されることに注意してください。 CF-TEXT フォーマットおよび CF-FILELIST フォーマットの場合、受け取るデータがアルファフォーマットになっていなければ、MOVE ステートメントと互換性のある方法で自動的にアルファフォーマットに変換されます。
プライベートフォーマットはより柔軟ですが、Natural にしか理解されません。 この場合はデータのコピーが保存され、データ変換は行われません。ただし、アルファオペランドに属している末尾の空白が、スペースを節約するために削除される場合は例外です。 プライベートフォーマットは、数字で始まらない文字列で表されます。 ソースとターゲットはどちらも、それぞれ SET-CLIPBOARD-DATA アクションまたは GET-CLIPBOARD-DATA アクションで使用するために、フォーマットの名前を知る必要があります。 すべてのプライベートフォーマットに同じ内部データ構造が使用されますが、複数のプライベートフォーマットを使用できることで、データの不正な解釈を防ぐことができます。 例えば、ActiveX ツリービューノードのデータとリストボックス項目データの両方をプライベートフォーマットで転送する場合を考えます。 それぞれのケースで明確なフォーマットを指定することにより(例:'TVNODEDATA' と 'LBITEMDATA')、リストボックスがツリービューデータを解釈しようとするのを防ぐことができます(逆も同様)。 貼り付けまたはドロップ操作が生じるかどうかを決定する場合、各コントロールは個々のフォーマット文字列を INQ-FORMAT-AVAILABLE アクションに渡すだけでよく、データ自体を調べる必要はありません。
ローカルクリップボードでは常に複数フォーマットの情報を保持できますが、各フォーマットごとに SET-CLIPBOARD-DATA を別個に呼び出してデータを書き込む必要があります。 さらに、各フォーマットのデータは SET-CLIPBOARD-DATA への単一の呼び出しで指定しなければなりません。 このアクションへの別個の呼び出しを使って、各フォーマットのデータをビット単位で構築することはできません。
このアクションを使用するには、クリップボードが開いている必要があります。 このアクションを使用して BEGIN-DRAG イベントのドラッグドロップデータを準備している場合、クリップボードは Natural によってすでに暗黙で開かれているため、明示的に開く必要はありません。 それ以外の場合(Windows クリップボードのデータを準備している場合など)、このアクションの前に OPEN-CLIPBOARD を明示的に呼び出す必要があります。
このアクションはデータを Windows クリップボードに書き込まないことに注意してください。 データを Windows クリップボードで使用可能になる(したがって、他のアプリケーションから見えるようになる)のは、その後 CLOSE-CLIPBOARD アクションを呼び出した後になります。 ただし、ドラッグドロップ操作の場合には不要です。これは、ドロップターゲットによって使用される GET-CLIPBOARD-DATA アクションは、ドラッグドロップクリップボード(ソースプロセスのローカルクリップボード)で優先的に直接機能するためです。
名前/データタイプ | 説明 |
---|---|
フォーマット(A253) | 入力
Clipboard Natural データフォーマット。 事前定義されたフォーマット(例えば CF-TEXT)用の標準の数値文字列または個別フォーマット用のユーザー定義文字列です。 |
データ
(ハンドル以外の任意のタイプの一覧) |
入力
書き込まれるデータ。 配列添字範囲や多次元配列など、任意の数の非ハンドルスカラか配列オペランドまたはその両方で構成できます。 ダイナミックなアルファベット変数もサポートされています。 |
Response(I4) | 出力
Natural エラー(該当する場合)。 |
DEFINE DATA LOCAL 1 #DYN (A) DYNAMIC 1 #ARR (A20/3) INIT<'Line 1', 'Line 2', 'Line 3'> 1 #RESPONSE (I4) END-DEFINE * * NOTE: All three calls to SET-CLIPBOARD-DATA below have the same effect! * /* Example 1 - Items specified as individual fields PROCESS GUI ACTION SET-CLIPBOARD-DATA WITH CF-TEXT #ARR(1) #ARR(2) #ARR(3) GIVING #RESPONSE * /* Example 2 - Items specified as array index range PROCESS GUI ACTION SET-CLIPBOARD-DATA WITH CF-TEXT #ARR(*) GIVING #RESPONSE * /* Example 3 - Items specified using dynamic variable/* (note the use of the explicit delimiter) COMPRESS #ARR(1) END-OF-LINE #ARR(2) END-OF-LINE #ARR(3) INTO #DYN LEAVING NO SPACE PROCESS GUI ACTION SET-CLIPBOARD-DATA WITH CF-TEXT #DYN #ARR(3) GIVING #RESPONSE