クリップボードについて
クリップボードとは?
■クリップボードとは?
クリップボードとは、OS 上で、カットやコピーやペーストを行うときに一時的に保存される領域です。
■クリップボードに格納できるフォーマットについて
Adobe AIR にてクリップボードにコピーできるデータのタイプは、以下の種類があります。
・ | 文字列 |
・ | URL文字列 |
・ | HTML文字列 |
・ | リッチテキストフォーマット |
・ | ファイル操作(複数可) |
・ | ビットマップ |
AIR からクリップボードに保存する場合、タイプが別であれば、それぞれのデータを別々に保存する事が出来ます。
しかし同じタイプにコピーした場合、前の保存データは破棄されます。
クリップボードオブジェクトを作成する
■空のクリップボードオブジェクトを作成する
new 演算子を使って、Clipboard クラスをインスタンス化します。
空のクリップボードは、データを格納するための入れ物として使用します。
空のクリップボードオブジェクトを作成する
import flash.desktop.Clipboard;
// 空のクリップボードオブジェクトを作成
var clipboard : Clipboard = new Clipboard();
■現在の OS に対応するクリップボードオブジェクトを取得する
現在の OS のクリップボードを取得するには、Clipboard.generalClipboard プロパティを使用します。
このページでは、「OS のクリップボード」を利用したアクセス方法について解説していきます。
OS のクリップボードをクリップボードオブジェクトとして取得する
import flash.desktop.Clipboard;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
クリップボードからデータを取り出す
サンプルをダウンロード
■クリップボードオブジェクトからデータを取り出す
クリップボードオブジェクトからデータを取り出すには、getData() メソッドを使用します。
Clipboard.getData ( タイプ , [転送モード] ) :Object
第01引数 | String | 取り出したいデータのタイプを指定 ClipboardFormats.* |
第02引数(略可) | String | 取り出したいデータの転送モードを指定 ClipboardTransferMode.* |
戻り値 | Object | データがオブジェクト型で返ります。存在しない場合は null |
■第01引数 データのタイプ
第01引数で設定できるデータのタイプです。
定数 | 文字 | 説明 |
ClipboardFormats. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "air:url" | URL 文字列 |
ClipboardFormats. | "air:rtf" | リッチテキストフォーマット(Adobe AIR 1.1 以降) |
ClipboardFormats. | "air:file list" | ファイルのリスト |
ClipboardFormats. | "air:bitmap" | ビットマップイメージ |
"air:*" "flash:*" 以外の文字列 | カスタマイズ |
■第02引数 転送モード
第02引数で設定できる転送モードです。
クリップボードへのデータ格納時に、データのタイプにカスタマイズフォーマットを指定していて、さらに Object 型や Array 型 などのリファレンス型のデータを格納している場合、効果があります。
「参照渡し」によるデータの取得は、同一 AIR アプリ内でのみ可能です。
ClipboardFormats 定数で定義されている標準のフォーマットの場合、設定は無視され、必ず「コピー渡し」となります。
定数 | 文字 | 説明 |
ClipboardTransferMode. | "cloneOnly" | 「コピー渡し」によるデータの取得を試みます。 |
ClipboardTransferMode. | "clonePreferred" | 「コピー渡し」によるデータの取得を試みます。 失敗すれば「参照渡し」によるデータの取得を試みます。 |
ClipboardTransferMode. | "originalOnly" | 「参照渡し」によるデータの取得を試みます。 |
ClipboardTransferMode. | "originalPreferred" | 「参照渡し」によるデータの取得を試みます。 失敗すれば「コピー渡し」によるデータの取得を試みます。 |
使用例です。
OS のクリップボードから文字列を取り出す
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードからテキストデータを取得
var str:String = clipboard.getData(ClipboardFormats.TEXT_FORMAT) as String;
if(str){
trace(str);
}
OS のクリップボードからリッチテキストフォーマットデータを取り出す(Adobe AIR 1.1 以降)
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.utils.ByteArray;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードからリッチテキストフォーマットデータを取得
var byte_array:ByteArray = clipboard.getData(ClipboardFormats.RICH_TEXT_FORMAT) as ByteArray;
if(byte_array){
trace(byte_array);
}
OS のクリップボードからファイルのリストを取り出す
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.filesystem.File;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードからファイルリストを取得
var file_list:Array = clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
if(file_list){
var i:int;
var num:int = file_list.length;
// 配列の中身を列挙
for(i=0;i < num;i++){
var file : File = file_list[i];
trace(file.nativePath);
}
}
OS のクリップボードからビットマップイメージを取り出す
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.PixelSnapping
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードからビットマップを取得
var bmp_data:BitmapData = clipboard.getData(ClipboardFormats.BITMAP_FORMAT) as BitmapData;
if(bmp_data){
// ビットマップを作成
var bmp_obj : Bitmap = new Bitmap( bmp_data , PixelSnapping.AUTO , true);
// ビットマップを表示リストに登録
stage.addChild(bmp_obj);
}
■クリップボードにデータが存在するか調べる
クリップボードに指定したタイプのデータが存在するか調べるには、hasFormat() メソッドを使用します。
Clipboard.hasFormat ( タイプ ) :Boolean
第01引数 | String | 取り出したいデータのタイプを指定 ClipboardFormats.* |
戻り値 | Boolean | 存在する場合は true、存在する場合は false |
■第01引数 データのタイプ
第01引数で設定できるタイプです。
定数 | 文字 | 説明 |
ClipboardFormats. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "air:url" | URL 文字列 |
ClipboardFormats. | "air:rtf" | リッチテキストフォーマット(Adobe AIR 1.1 以降) |
ClipboardFormats. | "air:file list" | ファイルのリスト |
ClipboardFormats. | "air:bitmap" | ビットマップイメージ |
使用例です。
OS のクリップボードに文字列データが存在するか調べる
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードにテキストデータがあるか調べる
var check:Boolean = clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT);
trace(check);
クリップボードにデータを格納する
サンプルをダウンロード
■クリップボードにデータを格納する
クリップボードオブジェクトにデータを格納するには、setData() メソッドを使用します。
Clipboard.setData ( タイプ , 格納したいデータ , データの直列化を許可するか ) :Boolean
第01引数 | String | 格納したいデータのタイプを指定 ClipboardFormats.*、カスタマイズしたい場合は好きな文字列を指定 |
第02引数 | Object | 格納したいデータを指定 |
第03引数(略可) | Boolean | 「クリップボードからデータを取り出す側」に対して、「参照渡し」と「コピー渡し」を許可する場合は true (デフォルト)、「参照渡し」のみ許可する場合は false(参照アクセスは、同一 AIR アプリ内でのみ可能) |
戻り値 | Boolean | 成功した場合 true 、失敗した場合 false |
■第01引数 データのタイプ
第01引数で設定できるタイプです。
定数 | 文字 | 説明 |
ClipboardFormats. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "air:url" | URL 文字列 |
ClipboardFormats. | "air:rtf" | リッチテキストフォーマット(Adobe AIR 1.1 以降) |
ClipboardFormats. | "air:file list" | ファイルのリスト |
ClipboardFormats. | "air:bitmap" | ビットマップイメージ |
"air:*" "flash:*" 以外の文字列 | カスタマイズ |
■第03引数 データの直列化を許可するか
第01引数で指定したデータのタイプが、カスタマイズフォーマットであり、さらに Object 型や Array 型などのリファレンス型である場合、効果があります。
true を指定すると、データ取得側に対して、データの「参照渡し」と「コピー渡し」を許可します。
false を指定すると、データ取得側に対して、データの「参照渡し」のみ許可します。
ClipboardFormats 定数で定義されている標準のフォーマットの場合、設定は無視され、必ず「コピー渡し」となります。
「参照渡し」は、「同一の AIR アプリ」内でのみ可能です。(OS のクリップボード経由は失敗します)
false を設定した場合、「同一の AIR アプリ」以外にデータを渡すことはできません。
Number 型や String 型などのプリミティブ型は、「参照渡し」はできません。
使用例です。
OS のクリップボードに文字列を格納する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// コピーしたい適当な文字列
var str:String = "コピーテスト";
// クリップボードに文字列をセット
clipboard.setData(ClipboardFormats.TEXT_FORMAT , str);
OS のクリップボードにビットマップイメージを格納する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.display.BitmapData;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// コピーしたい適当なビットマップデータ
var bmp_data:BitmapData = new BitmapData(256,256,true,0xFFFF8800);
// クリップボードにビットマップをセット
clipboard.setData(ClipboardFormats.BITMAP_FORMAT , bmp_data);
クリップボードを利用して、オブジェクトの参照渡しを行う
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.desktop.ClipboardTransferMode;
// 空のクリップボードを取得
var clipboard : Clipboard = new Clipboard();
// オブジェクトを作成
var obj0:Object = new Object();
obj0.abc = "テストその1";
// 「カスタマイズフォーマット "customize:test"」でオブジェクトをセット(参照渡しのみ許可)
clipboard.setData("customize:test" , obj0 , false);
// クリップボードから「カスタマイズフォーマット "customize:test"」のデータを取り出す(参照渡しによる取得を試みる)
var obj1:Object = clipboard.getData("customize:test" , ClipboardTransferMode.ORIGINAL_ONLY);
// 表示テストその1
trace(obj0.abc);
trace(obj1.abc);
// 表示テストその2
obj0.abc = "テストその2";
trace(obj0.abc);
trace(obj1.abc);
■クリップボードのデータが取り出される瞬間を調べる
クリップボードのデータが取り出される瞬間に、関数を呼び出されるように指定するには、setDataHandler() メソッドを使用します。
注意点としては、このメソッドを使用後、setData() メソッドを使用すると関数が呼ばれなくなります。
また OS 側で別のデータがコピーされたときも関数が呼び出されなくなります。
Clipboard.setDataHandler ( タイプ , コールバック関数 , データの直列化を許可するか ) :Boolean
第01引数 | String | 格納したいデータのタイプを指定 ClipboardFormats.*、カスタマイズしたい場合は好きな名称 |
第02引数 | Function | コールバック関数を指定(戻り値に格納したいデータ型を返すようにするとそのデータが取り出されます) |
第03引数(略可) | Boolean | 「クリップボードからデータを取り出す側」に対して、「参照渡し」と「コピー渡し」を許可する場合は true (デフォルト)、「参照渡し」のみ許可する場合は false(参照アクセスは、同一 AIR アプリ内でのみ可能) |
戻り値 | Boolean | 成功した場合 true 、失敗した場合 false |
■第01引数 データのタイプ
第01引数で設定できるタイプです。
定数 | 文字 | 説明 |
ClipboardFormats. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "air:url" | URL 文字列 |
ClipboardFormats. | "air:rtf" | リッチテキストフォーマット(Adobe AIR 1.1 以降) |
ClipboardFormats. | "air:file list" | ファイルのリスト |
ClipboardFormats. | "air:file promise list" | ファイルプロミスのリスト (AIR アプリからドラッグ時?) (Adobe AIR 2.0 以降) |
ClipboardFormats. | "air:bitmap" | ビットマップイメージ |
"air:*" "flash:*" 以外の文字列 | カスタマイズ |
■第02引数 コールバック関数
コールバック関数に、引数はありません。
戻り値から、格納したいデータを返します。
第01引数で指定したフォーマットに従う必要があります。
■第03引数 データの直列化を許可するか
第01引数で指定したデータのタイプが、カスタマイズフォーマットであり、さらに Object 型や Array 型などのリファレンス型である場合、効果があります。
true を指定すると、データ取得側に対して、データの「参照渡し」と「コピー渡し」を許可します。
false を指定すると、データ取得側に対して、データの「参照渡し」のみ許可します。
ClipboardFormats 定数で定義されている標準のフォーマットの場合、設定は無視され、必ず「コピー渡し」となります。
「参照渡し」は、「同一の AIR アプリ」内でのみ可能です。(OS のクリップボード経由は失敗します)
false を設定した場合、「同一の AIR アプリ」以外にデータを渡すことはできません。
Number 型や String 型などのプリミティブ型は、「参照渡し」はできません。
使用例です。
OS のクリップボードにコールバック関数を通して文字列を格納する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードにアクセスされる瞬間に呼び出されるイベント
clipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT , function ():String {
trace("テキストデータがコピーされようとしています");
// コピーしたいデータを返す
return "コピーテスト";
});
OS のクリップボードにコールバック関数を通してビットマップイメージを格納する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.display.BitmapData;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードにアクセスされる瞬間に呼び出されるイベント
clipboard.setDataHandler(ClipboardFormats.BITMAP_FORMAT , function ():BitmapData {
trace("ビットマップデータがコピーされようとしています");
// コピーしたいデータを返す
return new BitmapData(256,256,true,0xFFFF8800);
});
クリップボードのデータを削除する
■クリップボードからすべてのデータを削除する
クリップボードオブジェクトからすべてのデータを削除するには、clear() メソッドを使用します。
OS のクリップボードからすべてのデータを削除する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードのすべてのデータを削除
clipboard.clear();
■クリップボードからタイプを指定して削除する
クリップボードから指定したタイプのデータを削除するには、clearData() メソッドを使用します。
Clipboard.clearData ( タイプ ) :void
第01引数 | String | 取り出したいデータのタイプを指定 ClipboardFormats.* |
戻り値 | void | なし |
■第01引数 データのタイプ
第01引数で設定できるタイプです。
定数 | 文字 | 説明 |
ClipboardFormats. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "air:url" | URL 文字列 |
ClipboardFormats. | "air:rtf" | リッチテキストフォーマット(Adobe AIR 1.1 以降) |
ClipboardFormats. | "air:file list" | ファイルのリスト |
ClipboardFormats. | "air:bitmap" | ビットマップイメージ |
使用例です。
OS のクリップボードから文字列データを削除する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードからテキストデータを削除
clipboard.clearData(ClipboardFormats.TEXT_FORMAT);