`
#天琪#
  • 浏览: 159425 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

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

    博客分类:
  • FLEX
阅读更多
转自:阿贤

右键菜单:


var mainMenu:NativeMenu = new NativeMenu();
var minimizeMenu:NativeMenuItem = new NativeMenuItem("Minimize");
var maximizeMenu:NativeMenuItem = new NativeMenuItem("Maximize");
var sepMenu:NativeMenuItem = new NativeMenuItem("",true);
var restoreMenu:NativeMenuItem = new NativeMenuItem("Restore");
var closeMenu:NativeMenuItem = new NativeMenuItem("Close");
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;


系统托盘:

var sysTray:SystemTrayIcon =
NativeApplication.nativeApplication.icon as SystemTrayIcon;
sysTray.tooltip = "测试tray";
//
sysTray.menu = this.contextMenu;

sysTray.addEventListener(MouseEvent.CLICK,trayClick);



如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来激活应用程序窗体.

整个流程:

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

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

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

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

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

6.       大功告成



主要方法:



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/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];//设置托盘的图标  

        }  

          

        //激活程序窗体  

        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();  

        }  



==================================

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApplication()">
<mx:Script>
    <![CDATA[
        import flash.display.*;
        import flash.net.URLRequest;
        import mx.controls.Alert;
        import mx.events.CloseEvent;
       
        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("http://docs.google.com/locales/zh/CN/images/editor_docsslogo.gif"));//这里先要加载托盘图标的小图片  
            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];//设置托盘的图标  
        }
          
        //激活程序窗体  
        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();  
        }  
    ]]>
</mx:Script>
</mx:WindowedApplication>

分享到:
评论

相关推荐

    MFC托盘右键菜单源码

    本文将深入探讨如何在MFC应用中实现托盘图标以及与之相关的右键菜单功能。 1. **托盘图标(Tray Icon)** 托盘图标是Windows任务栏通知区域的小图标,通常用于隐藏主窗口后继续运行的应用程序。在MFC中,我们可以...

    vb 托盘代码(包含右键菜单功能,能在XP,2003等使用)

    在VB中实现托盘图标右键菜单,我们需要创建一个`ContextMenuStrip`对象,并将所需的菜单项添加到其中。每个菜单项可以通过`ToolStripMenuItem`类表示,设置其`Text`属性为菜单文本,`Click`事件处理函数则定义了用户...

    Qt 实现系统托盘,托盘菜单,托盘消息.zip

    这个类提供了一个图标,可以放置在操作系统任务栏的系统托盘区域,同时允许添加右键点击菜单和显示通知消息。 1. **创建系统托盘图标** 要创建一个系统托盘图标,首先需要实例化`QSystemTrayIcon`对象,并设置图标...

    c# 系统托盘,任务栏通知区。(右键菜单,关闭窗体是隐藏)

    本话题聚焦于`C#`中的一个特定特性:系统托盘(System Tray)和任务栏通知区(Notification Area),以及如何实现一个具有右键菜单功能的窗体,使得关闭窗体时不是彻底关闭,而是将其隐藏到任务栏通知区内。...

    C# WinForm托盘右键菜单例子源码

    本例子源码就是针对这一需求,展示了如何实现C# WinForm程序的托盘右键菜单功能。 首先,我们需要创建一个WinForm项目,并在设计视图中添加一个NotifyIcon控件。这个控件是用于在系统托盘区域显示应用程序图标的...

    AIR教程-AIR教程

    在本文中,我们将深入探讨Adobe AIR(Adobe Integrated Runtime)教程中的关键知识点,特别是关于创建右键菜单和系统托盘(Tray)功能的实现方法。Adobe AIR允许开发者构建跨平台的桌面应用程序,结合了Flash和Flex...

    操作系统托盘图标Tray

    操作系统托盘图标(Tray Icon)是用户界面中一个重要的组成部分,它位于任务栏的右下角,通常称为系统托盘或通知区域。这个区域显示了各种程序和服务的小图标,如网络连接、音量控制、时钟等。这些图标不仅为用户...

    Flex最小化到系统托盘及托盘图标的右键

    本文将详细介绍如何实现Flex应用最小化到系统托盘以及托盘图标的右键菜单功能。 首先,我们需要引入SystemTray类,这是Flex提供用来管理系统托盘的组件。在Flex SDK中,这个类位于mx.managers.systemClasses目录下...

    ObjectDock(startdock) 系统托盘tray插件

    3. **托盘扩展**:扩展系统托盘的功能,可以更好地组织和隐藏托盘图标,避免过多图标造成视觉干扰。 4. **通知中心**:整合系统通知,使得重要消息一目了然,提升工作效率。 5. **快捷操作**:通过右键菜单,可以...

    Flex3Air最小化到系统托盘

    以上代码展示了如何使用Flex 3和Adobe AIR API实现将Flex3Air应用最小化到系统托盘的功能。这只是一个基础示例,实际应用可能需要更复杂的逻辑,例如处理用户自定义设置、多语言支持以及错误处理等。完成这些功能后...

    托盘TRaY源程序

    MFC库提供了对系统托盘操作的支持,开发者可以通过它来创建和管理托盘图标,实现点击、双击、右键菜单等交互功能。 标签“动画”、“托盘”、“源程序”进一步明确了这个压缩包的内容。"动画"表明程序包含动态元素...

    程序缩小时缩为系统托盘(system tray)的小图标.rar_托盘_系统 托盘_系统托盘_系统托盘 图标

    在提供的压缩包中,"程序缩小时缩为系统托盘(system tray)的小图标wsysvc14c"可能是一个示例程序,展示了如何实现这个功能。"www.pudn.com.txt"可能是关于这个示例的说明或源代码的下载链接。为了深入学习和理解这个...

    icon(托盘图标+图标右键弹出菜单+图标冒泡)

    标题中的"icon(托盘图标+图标右键弹出菜单+图标冒泡)"是指一个针对Windows操作系统设计的软件功能,该功能集成了托盘图标、右键菜单和图标冒泡通知。下面将详细阐述这三个核心知识点。 1. 托盘图标(System Tray ...

    C#137托盘,右键演示 源代码

    下面我们将深入探讨C#中托盘图标的应用,以及如何实现右键菜单功能。 首先,托盘图标是Windows应用程序中的一种常见设计,当用户关闭主窗口后,程序依然能在系统托盘区域保持运行状态,通常会有一个小图标代表该...

    C#系统托盘程序,且托盘处带有菜单

    本主题聚焦于创建一个C#系统托盘程序,它能在任务栏通知区域(也称为系统托盘或系统 tray)显示一个图标,并提供菜单供用户进行交互。这通常用于那些在后台运行并需要低调存在的应用。 1. **系统托盘的概念**:系统...

    FLEX提高篇--------AIR应用程序的托盘及托盘菜单的制作

    在本文中,我们将深入探讨如何使用Adobe Flex和Adobe AIR技术来创建应用程序的系统托盘以及托盘菜单。Flex是一款强大的开发框架,用于构建富互联网应用(RIA),而AIR(Adobe Integrated Runtime)则允许这些Flex...

    tray系统托盘显示

    总的来说,实现"tray系统托盘显示"涉及创建和管理托盘图标,处理用户与图标的交互,以及在对话框程序中集成这些功能。通过以上步骤,我们可以构建一个能够在系统托盘中显示并响应用户操作的应用程序。

    Swing 实现系统托盘

    在Java的Swing库中,实现系统托盘功能可以为应用程序提供一个持续的交互界面,即使主窗口已经最小化或关闭。系统托盘,也称为通知区域或系统通知区,通常位于操作系统任务栏的右侧,允许用户快速访问常用的功能或...

    AIR System Tray and Dock Example

    标题 "AIR System Tray and Dock Example" 提供了一个关键线索,表明我们要探讨的是关于Adobe Integrated Runtime (AIR)的应用程序,特别是如何在系统托盘或Dock区域实现功能。在计算机用户界面中,系统托盘通常位于...

    Qt个性化系统托盘的实现

    在实际应用中,你可能还需要处理更多的细节,比如图标的状态变化、托盘图标的双击事件、添加更多菜单项以及自定义右键菜单的样式等。Qt库提供了丰富的功能,可以帮助我们实现各种复杂的需求。 在这个名为"Computer...

Global site tag (gtag.js) - Google Analytics