8月 20, 2008 2
AIR初チャレンジ
お待たせ致しました。Action Scriptネタです。
しかもいきなり3.0で、っていうかAIRです。
そう、そう、あのAIRだよ。Adobe AIRだよ。
Windowsなら設定でファイルのフルパスを見れるけど、
Macはその機能がないんだよね。
仕事であのファイル、なんたらサーバーのあんたらフォルダに
突っ込んどいたよって伝えるのがなかなか大変だった。
なので、試しに簡単なものを作ってみた。
アプリの青いところに、
ファイル・フォルダをドロップすると、
フルパスが表示して、勝手にクリップボードにセットする。
あとはメーラーなり、エディタなりに貼り付けばよいのだ。
ちなみに、ソースは
// 必要なパッケージのインポート 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