`
dydytd3400
  • 浏览: 23027 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

用Flex AIR 做一个类似QQ消息提示在系统托盘闪烁图标

阅读更多
这是我在国外一个论坛上找的例子,我不是很懂,希望各位能帮忙解释下!
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
                        width="200" height="100"
                        initialize="testAlert()">
   
    <mx:Script>
        <![CDATA[
            import com.everythingflex.air.managers.IconManager;
       
        [Embed(source="images/no_red.png")]
        private var Icon16:Class;
        private var bitmap16:Bitmap = new Icon16();
       
        private var defaultSysDockIconBitmaps:Array = [bitmap16.bitmapData];
       
        private var i:IconManager = new IconManager(defaultSysDockIconBitmaps);
       
        private var timer:Timer;
       
        private function testAlert():void{
        timer = new Timer(3000,1);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerComplete);
        timer.start();
        }
       
        private function timerComplete(event:TimerEvent):void{
        /**
        * 设置提示信息 (Windows)
        */
        i.startAlert('消息提示')
        }
        ]]>
    </mx:Script>
    <mx:Button click="testAlert()" label="开始提示"
               horizontalCenter="0" verticalCenter="0"/>
</mx:WindowedApplication>

这个例子的IconManager封装在了一个SWC里,下面是它的Class源代码:
[font=Tahoma]/*
Copyright (c) 2008 EverythingFlex.com.
http://code.google.com/p/everythingflexairlib/
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the “Software”), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

package
{
    import flash.desktop.NativeApplication;
    import flash.desktop.NotificationType;
    import flash.desktop.SystemTrayIcon;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.events.TimerEvent;
    import flash.filters.ColorMatrixFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.utils.Timer;

    public class IconManagertest
    {
        /**
         *  @private
         *  stores the Array of bitmaps tobe used as icons
         */
        private var sysDockIconBitmaps:Array = new Array();
        /**
         *  @private
         *  stores the Array of altered bitmaps tobe used as icons
         */
        private var alteredSysDockIconBitmaps:Array = new Array();
        /**
         *  @private
         *  stores the alertType, defaults to NotificationType.CRITICAL
         */
        private var alertType:String = NotificationType.CRITICAL;
        /**
         *  @private
         *  used as an indicator to determine which state of icon to display
         */
        private var _count:int;
        /**
         *  @private
         *  timer used to alternate between sysDockIcon and alteredSysDockIcon
         */
        private static var ALERT_TIMER:Timer;
        /**
         *  Constructor.
         */
        public function IconManagertest(sysDockIconBitmaps:Array,
                                    alteredSysDockIconBitmaps:Array=null,
                                    alertType:String="critical") {
            this.sysDockIconBitmaps = sysDockIconBitmaps;
            this.alteredSysDockIconBitmaps = alteredSysDockIconBitmaps;
            this.alertType = alertType;
            handleIcons();
        }
        /**
         *  @private
         *  called by constructor to initialize the icons sets
         */
        private function handleIcons():void{
            stopAlert();
            if(NativeApplication.supportsDockIcon || NativeApplication.supportsSystemTrayIcon){
                if(sysDockIconBitmaps.length > 0){
                    NativeApplication.nativeApplication.icon.bitmaps = sysDockIconBitmaps;
                    if(alteredSysDockIconBitmaps == null){
                        alteredSysDockIconBitmaps = new Array();
                        for (var i:int=0; i<sysDockIconBitmaps.length;i++){
                            alteredSysDockIconBitmaps.push(applyAlertFilter(sysDockIconBitmaps.clone(),i));
                        }
                    }
                }
            }
        }
        /**
         *  @private
         *  alters icon to reverse of original using a filter
         */
        private function applyAlertFilter(bitmapData:BitmapData,i:int):BitmapData {
            var matrix:Array = new Array();
            matrix = matrix.concat([-1, 0, 0, 0, 255]);
            matrix = matrix.concat([0, -1, 0, 0, 255]);
            matrix = matrix.concat([0, 0, -1, 0, 255]);
            matrix = matrix.concat([0, 0, 0, 1, 0]);
            var r:Rectangle;
            if(i == 0)r= new Rectangle(0,0,16,16);
            if(i == 1)r= new Rectangle(0,0,32,32);
            if(i == 2)r= new Rectangle(0,0,48,48);
            if(i == 3)r= new Rectangle(0,0,128,128);
            bitmapData.applyFilter(bitmapData,r,new Point(),new ColorMatrixFilter(matrix));
            return new Bitmap(bitmapData).bitmapData;
        }
        /**
         *  @public
         *  starts an alert and shows toolTip message (Windows Only)
         */
        public function startAlert(message:String="Alert"):void{
            IconManager.ALERT_TIMER = new Timer(500,0);
            IconManager.ALERT_TIMER.addEventListener(TimerEvent.TIMER,changeIcon)
            IconManager.ALERT_TIMER.start();
            if(NativeApplication.supportsSystemTrayIcon){
                SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = message;
            }
        }
        /**
         *  @public
         *  stops an alert
         */
        public function stopAlert():void{
            if(NativeApplication.supportsSystemTrayIcon){
                SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = "";
            }
            try{
                IconManager.ALERT_TIMER.stop();
            } catch (e:Error){

            }
        }
        /**
         *  @private
         *  timer handler, alters state of icon
         */
        private function changeIcon(event:TimerEvent):void{
            if(_count == 0){
                if(sysDockIconBitmaps.length){
                    NativeApplication.nativeApplication.icon.bitmaps = sysDockIconBitmaps;
                }
                _count = 1;
            } else {
                if(alteredSysDockIconBitmaps.length){
                    NativeApplication.nativeApplication.icon.bitmaps = alteredSysDockIconBitmaps;
                }
                _count = 0;
            }
        }
    }
}
[/font]                   

这是SWC附件:
分享到:
评论

相关推荐

    Flex3Air最小化到系统托盘

    首先,我们需要创建一个SystemTrayIcon对象,这是AIR特有的,用于在系统托盘区显示图标。以下是一个简单的示例: ```actionscript import flash.desktop.NativeApplication; import flash.desktop.SystemTrayIcon; ...

    flex air中文官方帮助文档

    Flex Air是中国Adobe公司开发的一款基于Flash技术的富互联网应用程序(RIA)开发平台,它允许开发者创建可以在桌面运行的跨平台应用程序。本“Flex Air中文官方帮助文档”是开发者的重要参考资料,详细介绍了Flex ...

    flex仿qq右边弹出提示消息功能

    本项目“flex仿qq右边弹出提示消息功能”旨在模仿QQ聊天软件中的右下角弹出通知功能,为用户提供类似的新消息提醒体验。这种功能在现代Web应用中非常常见,用于展示系统更新、用户通知或重要消息。 首先,我们要...

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

    将上述代码整合到Flex项目中,即可实现标题所描述的功能:在最小化窗口时,应用将出现在系统托盘区,托盘图标带有"测试生成托盘图标"的提示,用户可以通过右键菜单打开或关闭应用。通过这种方式,我们可以使Flex应用...

    flex Air 打包

    Flex Air打包是一个重要的主题,尤其对于那些使用Adobe Flex框架开发跨平台桌面应用程序的开发者来说。Flex Air允许开发者利用ActionScript 3.0和MXML语言创建丰富的桌面用户体验,类似于Web应用,但具备本地桌面...

    flex air 导出 excel

    1. **服务器端准备**:在服务器端安装Apache POI库,并编写一个接口,该接口接收来自Flex Air的数据并使用POI创建Excel文件。数据应以合适的数据结构(如二维数组)传递,以适应Excel表格的格式。 2. **Flex Air...

    flex4.6 air 读写文本文件

    Flex是一个用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript 3.0编程语言和Flash Player或Adobe AIR运行时环境。Adobe AIR则允许开发者创建可以在桌面环境下运行的跨平台应用程序,它提供了访问本地...

    Flex4 Air 自定义窗口

    Adobe AIR则是Flex的一个重要扩展,它允许Flex应用运行在桌面环境,而不只是局限于浏览器。AIR提供了本地桌面功能,如访问文件系统、桌面集成和离线运行等,极大地拓宽了Flex应用的使用场景。 在Flex4 AIR应用中...

    flex air 本地文件管理器

    尤其在本地文件管理方面,Flex Air的实现方式与Windows系统的文件管理操作有诸多相似之处,为用户带来了熟悉且高效的使用体验。本文将深入探讨Flex Air如何实现这一功能,以及其背后的原理和技术细节。 首先,我们...

    Flex AIR物业管理系统

    总而言之,Flex AIR物业管理系统通过强大的Flex框架和Adobe AIR技术,为物业管理提供了高效、便捷的工具,实现了桌面应用与Web应用的优势互补,是IT技术在物业管理领域的一个成功实践。对于开发者来说,这个例子提供...

    flex air 博客管理系统

    Flex Air博客管理系统是一款基于Adobe Flex和Adobe AIR技术开发的桌面应用程序示例,它允许用户在本地环境下创建、编辑和管理博客内容。这个系统是学习Flex和AIR集成应用的理想平台,可以展示如何利用这两种技术实现...

    flex air开发中文教程

    最后,为了帮助读者更好地掌握所学知识,教程很可能包含一系列实践项目,指导读者从无到有地构建一个完整的Flex AIR应用。通过这些项目,读者可以将理论知识应用于实际,提升开发技能。 总之,"Flex Air开发中文...

    AIR桌面应用(自定义任务栏图标、类QQ消息提示窗体)

    本项目聚焦于使用AIR开发具有自定义任务栏图标和类QQ消息提示窗体的桌面应用,这两点是提升用户交互体验的关键元素。 首先,**自定义任务栏图标**对于桌面应用来说至关重要,因为它不仅代表了应用程序的品牌,也是...

    flexair网页截图工具

    总之,FlexAir网页截图工具是一个强大的网页捕获工具,提供全面的截图和编辑选项,以及方便的分享和存储功能,能够满足用户在日常工作和学习中的各种截图需求。通过理解其主要组件和功能,用户可以更有效地利用这个...

    flex air 类似iphone的导航条

    在Flex Air开发中,创建一个类似iPhone的导航条可以为应用程序提供更加直观和用户友好的界面体验。这个项目可能是从网络上获取的源代码,并经过了个人的调整和优化,以适应特定的需求或改进功能。Flex Air是Adobe的...

    Flex中类似QQ新闻提示的控件

    Flex中类似QQ新闻提示的控件 Flex中类似QQ新闻提示的控件 Flex中类似QQ新闻提示的控件 Flex中类似QQ新闻提示的控件 Flex中类似QQ新闻提示的控件 Flex中类似QQ新闻提示的控件

    Flex的RIA应用程序托盘和QQ提醒功能

    标题提到的“Flex的RIA应用程序托盘和QQ提醒功能”是指使用Flex技术构建的应用程序可能具备的两种特性:系统托盘图标和类似QQ的即时消息提醒。 1. **系统托盘图标**:在桌面应用中,系统托盘图标允许用户将应用程序...

    Flex Air音乐播放器源码

    Flex Air音乐播放器源码是基于Adobe Flex Builder 3开发的一款应用程序,主要使用ActionScript编程语言,这使得它能够在Adobe AIR(Adobe Integrated Runtime)平台上运行。Adobe Flex是用于构建富互联网应用程序...

Global site tag (gtag.js) - Google Analytics