APPEND DATA TO PASTEBOARD

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11 (Modified)


APPEND DATA TO PASTEBOARD (dataType; data)

引数説明
dataType文字列追加するデータのタイプ
dataBLOBペーストボードに追加するデータ

説明

APPEND DATA TO PASTEBOARD コマンドは、dataTypeで指定されたデータタイプでdataBLOB内にあるデータをペーストボードに追加します。

Note: コピー/ペースト操作の場合、ペーストボードはクリップボードと同じです。

dataTypeには、追加するデータのタイプを指定する値を渡します。4D シグネチャ, UTI タイプ (Mac OS), フォーマット名/番号 (Windows), 4文字のタイプ (互換性) を渡すことができます。これらのデータタイプについては、ペーストボードの管理 の節を参照してください。

通常、同一データの複数のインスタンスをペーストボードに追加、またはテキストやピクチャ以外のタイプのデータを追加するときには、APPEND DATA TO PASTEBOARDコマンドを使用します。ペーストボードに新しいデータを追加するには、まず最初にCLEAR PASTEBOARDコマンドを使用してペーストボードを消去する必要があります。

消去と追加を実行するには:

・テキスト: SET TEXT TO PASTEBOARDコマンドを使用します。

・ピクチャ: SET PICTURE TO PASTEBOARDコマンドを使用します。

・ファイルパス名 (ドラッグ&ドロップ) : SET FILE TO PASTEBOARDコマンドを使用します。

しかし、BLOBにテキストやピクチャが含まれている場合、APPEND DATA TO PASTEBOARD コマンドを使用してテキストやピクチャをペーストボードに追加できることに留意してください。

例題

ペーストボードコマンドとBLOBを使用すると、洗練されたカット/コピー/ペーストの仕組みを構築でき、たった1つのデータではなく構造化されたデータを扱うことができます。以下の例では、2つのプロジェクトメソッドSET RECORD TO PASTEBOARDGET RECORD FROM PASTEBOARDは、ペーストボードとの間でコピーするためにレコード全体を1つのデータとして扱うことができます。

      ` SET RECORD TO 
PASTEBOARD
 プロジェクトメソッド
      ` SET RECORD TO 
PASTEBOARD
 ( 数値 )
      ` SET RECORD TO 
PASTEBOARD
 ( ーブル 数値 )

   C_LONGINT($1;$vlField;$vlFieldType)
   C_POINTER($vpTable;$vpField)
   C_STRING(255;$vsDocName)
   C_TEXT($vtRecordData;$vtFieldData)
   C_BLOB($vxRecordData)

      ` ペーストボードをクリア (カレントレコードがない場合には空のままとなる)
   CLEAR PASTEBOARD
      ` 引数で渡されたーブル番号のーブルポインタを得る
   $vpTable:=Table($1)
      ` ーブルのカレントレコードがあれば
   If ((Record number($vpTable->)>=0) | (Is new record($vpTable->)))
         ` レコードのキストイメージを保持するキスト変数を初期化
      $vtRecordData:=""
         ` レコードのフィールドごとに
      For ($vlField;1;Get last field number($1))
            ` フィールドの型を取得
         GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
            ` フィールドのポインタを取得
         $vpField:=Field($1;$vlField)
            ` フィールド型に基づき、適切な方法でデータをコピー
         Case of 
            : (($vlFieldType=Is Alpha Field ) | ($vlFieldType=Is Text ))
                  $vtFieldData:=$vpField->
            : (($vlFieldType=Is Real ) | ($vlFieldType=Is Integer ) | ($vlFieldType=Is Longint )
                                  | ($vlFieldType=Is Date ) | ($vlFieldType=Is Time ))
               $vtFieldData:=String($vpField->)
            : ($vlFieldType=Is Boolean)
               $vtFieldData:=String(Num($vpField->);"Yes;;No")
         Else
               ` 他のデータタイプは無視
            $vtFieldData:=""
         End case
            ` レコードのキストイメージを保持するキスト変数にフィールドデータを追加
         $vtRecordData:=$vtRecordData+Field name($1;$vlField)+":"+Char(9)+$vtFieldData+CR
            ` Note: CRメソッドは、Mac OS上ではChar(13)を、Windows上ではChar(13)+Char(10)を返す
      End for 
         ` キストイメージをペーストボードに置く
      SET TEXT TO PASTEBOARD($vtRecordData)
         ` Temporary フォルダのスクラップファイル名
      $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
         ` スクラップファイルがあれば削除する (ここでエラーをストすべき)
      DELETE DOCUMENT($vsDocName)
         ` スクラップファイルを作成
      SET CHANNEL(10;$vsDocName)
         ` スクラップファイルにレコード全体を送信
      SEND RECORD($vpTable->)
         ` スクラップファイルを閉じる
      SET CHANNEL(11)
         ` スクラップファイルをBLOB読み込む
      DOCUMENT TO BLOB($vsDocName;$vxRecordData)
         ` スクラップファイルはもう必要ない
      DELETE DOCUMENT($vsDocName)
         ` ペーストボードにレコードの完全なイメージを追加
         ` Note: ここではデータ型に"4Drc" を使用しいます
      APPEND DATA TO PASTEBOARD("4Drc";$vxRecordData)
         ` この時点でペーストボードには以下が含まれます:
         ` (1) レコードのキストイメージ (以下のスクリーンショットで見られるような)
         ` (2) レコード全体のイメージ (ピクチャや BLOB フィールドを含む)
   End if

以下のようなレコードを表示させた時:


SET RECORD TO PASTEBOARD メソッドを[Employees] テーブルに適用すると、ペーストボードには以下のようなレコードのテキストイメージとレコード全体のイメージが含まれます。




GET RECORD FROM PASTEBOARDメソッドを使用して、このレコードイメージを他のレコードにペーストできます:

      ` GET RECORD FROM 
PASTEBOARD
メソッド
      ` GET RECORD FROM 
PASTEBOARD
( 数値 )
      ` GET RECORD FROM 
PASTEBOARD
( ーブル 数値 )
   C_LONGINT($1;$vlField;$vlFieldType;$vlPosCR;$vlPosColon)
   C_POINTER($vpTable;$vpField)
   C_STRING(255;$vsDocName)
   C_BLOB($vxPasteboardData)
   C_TEXT($vtPasteboardData;$vtFieldData)

      ` 引数とし渡されたーブル番号のーブルポインタを得る
   $vpTable:=Table($1)
      ` カレントレコードがあれば
   If ((Record number($vpTable->)>=0) | (Is new record($vpTable->)))
      Case of
            ` ペーストボードに完全なレコードイメージが含まれいるか?
         : (Pasteboard data size("4Drc")>0)
               ` 含まれいればペーストボードの中身を取り出す
            GET PASTEBOARD DATA("4Drc";$vxPasteboardData)
               ` Temporary フォルダ内のスクラップファイル名
            $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
               ` スクラップファイルが存在すれば削除する (ここでエラーをストすべき)
            DELETE DOCUMENT($vsDocName)
               ` スクラップファイルにBLOBを保存
            BLOB TO DOCUMENT($vsDocName;$vxPasteboardData)
               ` スクラップファイルを開く
            SET CHANNEL(10;$vsDocName)
               ` スクラップファイルからレコード全体を取り込む
            RECEIVE RECORD($vpTable->)
               ` スクラップファイルを閉じる
            SET CHANNEL(11)
               ` スクラップファイルはもう必要ない
            DELETE DOCUMENT($vsDocName)
               ` ペーストボードにTEXTが含まれいるか?
         : (Pasteboard data size("TEXT")>0)
               ` ペーストボードからキストを取り出す
            $vtPasteboardData:=Get text from pasteboard
               ` インクリメントするフィールド番号を初期化
            $vlField:=0
            Repeat 
                  ` キスト中で次のフィールド行を探す
               $vlPosCR:=Position(CR ;$vtPasteboardData)
               If ($vlPosCR>0)
                     ` フィールド行を取り出す
                  $vtFieldData:=Substring($vtPasteboardData;1;$vlPosCR-1)
                     ` コロン ":" があれば
                  $vlPosColon:=Position(":";$vtFieldData)
                  If ($vlPosColon>0)
                     ` フィールドデータのみを取り出す (フィールド名を削除)
                     $vtFieldData:=Substring($vtFieldData;$vlPosColon+2)
                  End if
                     ` フィールド番号をインクリメント
                  $vlField:=$vlField+1
                     ` ペーストボードには必要以上のデータが含まれいることがある...
                  If ($vlField<=Get last field number($vpTable))
                        ` フィールドタイプを取得
                     GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
                        ` フィールドへのポインタを取得
                     $vpField:=Field($1;$vlField)
                        ` フィールドのデータ型に基づき、適切な方法でデータをコピー
                     Case of 
                        : (($vlFieldType=Is Alpha FIeld) | ($vlFieldType=Is Text ))
                           $vpField->:=$vtFieldData
                        : (($vlFieldType=Is Real ) | ($vlFieldType=Is Integer ) | ($vlFieldType=Is Longint))
                           $vpField->:=Num($vtFieldData)
                        : ($vlFieldType=Is Date )
                           $vpField->:=Date($vtFieldData)
                        : ($vlFieldType=Is Time)
                           $vpField->:=Time($vtFieldData)
                        : ($vlFieldType=Is Boolean)
                           $vpField->:=($vtFieldData="Yes")
                     Else 
                           ` 他のフィールドタイプは無視
                     End case
                  Else
                        ` すべのフィールドタイプに代入したのでループを抜ける
                     $vtPasteboardData:=""
                  End if
                     ` 取り出したキストを削除 
                  $vtPasteboardData:=Substring($vtPasteboardData;$vlPosCR+Length(CR ))
               Else 
                     ` 区切り文字が見つからないのでループを抜ける
                  $vtPasteboardData:=""
               End if 
                  ` データがある間ループする
            Until (Length($vtPasteboardData)=0)
         Else 
            ALERT("The pasteboard does not any data that can be pasted as a record.")
      End case 
   End if 

参照

CLEAR PASTEBOARD, SET PICTURE TO PASTEBOARD, SET TEXT TO PASTEBOARD.

システム変数

BLOBデータが正しくペーストボードに追加されるとOKに1が、そうでなければ0が設定されエラーが生成されます。

エラー処理

ペーストボードにBLOBを追加するのに十分なメモリがない場合、エラー -108 が生成されます。


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次