FLEX提高篇--------AIR应用程序的托盘及托盘菜单的制作_未来的明天_ ...

AIR desktop Application应该说是ADOBE以及FLEX的一大亮点了,想毕对我这个文章标题感冒的朋友,肯定知道得比我多且深入,AIR是何物?以及一些简单的概念就没有必要让我在这里炒作了,因为工作需要,前不久为我的AIR程序制作了一个系统托盘,当程序被点击窗口右上角的X时,阻止系统默认的关闭事件,执行我们自定义的事件,并完成其它任务,在本文,我是弹出一个关闭还是最小化到托盘的选择框,根据用户的选择做相应的事情.本文着重讲解如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来xx应用程序窗体.小弟表达能力很烂,朋友们凑合着瞧瞧吧.欢迎对FLEX感兴趣的朋友(特别是做JAVA的)加入我的FLEX群:52429840,一起学习.

先说说整个流程:

1.       初始化应用时改变系统默认情况下以系统X事件的处理.

2.       定义新处理逻辑(本文是弹出对话框)

3.       生成托盘图标并置于状态栏

4.       给托盘图标加上右键菜单(本文是exit,和open两项)

5.       给菜单加上相应的事件

6.       大功告成

再说下几个主要的方法:

要说的我就写到注释里了,大家耐心地看下



Java代码
private var dockImage:BitmapData;   
               
        //初始化Application里调用此方法,完成上面的{dy}步:   
            public function initApplication():void{   
                var loader:Loader=new Loader();   
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成{dy}步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制   
                loader.load(new URLRequest("assets/images/32.png"));//这里先要加载托盘图标的小图片   
                this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件   
            }   
               
        //关闭窗体的事件   
            public function closingApplication(event:Event):void{   
                event.preventDefault();//阻止默认的事件   
                Alert.yesLabel="Close";   
                Alert.noLabel="Mini";   
                Alert.show("Close or Minimize?", "Close?", 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");//生成OPEN菜单项   
            var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理   
            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];//设置托盘的图标   
        }   
           
        //xx程序窗体   
        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();   
        }   
  
         
private var dockImage:BitmapData;
      
   //初始化Application里调用此方法,完成上面的{dy}步:
       public function initApplication():void{
        var loader:Loader=new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成{dy}步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制
        loader.load(new URLRequest("assets/images/32.png"));//这里先要加载托盘图标的小图片
        this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件
       }
      
   //关闭窗体的事件
       public function closingApplication(event:Event):void{
        event.preventDefault();//阻止默认的事件
        Alert.yesLabel="Close";
        Alert.noLabel="Mini";
        Alert.show("Close or Minimize?", "Close?", 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");//生成OPEN菜单项
    var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理
    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];//设置托盘的图标
   }
  
   //xx程序窗体
   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();
   }

  



application.rar (1.8 KB)
描述: 只是源码的一部分不能运行
下载次数: 27



郑重声明:资讯 【FLEX提高篇--------AIR应用程序的托盘及托盘菜单的制作_未来的明天_ ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——