ScriptUIのFlashPlayerについて調べる
CS3からはScriptUIでFlashを読み込み利用できるようになっています。
Flashを利用することでリッチなGUIが使えるはずなのです。
そこで「JavaScript Tools Guide CS3.pdf」を読んでみました。
が…サッパリ判りません、
イメージがつかめないので実際に動作するサンプルを
探してみました。
見つけたのは以下の2つ
Adobe - Illustrator Developer Centerにある「flashpanel.zip」
入っているのはFlashPanel.jsxといくつかのSWFファイル、
SWFファイルはMXMLで書かれたソースも添付されています。
FlashがなくてもFlexSDKでいろいろ試すことができます。
添付されている「ScriptingIllustratorFromFlash.pdf」も参考になります。
Indesign palette/window with flash
入っているのは「Flash Dialog.jsx」と「flash.swf」と「flash.fla」、
こちらはFlash形式のファイルが入っています。
Flashをもっていればこちらの方が作りやすそうです。
参考にして作ったもの
JavaScript
flashPanelTest.jsx
//イラストレーターの場合 //#targetengine com.adobe.illustrator.demo.flashplayer //インデザインの場合 //#targetengine "session" //パレットの生成 var Palette = new Window( 'palette', {text: 'TEST' , properties : { closeOnKey : 'OSCmnd+W', resizeable : true } }); //パレットにFlashPlayerを登録 Palette.FP = Palette.add('flashplayer'); Palette.FP.preferredSize = [500, 500]; //JavaScriptからActionScriptへ関数を登録 Palette.FP.mouseClick = mouseClick; //関数 function mouseClick(ret) {alert('Click:'+ret); } //FlashPlayerで読み込むFlashファイルの場所 //flashFile = new File('FlashPanelTest.swf'); var flashFile = File.openDialog("FlashPanelTest.swfを選択して下さい。"); //FlashPlayerにロード Palette.FP.loadMovie (flashFile); //パレットを表示 Palette.show(); //JavaScriptからActionScriptの関数を呼び出す Palette.FP.invokePlayerFunction("setText", "テスト");
ActionScript
//JavaScriptから利用する関数を登録 ExternalInterface.addCallback("setText", setText); function setText (receivedValue) { myT.text = receivedValue; } function evaljs(f:String,ret:Object,String){ if( ExternalInterface.available){ ExternalInterface.call(f,ret); } } function mouse_click(evt:MouseEvent):void{ if( ExternalInterface.available){ //JavaScriptから登録した関数を実行 ExternalInterface.call('mouseClick',["日本語もOK!","テスト"]); myT.text = "MOUSE_CLICK"; } } function mouse_over(evt:MouseEvent):void{ var linkOverColor:uint = 0xFF1493; var colorTransform:ColorTransform = this.transform.colorTransform; colorTransform.color = linkOverColor; this.transform.colorTransform = colorTransform; myT.text = "MOUSE_OVER"; } function mouse_out(evt:MouseEvent):void{ var linkOverColor:uint = 0x0000FF; var colorTransform:ColorTransform = this.transform.colorTransform; colorTransform.color = linkOverColor; this.transform.colorTransform = colorTransform; myT.text = "MOUSE_OUT"; } //イベントを割り当てる bot.addEventListener(MouseEvent.MOUSE_OVER,mouse_over); bot.addEventListener(MouseEvent.MOUSE_OUT,mouse_out); bot.addEventListener(MouseEvent.CLICK,mouse_click);