version 11 (Modified)
APPEND DATA TO PASTEBOARD (dataType; data)
| 引数 | 型 | 説明 | |
| dataType | 文字列 | 追加するデータのタイプ | |
| data | BLOB | ペーストボードに追加するデータ |
説明
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 PASTEBOARDとGET RECORD FROM PASTEBOARDは、ペーストボードとの間でコピーするためにレコード全体を1つのデータとして扱うことができます。
` SET RECORD TOPASTEBOARD
プロジェクトメソッド ` SET RECORD TOPASTEBOARD
( 数値 ) ` SET RECORD TOPASTEBOARD
( ーブル 数値 )
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 FROMPASTEBOARD
メソッド ` GET RECORD FROMPASTEBOARD
( 数値 ) ` GET RECORD FROMPASTEBOARD
( ーブル 数値 )
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 が生成されます。