2010年2月10日 星期三

AS3開啟系統檔案處理

package
{
     //顯示相關
     import flash.display.Sprite;
     import flash.display.DisplayObject;
     import flash.display.Graphics;
     import flash.display.Loader;
 
     //事件
     import flash.events.MouseEvent;
     import flash.events.Event;
     import flash.events.IEventDispatcher;
  //讀取本機檔案系列
    import flash.net.FileReference;
    import flash.net.FileFilter;
  
    public class Main extends Sprite
    {
       private var  btn:Sprite;
       private var  ba1:ByteArray;
       private var  picl:Loader = new Loader();

       //建構子
       public function Main( )
      {
          init( );
          disposeUI( );
      }
      private function init( ):void
      {
         //用sprite來做一個按鈕
         btn = new Sprite();
        //設了width 與 height會照程graphics畫不出來,這個問題還沒想出來
        //btn.width = 120;
        //btn.height = 120;
         //打開滑鼠小手
         btn.buttonMode = true;
       
        //畫邊線,設定現的樣式
         btn.graphics.lineStyle(0 , 0x00ff00);
       //設定填色,透明度
         btn.graphics.beginFill(0xFFCC00 , 0.5);
       //畫一個矩形
         btn.graphics.drawRect(0 , 0 , 60 , 25);
        //結束填色套用
         btn.graphics.endFill( );
        //加入偵聽,MouseDown
         addMouseDown(_btn);
     }
     private function disposeUI( ):void
    {
         this.addChild(_btn);
    }
    private function onBtnDown(e:MouseEvent):void
   {
        //trace("Click");
       //實體化一個開啟本機檔案的操作物件
        var fr:FileReference = new FileReference( );
       //設定檔案選取的類型,與顯示集合名稱
       var fileFilter:FileFilter = new FileFilter( "Images", "*.jpg;*.gif;*.png" );
 
        //偵聽,在使用者成功從「瀏覽」檔案視窗中選取項目時傳送。
       fr.addEventListener(Event.SELECT , onSelected);
  
       //偵聽, 在使用者取消選取「瀏覽」視窗時傳送。
       fr.addEventListener(Event.CANCEL , onCancel);

      //讀取系統檔案完成
       fr.addEventListener(Event.COMPLETE , onCompLete);
      //開啟視窗
      fr.browse([fileFilter]);
    }
    private function onSelected(e:Event):void
   {
       trace( "Select" );
       e.currentTarget.removeEventListener(Event.SELECT , onSelected);
       e.currentTarget.removeEventListener(Event.CANCEL , onCancel);
     
      //e.currentarget 發出事件的對象,即fr
      //開始讀取目標
      FileReference(e.currentTarget).load();
   }
  private function onCancel(e:Event):void
  {
     e.currentTarget.removeEventListener(Event.SELECT , onSelected);
     e.currentTarget.removeEventListener(Event.CANCEL , onCancel);
     trace( "cancel" );
   }
   private function onCompLete(e:Event):void
   {
       e.currentTarget.removeEventListener(Event.COMPLETE , onCompLete);
       trace( "讀取完畢" );
      //該處讀取回來的是byteArray需要透過Loader轉換成displayObject
       picl.contentLoaderInfo.addEventListener(Event.COMPLETE , onPicComplete);
       //讀取byteArray
       picl.loadBytes(e.currentTarget.data);
   }
   private function onPicComplete(e:Event):void
   {
      picl.contentLoaderInfo.removeEventListener(Event.COMPLETE , onPicComplete);
     try{
         if(stage.getChildIndex(picl))
         {
            this.removeChild(picl);
         }
     }catch(error:ArgumentError)
       {
           //代表stage裡面沒有picl所以不用做什麼
       }
    //this.addChild(e.currentTarget.content);
      this.addChildAt(picl,0);
   }
    //偵聽代理函式
    private function addMouseDown(object:IEventDispatcher):void
    {
        object.addEventListener(MouseEvent.MOUSE_DOWN , onBtnDown);
    }
 }
}

沒有留言:

張貼留言