Adobe AIR プログラミング講座

 

クリップボードとは?

 


■クリップボードとは?


クリップボードとは、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.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.URL_FORMAT"air:url"URL 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット(Adobe AIR 1.1 以降)
ClipboardFormats.FILE_LIST_FORMAT"air:file list"ファイルのリスト
ClipboardFormats.BITMAP_FORMAT"air:bitmap"ビットマップイメージ
"air:*"
"flash:*"
以外の文字列
カスタマイズ
 
■第02引数 転送モード

第02引数で設定できる転送モードです。
 
クリップボードへのデータ格納時に、データのタイプにカスタマイズフォーマットを指定していて、さらに Object 型や Array 型 などのリファレンス型のデータを格納している場合、効果があります。
 
「参照渡し」によるデータの取得は、同一 AIR アプリ内でのみ可能です。
 
ClipboardFormats 定数で定義されている標準のフォーマットの場合、設定は無視され、必ず「コピー渡し」となります。
 
定数文字説明
ClipboardTransferMode.CLONE_ONLY"cloneOnly"「コピー渡し」によるデータの取得を試みます。
ClipboardTransferMode.CLONE_PREFERRED"clonePreferred"「コピー渡し」によるデータの取得を試みます。
失敗すれば「参照渡し」によるデータの取得を試みます。
ClipboardTransferMode.ORIGINAL_ONLY"originalOnly"「参照渡し」によるデータの取得を試みます。
ClipboardTransferMode.ORIGINAL_PREFERRED"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.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.URL_FORMAT"air:url"URL 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット(Adobe AIR 1.1 以降)
ClipboardFormats.FILE_LIST_FORMAT"air:file list"ファイルのリスト
ClipboardFormats.BITMAP_FORMAT"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.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.URL_FORMAT"air:url"URL 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット(Adobe AIR 1.1 以降)
ClipboardFormats.FILE_LIST_FORMAT"air:file list"ファイルのリスト
ClipboardFormats.BITMAP_FORMAT"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.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.URL_FORMAT"air:url"URL 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット(Adobe AIR 1.1 以降)
ClipboardFormats.FILE_LIST_FORMAT"air:file list"ファイルのリスト
ClipboardFormats.FILE_PROMISE_LIST_FORMAT"air:file promise list"ファイルプロミスのリスト
(AIR アプリからドラッグ時?)
(Adobe AIR 2.0 以降)
ClipboardFormats.BITMAP_FORMAT"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.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.URL_FORMAT"air:url"URL 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット(Adobe AIR 1.1 以降)
ClipboardFormats.FILE_LIST_FORMAT"air:file list"ファイルのリスト
ClipboardFormats.BITMAP_FORMAT"air:bitmap"ビットマップイメージ
 
使用例です。
 
OS のクリップボードから文字列データを削除する

import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;

// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;

// クリップボードからテキストデータを削除
clipboard.clearData(ClipboardFormats.TEXT_FORMAT);