クリップボードにコピー

(サンプル一覧を表示する)

FlashDevelop を使って、クリップボードにコピーするテストをしてみました。

JavaScript 経由でコピーできるようなものを作ろうと思いましたが、
Flash 9 以降 (?) では、Flash 内のクリックイベント等のユーザ操作時にしか
クリップボード操作ができなくなったようです。
Flash の実行画面
クリップボードにコピー

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

クリップボードにコピー
確認用のテキストエリア

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.system.System;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
	
	/**
	 * クリップボードにコピーするサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * ”クリップボードにコピー” ボタン
		 */
		private var button:Button;
		
		/**
		 * テキスト表示用
		 */
		private var textField:TextField;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化メソッド
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// テキストフィールドの準備
			textField = new TextField();
			textField.autoSize = TextFieldAutoSize.LEFT;
			textField.width = stage.stageWidth;
			textField.selectable = false;
			textField.wordWrap = true;
			textField.y = 200;
			textField.text = "ボタンを押すと、「クリップボードにコピー」 という文字列がコピーされます。"
			
			// ボタンの準備
			button = new Button("クリップボードにコピー", 140);
			button.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			button.x = (stage.stageWidth - button.width) / 2;
			button.y = (stage.stageHeight - button.height) / 2;
			
			// 表示用に登録
			addChild(button);
			addChild(textField);
		}
		
		/**
		 * ボタンが押された時
		 * @param	e
		 */
		private function onMouseDown(e:MouseEvent):void 
		{
			copyClipboard("クリップボードにコピー");
			textField.text = "コピーしました。";
		}
		
		/**
		 * クリップボードにコピーする
		 * @param	str	コピーする文字列
		 */
		public function copyClipboard(str:String):void 
		{
			System.setClipboard(str);
		}
	}
	
}

/**
 * ボタン用クラス
 */
import flash.display.SimpleButton;
class Button extends SimpleButton
{
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    
	/**
	 * コンストラクタ
	 * @param	caption	ボタンに表示する文字列
	 * @param	width	幅
	 * @param	height	高さ
	 */
    public function Button(caption:String = "ボタン", width:uint = 100, height:uint = 20) 
    {
        upState = makeButton(0xDDDDDD, width, height, height / 2, caption);
        overState = makeButton(0xEEEEEE, width, height, height / 2, caption);
        downState = makeButton(0xCCCCCC, width, height, height / 2, caption);
        hitTestState = upState;
    }
    
    /**
     * ボタンを作って返す
     * @param    color    色
     * @param    width    幅
     * @param    height    高さ
     * @param    round    角丸の大きさ
     * @param    text    ボタンのテキスト
     * @return    ボタン
     */
    private function makeButton(color:uint, width:int, height:int, round:int, text:String):Sprite
    {
        var t:TextField = new TextField();
        var s:Sprite = new Sprite();
        s.graphics.lineStyle(2);
        s.graphics.beginFill(color);
        s.graphics.drawRoundRect(0, 0, width, height, round);
        s.graphics.endFill();
        
        t.text = text;
        t.selectable = false;
        t.width = width;
        t.autoSize = TextFieldAutoSize.CENTER;
        s.addChild(t);
        
        return s;
    }
    
}
		

外部リンク