背負い投げとENTER_FRAME

Icon

なんちゃってWebクリエイターがFlashやらActionScriptやらを淡々と書く。ときとき柔道の話しもする。

AIR初チャレンジ

お待たせ致しました。Action Scriptネタです。
しかもいきなり3.0で、っていうかAIRです。

そう、そう、あのAIRだよ。Adobe AIRだよ。

Windowsなら設定でファイルのフルパスを見れるけど、
Macはその機能がないんだよね。
仕事であのファイル、なんたらサーバーのあんたらフォルダに
突っ込んどいたよって伝えるのがなかなか大変だった。
なので、試しに簡単なものを作ってみた。

MacPath.jpg
MacPath.air

アプリの青いところに、
ファイル・フォルダをドロップすると、
フルパスが表示して、勝手にクリップボードにセットする。
あとはメーラーなり、エディタなりに貼り付けばよいのだ。

ちなみに、ソースは

// 必要なパッケージのインポート
import flash.desktop.NativeDragManager;
import flash.desktop.NativeDragActions;
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;
import fl.containers.UILoader;
import flash.desktop.NativeApplication;

// ドラッグイン
this.dd.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, dragEnter);
// ドロップ
this.dd.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, dragDrop);
// ウインドウの移動
this.applicationBG.addEventListener(MouseEvent.MOUSE_DOWN, moveApplication);
//終了ボタン
this.btn_quit.addEventListener(MouseEvent.CLICK, QuitMacPath);

//ドラッグインした時に呼び出される関数
function dragEnter(event:NativeDragEvent):void {
	// クリップボードの取得
	var dropData:Clipboard	 = event.clipboard;
	
	// ドラッグ可能かどうかのチェック
	if (dropData.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)) {
		// ムービークリップへドロップ
		NativeDragManager.acceptDragDrop(this.dd);
	}
}

//ドロップした時に呼び出される関数 (マウスボタンを離した時)
function dragDrop(event:NativeDragEvent):void {
	
	// ドロップされた画像ファイルのパスを取得
	var droplist:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
	var ChangeWord = droplist[0].url;

	//取得した文字列をデコードする
	ChangeGo(ChangeWord);
	
}

//窓をドラッグ
function moveApplication(e:MouseEvent):void {
	stage.nativeWindow.startMove();
}

function ChangeGo(hiki:String){
	var escape_str:String = hiki;
	var pattern:RegExp = /%¥d{2}([a-zA-Z])/g;
	var unescape_str:String = unescapeMultiByte(escape_str.replace(pattern, replace_ascii));
	
	var NewPath:String = unescape_str;
	picnum.text = NewPath;
	
	Clipboard.generalClipboard.setData(
	ClipboardFormats.TEXT_FORMAT,NewPath);
}

//文字列をデコード
function replace_ascii():String {
	return arguments[0].substring(0, 3) + "%" + arguments[1].charCodeAt(0).toString(16);
}

//アプリを終了
function QuitMacPath(e:MouseEvent):void {
	NativeApplication.nativeApplication.exit();
}

ちなみに、パスを取得するとUTF-8 に変換されちゃうので、
Shift-JISに再変換しようとしたら、
unescapeMultiByteの不具合でつまずいた。

んで、こちらのブログに解決方法が乗ってるので、
変換関数を拝借させていただきました。
http://wakuworks.jugem.jp/?eid=113

中の人のプロフィール

柔道歴約20年だが諸理由で未だ初段。162cm、60kgくらいの軽量級。得意は背負い投げと巴投げ。2009年、左ヒザ前十字靭帯損傷。ただ今柔道復帰を企んでいる真っ最中。仕事では最近、ActionScriptを書いたり、WordPressをいじったりの日々が続いてる。@renowanにてつぶやいてる。

アーカイブ

Flicker

This movie requires Flash Player 9.0.0