クリップボードについて(Flash 10以降)
クリップボードとは?
■クリップボードとは?
クリップボードとは、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. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "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. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "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. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "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. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "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. | "air:text" | 文字列 |
ClipboardFormats. | "air:html" | HTML形式 文字列 |
ClipboardFormats. | "air:rtf" | リッチテキストフォーマット |
使用例です。
OS のクリップボードから文字列データを削除する
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
// OS のクリップボードを取得
var clipboard : Clipboard = Clipboard.generalClipboard;
// クリップボードからテキストデータを削除
clipboard.clearData(ClipboardFormats.TEXT_FORMAT);