Flashゲームプログラミング講座 for ActionScript3.0

 

クリップボードとは?

 


■クリップボードとは?


クリップボードとは、OS 上で、カットやコピーやペーストを行うときに一時的に保存される領域です。
 
 

■クリップボードに格納できるフォーマットについて

 
Flash Player にてクリップボードにコピーできるデータのタイプは、以下の種類があります。
 
文字列
HTML文字列
リッチテキストフォーマット
 
Flash Player からクリップボードに保存する場合、タイプが別であれば、それぞれのデータを別々に保存する事が出来ます。
 
しかし同じタイプにコピーした場合、前の保存データは破棄されます。
 

■Adobe AIR での動作について

 
Adobe AIR 版のクリップボードについては、こちらで解説しています。
 
 

 

クリップボードオブジェクトを取得する

 


■現在の OS に対応するクリップボードオブジェクトを取得する


現在の OS のクリップボードを取得するには、Clipboard.generalClipboard プロパティを使用します。
 
Flash Player 版では、Clipboard クラスをインスタンス化する事はできません。
 
OS のクリップボードをクリップボードオブジェクトとして取得する

import flash.desktop.Clipboard;

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

 

クリップボードからデータを取り出す

 
 
サンプルをダウンロード
 


■Flash Player 版のセキュリティ制限について


Flash Player にて、クリップボードからデータを取り出すには、セキュリティの都合上、ユーザーがペースト操作を行う必要があります。
 
コンテキストメニューに、クリップボードメニューを追加する方法は、こちらで解説しています。
 
ペースト操作が行われた瞬間は、Event.PASTE イベントで取得できます。
 
Event.PASTE 内でのみ、クリップボードへの読み取りアクセスが可能です。
 
テキストフィールドはこのイベントに対応していません。
 
クリップボードメニューが選択されたか調べる

import flash.ui.ContextMenu;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.Graphics;

// コンテキストメニューオブジェクトを作成
var context_menu:ContextMenu = new ContextMenu();

// クリップボードメニューを有効
context_menu.clipboardMenu = true;

//「貼り付け」を有効
context_menu.clipboardItems.paste = true;

// スプライトを生成して配置
var sprite:Sprite = new Sprite();
stage.addChild(sprite);

// ステージ全体に矩形を描画
var g:Graphics = sprite.graphics;
g.beginFill ( 0xFF0000 , 0.5 );
g.drawRect(0,0,stage.stageWidth,stage.stageHeight);
g.endFill();

// スプライトにコンテキストメニューを登録
sprite.contextMenu = context_menu;

// 「貼り付け」が選択された時に実行されるイベント
sprite.addEventListener(Event.PASTE , function (e:Event):void{
	trace("「貼り付け」が選択された");
});
 

■クリップボードオブジェクトからデータを取り出す


クリップボードオブジェクトからデータを取り出すには、getData() メソッドを使用します。
 
クリップボード.getData ( タイプ , [転送モード] );
第01引数 取り出したいデータのタイプを指定 ClipboardFormats.*
第02引数(略可)省略します。
戻り値 データがオブジェクト型で返ります。存在しない場合は null
 
■第01引数 データのタイプ

第01引数で設定できるデータのタイプです。
 
定数文字説明
ClipboardFormats.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット
"air:*"
"flash:*"
以外の文字列
カスタマイズ
 
使用例です。
 
OS のクリップボードから文字列を取り出す

import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.ui.ContextMenu;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.Graphics;

// コンテキストメニューオブジェクトを作成
var context_menu:ContextMenu = new ContextMenu();

// クリップボードメニューを有効
context_menu.clipboardMenu = true;

//「貼り付け」を有効
context_menu.clipboardItems.paste = true;

// スプライトを生成して配置
var sprite:Sprite = new Sprite();
stage.addChild(sprite);

// ステージ全体に矩形を描画
var g:Graphics = sprite.graphics;
g.beginFill ( 0xFF0000 , 0.5 );
g.drawRect(0,0,stage.stageWidth,stage.stageHeight);
g.endFill();

// スプライトにコンテキストメニューを登録
sprite.contextMenu = context_menu;

// 「貼り付け」が選択された時に実行されるイベント
sprite.addEventListener(Event.PASTE , function (e:Event):void{

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

	// クリップボードからテキストデータを取得
	var str:String = clipboard.getData(ClipboardFormats.TEXT_FORMAT) as String;

	if(str){
		trace(str);
	}

});
 
OS のクリップボードからリッチテキストフォーマットデータを取り出す

import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import flash.ui.ContextMenu;
import flash.events.Event;
import flash.display.Sprite;
import flash.display.Graphics;
import flash.utils.ByteArray;

// コンテキストメニューオブジェクトを作成
var context_menu:ContextMenu = new ContextMenu();

// クリップボードメニューを有効
context_menu.clipboardMenu = true;

//「貼り付け」を有効
context_menu.clipboardItems.paste = true;

// スプライトを生成して配置
var sprite:Sprite = new Sprite();
stage.addChild(sprite);

// ステージ全体に矩形を描画
var g:Graphics = sprite.graphics;
g.beginFill ( 0xFF0000 , 0.5 );
g.drawRect(0,0,stage.stageWidth,stage.stageHeight);
g.endFill();

// スプライトにコンテキストメニューを登録
sprite.contextMenu = context_menu;

// 「貼り付け」が選択された時に実行されるイベント
sprite.addEventListener(Event.PASTE , function (e:Event):void{

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

	// クリップボードからリッチテキストフォーマットデータを取得
	var byte_array:ByteArray = clipboard.getData(ClipboardFormats.RICH_TEXT_FORMAT) as ByteArray;

	if(byte_array){
		trace(byte_array);
	}

});
 



■クリップボードにデータが存在するか調べる


クリップボードに指定したタイプのデータが存在するか調べるには、hasFormat() メソッドを使用します。
 
クリップボード.hasFormat ( タイプ );
第01引数 取り出したいデータのタイプを指定 ClipboardFormats.*
戻り値 存在する場合は true、存在する場合は false
 
■第01引数 データのタイプ

第01引数で設定できるタイプです。
 
定数文字説明
ClipboardFormats.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット
 
使用例です。
 
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() メソッドを使用します。
 
クリップボード.setData ( タイプ , 格納したいデータ , 省略 );
第01引数 格納したいデータのタイプを指定 ClipboardFormats.*、
カスタマイズしたい場合は好きな文字列を指定
第02引数 格納したいデータを指定
第03引数(略可)省略します。
戻り値 成功した場合 true 、失敗した場合 false
 
■第01引数 データのタイプ

第01引数で設定できるタイプです。
 
定数文字説明
ClipboardFormats.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット
 "air:*"
"flash:*"
以外の文字列
カスタマイズ
 
使用例です。
 
OS のクリップボードに文字列を格納する

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

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

// コピーしたい適当な文字列
var str:String = "コピーテスト";

// クリップボードに文字列をセット
clipboard.setData(ClipboardFormats.TEXT_FORMAT , str);
 



■クリップボードのデータが取り出される瞬間を調べる


クリップボードのデータが取り出される瞬間に、関数を呼び出されるように指定するには、setDataHandler() メソッドを使用します。
 
注意点としては、このメソッドを使用後、setData() メソッドを使用すると関数が呼ばれなくなります。
 
また OS 側で別のデータがコピーされたときも関数が呼び出されなくなります。
 
クリップボード.setDataHandler ( タイプ , コールバック関数 , 省略 );
第01引数 格納したいデータのタイプを指定 ClipboardFormats.*、
カスタマイズしたい場合は好きな名称
第02引数 コールバック関数を指定(戻り値に格納したいデータ型を返すようにするとそのデータが取り出されます)
第03引数(略可)省略します。
戻り値 成功した場合 true 、失敗した場合 false
 
■第01引数 データのタイプ

第01引数で設定できるタイプです。
 
定数文字説明
ClipboardFormats.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット
 "air:*"
"flash:*"
以外の文字列
カスタマイズ
 
■第02引数 コールバック関数

コールバック関数に、引数はありません。
 
戻り値から、格納したいデータを返します。
 
第01引数で指定したフォーマットに従う必要があります。
 
使用例です。
 
OS のクリップボードにコールバック関数を通して文字列を格納する

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

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

// クリップボードにアクセスされる瞬間に呼び出されるイベント
clipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT , function ():String {

	trace("テキストデータがコピーされようとしています");

	// コピーしたいデータを返す
	return "コピーテスト";
});
 
 

 

クリップボードのデータを削除する

 


■クリップボードからすべてのデータを削除する


クリップボードオブジェクトからすべてのデータを削除するには、clear() メソッドを使用します。
 
OS のクリップボードからすべてのデータを削除する

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

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

// クリップボードのすべてのデータを削除
clipboard.clear();
 



■クリップボードからタイプを指定して削除する


クリップボードから指定したタイプのデータを削除するには、clearData() メソッドを使用します。
 
クリップボード.clearData ( タイプ );
第01引数 取り出したいデータのタイプを指定 ClipboardFormats.*
戻り値 なし
 
■第01引数 データのタイプ

第01引数で設定できるタイプです。
 
定数文字説明
ClipboardFormats.TEXT_FORMAT"air:text"文字列
ClipboardFormats.HTML_FORMAT"air:html"HTML形式 文字列
ClipboardFormats.RICH_TEXT_FORMAT"air:rtf"リッチテキストフォーマット
 
使用例です。
 
OS のクリップボードから文字列データを削除する

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

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

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