ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
APPEND DATA TO PASTEBOARD
|
APPEND DATA TO PASTEBOARD ( dataType ; data ) | ||||||||
引数 | 型 | 説明 | ||||||
dataType | 文字 |
![]() |
追加するデータのタイプ | |||||
data | BLOB |
![]() |
ペーストボードに追加するデータ | |||||
APPEND DATA TO PASTEBOARD コマンドは、dataTypeで指定されたデータタイプでdataBLOB内にあるデータをペーストボードに追加します。
Note: コピー/ペースト操作の場合、ペーストボードはクリップボードと同じです。
dataTypeには、追加するデータのタイプを指定する値を渡します。4D シグネチャ, UTI タイプ (Mac OS), フォーマット名/番号 (Windows), 4文字のタイプ (互換性) を渡すことができます。これらのデータタイプについてはの節を参照してください。
Windowsユーザへの注意: コマンドをテキストタイプのデータに対して使用するとき (dataType が"TEXT"、com.4d.private.text.native または com.4d.private.text.utf16)、Blob引数dataに含まれる文字列はNULL文字で終了していなければなりません。
通常、同一データの複数のインスタンスをペーストボードに追加、またはテキストやピクチャ以外のタイプのデータを追加するときには、APPEND DATA TO PASTEBOARDコマンドを使用します。ペーストボードに新しいデータを追加するには、まず最初にCLEAR PASTEBOARDコマンドを使用してペーストボードを消去する必要があります。
消去と追加を実行するには:
しかし、BLOBにテキストやピクチャが含まれている場合、APPEND DATA TO PASTEBOARD コマンドを使用してテキストやピクチャをペーストボードに追加できることに留意してください。
ペーストボードコマンドとBLOBを使用すると、洗練されたカット/コピー/ペーストの仕組みを構築でき、たった1つのデータではなく構造化されたデータを扱うことができます。以下の例では、2つのプロジェクトメソッドSET RECORD TO PASTEBOARDとGET RECORD FROM PASTEBOARDは、ペーストボードとの間でコピーするためにレコード全体を1つのデータとして扱うことができます。
` SET RECORD TO <span class="rte4d_cmd">PASTEBOARD</span><gen9> プロジェクトメソッド
` SET RECORD TO </gen9><span class="rte4d_cmd">PASTEBOARD</span><gen9> ( 数値 )
` SET RECORD TO </gen9><span class="rte4d_cmd">PASTEBOARD</span><gen9> ( テーブル 数値 )
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</gen9>
以下のようなレコードを表示させた時:
SET RECORD TO PASTEBOARD メソッドを[Employees] テーブルに適用すると、ペーストボードには以下のようなレコードのテキストイメージとレコード全体のイメージが含まれます。
<gen9> ` GET RECORD FROM </gen9><span class="rte4d_cmd">PASTEBOARD</span><gen9>メソッド
` GET RECORD FROM </gen9><span class="rte4d_cmd">PASTEBOARD</span><gen9>( 数値 )
` GET RECORD FROM </gen9><span class="rte4d_cmd">PASTEBOARD</span><gen9>( テーブル 数値 )
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</gen9>
ペーストボードにBLOBデータが正しく追加されると、OKシステム変数は1に設定されます。そうでなければ0が設定され、エラーが生成されます。
CLEAR PASTEBOARD
SET PICTURE TO PASTEBOARD
SET TEXT TO PASTEBOARD
プロダクト: 4D
テーマ: ペーストボード
番号:
403
変更: 4D v11 SQL
ランゲージリファレンス ( 4D v20 R7)