air实现仿QQ提示窗口

最小化后每隔一分钟会弹出一个提示窗口,停留一会会自动消失

源代码:

  1. <?xml version="1.0" encoding="utf-8"?>
     
  2. <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"  
     
  3.         applicationComplete="initApplication()"
     
  4.         layout="absolute"
     
  5.         verticalAlign="top"
     
  6.         horizontalAlign="left"
     
  7.          width="250"
     
  8.           height="200">
     
  9.         <mx:Script>
     
  10.                 <![CDATA[
     
  11.                         import flash.net.*
     
  12.                         import flash.events.*
     
  13.                         import flash.display.*
     
  14.                         import mx.events.*
     
  15.                         import mx.controls.*
     
  16.                         import flash.system.*;
     
  17.                         import mx.core.*
     
  18.                         import flash.utils.Timer
     
  19.                        
     
  20.                 private var dockImage:BitmapData;   
     

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

  24.  
  25.       public function initApplication():void{   
     

  26.  
  27.                 var loader:Loader=new Loader();   
     

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

  30.  
  31.                 loader.load(new URLRequest("a.jpg"));//这里先要加载托盘图标的小图片   
     

  32.  
  33.                 this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件   
     
  34.                
     
  35.                 this.horizontalScrollPolicy=ScrollPolicy.OFF
     
  36.                 this.verticalScrollPolicy=ScrollPolicy.OFF
     
  37.             }   
     

  38.  
  39.            //生成托盘   
     

  40.  
  41.         public function prepareForSystray(event:Event):void{   
     

  42.  
  43.             dockImage=event.target.content.bitmapData;   
     

  44.  
  45.             if(NativeApplication.supportsSystemTrayIcon){   
     

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

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

  50.  
  51.             }      
     

  52.  
  53.         }     
     

  54.  
  55.         //关闭窗体的事件   
     

  56.  
  57.       public function closingApplication(event:Event):void{   
     

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

  60.  
  61.                 Alert.yesLabel="Close";   
     

  62.  
  63.                 Alert.noLabel="Mini";   
     

  64.  
  65.                 Alert.show("Close or Minimize?", "Close?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.   
     
  66.                 */
     
  67.             }   
     

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

  70.  
  71.         private function alertCloseHandler(event:CloseEvent):void{   
     

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

  74.  
  75.                 closeApp(event);   
     

  76.  
  77.             }else{   
     

  78.  
  79.                 dock();//最小化到托盘   
     

  80.  
  81.             }   
     

  82.  
  83.         }   
     

  84.  
  85.         public function createSystrayRootMenu():NativeMenu{   
     

  86.  
  87.             var menu:NativeMenu = new NativeMenu();   
     

  88.  
  89.             var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("Open");//生成OPEN菜单项   
     

  90.  
  91.             var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理   
     

  92.  
  93.             openNativeMenuItem.addEventListener(Event.SELECT, undock);   
     

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

  96.  
  97.             menu.addItem(openNativeMenuItem);   
     

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

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

  102.  
  103.             return menu;   
     

  104.  
  105.         }   
     

  106.  
  107.         //设置托盘图标的事件   
     

  108.  
  109.         private function setSystemTrayProperties():void{   
     

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

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

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

  116.  
  117.         }   
     

  118.  
  119.        //最小化窗体   
     
  120.         private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {   
     

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

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

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

  127.  
  128.             }   
     

  129.  
  130.         }   
     

  131.  
  132.   
     

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

  135.  
  136.         public function dock():void {   
     

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

  139.  
  140.             NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标   
     
  141.            
     
  142.             var mytimer:Timer=new Timer(60000, 0)
     
  143.             mytimer.addEventListener(TimerEvent.TIMER,timerEvent)
     
  144.             mytimer.start()
     
  145.         }   
     

  146.  
  147.         function timerEvent(e:TimerEvent):void{
     
  148.            
     
  149.            undock(null)
     
  150.            
     
  151.            }
     

  152.  
  153.         //还原
     
  154.         function goback(evt:Event):void{
     
  155.         
     
  156.         
     
  157.         
     
  158.         
     
  159.         
     
  160.             }
     

  161.  
  162.         //定时提醒
     
  163.         public function undock(evt:Event):void {   
     

  164.  
  165.        //NativeApplication.nativeApplication.icon.bitmaps= [];//将托盘图标清空   
     
  166.          
     
  167.         this.addEventListener(Event.ENTER_FRAME,Event_ENTER_FRAME)
     
  168.         
     
  169.         stage.nativeWindow.width=200
     
  170.         stage.nativeWindow.height=200
     
  171.         
     
  172.         stage.nativeWindow.x=Capabilities.screenResolutionX-stage.nativeWindow.width
     
  173.         stage.nativeWindow.y=Capabilities.screenResolutionY-stage.nativeWindow.height
     
  174.         
     
  175.         myWindow=deChromeWindow(stage.nativeWindow)
     
  176.         myWindow.visible=true
     
  177.       
     
  178.         pan.width= myWindow.width
     
  179.         pan.height= myWindow.height
     
  180.             
     
  181.             pan.x=0
     
  182.             pan.y=0
     
  183.             
     
  184.             pan.title="测试"
     
  185.             
     
  186.             pan.addEventListener(CloseEvent.CLOSE,CloseEvent_CLOSE)
     
  187.                
     
  188.         
     
  189.         stage.nativeWindow.visible = true;//设置本地程序窗体可见   
     

  190.  
  191.         stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端
     
  192.         
     
  193.         
     
  194.         }   
     
  195.        private function CloseEvent_CLOSE(e:CloseEvent):void{
     
  196.       
     
  197.            myWindow.visible=false
     
  198.       
     
  199.        }
     
  200.         var myWindow:NativeWindow
     
  201.         var num:Number=5
     
  202.         var timeNum:Number=0
     
  203.         
     
  204.         private function Event_ENTER_FRAME(e:Event):void{
     

  205.  
  206.             //var myWindow:NativeWindow=stage.nativeWindow
     

  207.  
  208.             if(myWindow.y<Capabilities.screenResolutionY-myWindow.height-50){
     
  209.               
     
  210.                myWindow.y-=num
     
  211.             }else{
     
  212.             
     
  213.                timeNum++
     
  214.             }
     
  215.            
     
  216.             
     
  217.             if(timeNum>100){
     
  218.             
     
  219.                myWindow.y-=-num
     
  220.                
     
  221.             }
     
  222.             
     
  223.             
     
  224.             if(myWindow.y>Capabilities.screenResolutionY){
     
  225.             
     
  226.               timeNum=0
     
  227.                 CloseEvent_CLOSE(null)
     
  228.                this.removeEventListener(Event.ENTER_FRAME,Event_ENTER_FRAME)
     
  229.             
     
  230.             
     
  231.             }
     
  232.             
     
  233.             
     
  234.             
     
  235.          }  
     

  236.  
  237.     //关闭程序窗体   
     
  238.      private function closeApp(evt:Event):void {   
     

  239.  
  240.             stage.nativeWindow.close();   
     

  241.  
  242.         }  
     
  243.         
     
  244.     //改变窗体样式     
     
  245.         public function deChromeWindow(oldWindow:NativeWindow):NativeWindow{
     
  246.      
     
  247.      if(oldWindow.systemChrome != NativeWindowSystemChrome.NONE){
     
  248.         var newOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
     
  249.         newOptions.systemChrome = NativeWindowSystemChrome.NONE;
     
  250.         newOptions.transparent = true;
     
  251.         
     
  252.         var newWindow:NativeWindow = new NativeWindow(newOptions);
     
  253.         newWindow.stage.stageWidth = oldWindow.stage.stageWidth;
     
  254.         newWindow.stage.stageHeight = oldWindow.stage.stageHeight;
     
  255.         newWindow.stage.align = oldWindow.stage.align;
     
  256.         newWindow.stage.scaleMode = oldWindow.stage.scaleMode;
     
  257.         
     
  258.         newWindow.x=oldWindow.x
     
  259.         newWindow.y=oldWindow.y
     
  260.         
     
  261.         
     
  262.         
     
  263.         for(var i:int = 0; i < oldWindow.stage.numChildren; i++){
     
  264.             newWindow.stage.addChild(oldWindow.stage.getChildAt(i));
     
  265.         }
     
  266.         newWindow.activate();
     
  267.          oldWindow.close();
     
  268.         
     
  269.         return newWindow;
     
  270.     }
     
  271.     return oldWindow;
     
  272. }
     

  273.  
  274.         ]]>
     
  275.         </mx:Script>
     
  276.         <mx:TitleWindow x="0" y="0" width="250" height="200" layout="absolute" id="pan" showCloseButton="true">
     
  277.         </mx:TitleWindow>
     
  278.        
     
  279. </mx:WindowedApplication>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值