您的位置:首页 > 大数据 > 人工智能

Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方

2013-02-28 17:46 579 查看
<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009

        xmlns:s="library://ns.adobe.com/flex/spark" 

        xmlns:mx="library://ns.adobe.com/flex/mx" currentState="loginState" initialize="initApplication()" xmlns:com="com.*">

 <fx:Declarations>

  <!-- 将非可视元素(例如服务、值对象)放在此处 -->

 </fx:Declarations>

 <s:states>

  <s:State name="loginState"/>

  <s:State name="mainState"/>

 </s:states>

 <fx:Script>

  <![CDATA[

   import mx.controls.Alert;

   import mx.events.CloseEvent;

   import mx.events.FlexEvent;

   

   import spark.components.supportClasses.Range;

   

   [Bindable]

   private var aaa:Number ;

  

   private function handleMenuClick(event:Event):void

   {

    var select:String = event.target.label;

    if(select =="最小化")

    {

     this.minimize();

    }

    if(select =="最大化")

    {

     this.maximize();

    }

    if(select =="还原")

    {

     this.restore();

    }

    if(select == "关闭")

    {

     this.close();

    }

   }

   

   //////////////////////////////////////////////

   private var dockImage:BitmapData;   

   

                  

   

           //初始化Application里调用此方法,完成上面的第一步:   

   

               public function initApplication():void{   

    

                    var loader:Loader=new Loader();   

    

                    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制   

    

                    loader.load(new URLRequest("assets/vm.png"));//这里先要加载托盘图标的小图片   

    

                    this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件   

        

        

        this.maximize();

        //////

        var mainMenu:NativeMenu = new NativeMenu();

        var minimizeMenu:NativeMenuItem = new NativeMenuItem("最小化");

        var maximizeMenu:NativeMenuItem = new NativeMenuItem("最大化");

        var sepMenu:NativeMenuItem = new NativeMenuItem("",true);

        var restoreMenu:NativeMenuItem = new NativeMenuItem("还原");

        var closeMenu:NativeMenuItem = new NativeMenuItem("关闭");

        minimizeMenu.addEventListener(Event.SELECT, handleMenuClick);

        maximizeMenu.addEventListener(Event.SELECT, handleMenuClick);

        restoreMenu.addEventListener(Event.SELECT, handleMenuClick);

        closeMenu.addEventListener(Event.SELECT, handleMenuClick);

        mainMenu.addItem(minimizeMenu);

        mainMenu.addItem(maximizeMenu);

        mainMenu.addItem(sepMenu);

        mainMenu.addItem(restoreMenu);

        mainMenu.addItem(closeMenu);

        this.contextMenu=mainMenu;

    

                }   

   

                  

   

           //关闭窗体的事件   

   

               public function closingApplication(event:Event):void{   

    

                    event.preventDefault();//阻止默认的事件   

    

                    Alert.yesLabel="关闭";   

    

                    Alert.noLabel="最小化";   

    

                    Alert.show("关闭或最小化?", "关闭?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.   

    

                }   

   

           //根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘.   

   

           private function alertCloseHandler(event:CloseEvent):void{   

    

                if(event.detail==Alert.YES){   

     

                     closeApp(event);   

     

                 }else{   

      

                      dock();//最小化到托盘   

      

                  }   

    

            }   

   

              

   

       //生成托盘   

   

           public function prepareForSystray(event:Event):void{   

    

                dockImage=event.target.content.bitmapData;   

    

                if(NativeApplication.supportsSystemTrayIcon){   

     

                     setSystemTrayProperties();//设置托盘菜单的事件   

     

                     SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=createSystrayRootMenu();//生成托盘菜单   

     

                 }      

    

            }   

   

              

   

           public function createSystrayRootMenu():NativeMenu{   

    

                var menu:NativeMenu = new NativeMenu();   

    

                var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("打开");//生成OPEN菜单项   

    

                var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("退出");//同理   

    

                openNativeMenuItem.addEventListener(Event.SELECT, undock);   

    

                exitNativeMenuItem.addEventListener(Event.SELECT, closeApp);//添加EXIT菜单项事件   

    

                menu.addItem(openNativeMenuItem);   

    

                menu.addItem(new NativeMenuItem("",true));//separator    

    

                menu.addItem(exitNativeMenuItem);//将菜单项加入菜单   

    

      

    

                return menu;   

    

      

    

            }   

   

           //设置托盘图标的事件   

   

           private function setSystemTrayProperties():void{   

    

                SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = "TurboSquid squidword";   

    

                SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK, undock);   

    

                stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, nwMinimized);    

    

            }   

   

              

   

   //最小化窗体   

   

           private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {   

    

                if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {   

     

                     displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件   

     

                     dock();//将程序放入托盘   

     

                 }   

    

            }   

   

     

   

           //将本地应用程序放到托盘   

   

           public function dock():void {   

    

                stage.nativeWindow.visible = false; //设置本地程序窗体不可见   

    

                NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标   

    

            }   

   

              

   

           //激活程序窗体   

   

           public function undock(evt:Event):void {   

    

            stage.nativeWindow.visible = true;//设置本地程序窗体可见   

    

            stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端   

    

            NativeApplication.nativeApplication .icon.bitmaps = [];//将托盘图标清空   

    

            }   

   

              

   

           //关闭程序窗体   

   

           private function closeApp(evt:Event):void {   

    

                stage.nativeWindow.close();   

    

            }   

   

     

/////////////////////////////////////////////////////////////////////////

  ]]>

 </fx:Script>

 <mx:TabNavigator includeIn="mainState" id="appModules" doubleClickEnabled="true" top="0" bottom="0" left="0" right="0" cornerRadius="2" tabOffset="5" dropShadowVisible="false" >

 </mx:TabNavigator>

 <mx:Form x="132" y="151" id="login" verticalCenter="0" horizontalCenter="0" includeIn="loginState">

  <mx:FormHeading label="Login"/>

  <mx:FormItem label="Name">

   <s:TextInput id="username"/>

  </mx:FormItem>

  <mx:FormItem label="PassWord" >

   <s:TextInput  id="password" displayAsPassword="true"/>

  </mx:FormItem>

  <mx:FormItem>

   

  </mx:FormItem>

 </mx:Form>

 <mx:HSlider includeIn="loginState" top="100" left="100" thumbCount="2">

  

 </mx:HSlider>

 <com:data id="my"  verticalCenter="0" horizontalCenter="0"  includeIn="mainState" width="100%" height="100%" top="0" left="0" right="0"/>

 

</s:WindowedApplication>

转载:http://wangjianchao-hb.blog.163.com/blog/static/171188092010320105916839/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: