Flex通信篇——Flex键盘组合键

news/2024/5/18 20:56:59 标签: flex, application, function, layout, exe, .net

<![CDATA[

Flex中的键盘事件

要在Flex中响应键盘输入,只需注册keyDown事件即可。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" keyDown="OnKeyDown(event)">

    <mx:Script>

            private function OnKeyDown(event:KeyboardEvent):void

            {

                _Msg.text += "Ctrl:" + event.ctrlKey + ", Key:" + event.keyCode + "/n";

            }

捕捉单键盘输入时keyDown事件能够很好的工作,但是,要处理组合键时keyDown事件就有问题了,例如:Ctrl+C,Ctrl键能够捕捉到,但C就失效了。

折中的办法,处理组合键时用keyUp事件。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" keyUp="OnKeyUp(event)">

    <mx:Script>

private function OnKeyUp(event:KeyboardEvent):void

            {

                _Msg.text += "Ctrl:" + event.ctrlKey + ", Key:" + event.keyCode + "/n";

            }

使用keyUp事件,虽然能够响应了组合键,但还是存在问题,按键不灵活,而且要Up时才触发事件,达不到一般软件的组合键效果,手感差。所以,需要从外部应用程序截获keyDown事件,再传给Flex。

真·组合键

Flex端

定义并注册OnExternalKeyDown方法,让外部应用程序调用,参数按实际情况进行设计。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="Init()">

    <mx:Script>

            private function Init():void

            {

                //注册外部方法

                flash.external.ExternalInterface.addCallback("OnExternalKeyDown", OnExternalKeyDown)

            }

            private function OnExternalKeyDown(keyCode:uint, alt:Boolean, shift:Boolean, ctrl:Boolean):void

            {

                _Msg.text += "Ctrl:" + ctrl + ", Key:" + keyCode + "/n";

            }

EXE端

为ShockwaveFlashObject控件注册PreviewKeyDown事件,并添加实现方法。

axShockwaveFlash1.PreviewKeyDown += new PreviewKeyDownEventHandler(axShockwaveFlash1_PreviewKeyDown);

void axShockwaveFlash1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)

{

    //注意:参数的顺序必须跟Flex所定义方法的参数顺序一致

    StringBuilder sb = new StringBuilder();

    sb.Append("<invoke name=/"OnExternalKeyDown/" returntype=/"xml/">");

    sb.Append("<arguments>");

    sb.Append("<number>").Append(e.KeyValue).Append("</number>");

    sb.Append("<").Append(e.Alt.ToString().ToLower()).Append("/>");

    sb.Append("<").Append(e.Shift.ToString().ToLower()).Append("/>");

    sb.Append("<").Append(e.Control.ToString().ToLower()).Append("/>");

    sb.Append("</arguments>");

    sb.Append("</invoke>");

    axShockwaveFlash1.CallFunction(sb.ToString());

}

运行EXE,按组合键,效果跟一般软件的组合键效果一样,手感回来了。

.net/images/p_blog_csdn_net/hunkcai/632046/o_123009_0637_Flex1_633977809579270000.png" alt="" />

总结

Flex的键盘事件问题应该是flash player的Bug,Flex SDK官方上的大牛说目前无法解决,期待以后的版本吧。

这问题是细节问题,做事就要注重细节,时刻注重用户体现,追求用户体现才能开发出让用户满意的软件。

世界是平的,如果不平,就由自己来铲平。

.net在windows上的优势,不是AIR能够比拟的,相对的,flex/flash在呈现渲染上的技术沉淀也不是.net所比拟的,充分结合两种技术优势能够做出更完美的RIA软件。

 

系列索引

Flex通信篇——Flex和外部应用程序进行通信

Flex通信篇——Flex和外部进行异步通信

Flex通信篇——Flex键盘组合键

Flex通信篇——构建企业级HTTP通信层

        ]]>


http://www.niftyadmin.cn/n/1574770.html

相关文章

pdf to swf

使用swftools的pdf2swf.exe命令行来完成这项操作&#xff0c;转换效果理想&#xff0c;支持as3&#xff0c;swftools官网&#xff1a;http://www.swftools.org/ 下面是根据使用需要设计的2个方法&#xff1a; /// <summary> /// 获取pdf文件的页数 /// </summary&…

SpringBoot2-第二章:完善在线APIDocs

上一章我们基本完成了项目框架的搭建&#xff0c;我们目前项目是为了完成一个类似传统网站的单机服务器应用&#xff0c;那么我们接着该做一些什么呢&#xff1f; 本项目的GitHub&#xff1a;https://github.com/pc859107393/Go2SpringBoot.git 有兴趣交流springboot进行快速开…

2010年个人产品研发计划

进销存——标准版&#xff08;完成&#xff09; 总结前一代几个产品功能推出一个通用标准版&#xff0c;改用硬件授权。 产品授权管理系统2.0&#xff08;完成&#xff09; 提供新产品的注册、升级、管理等功能的RIA Web系统。 Flex报表引擎&#xff08;完成&#xff0…

jenkins指定具体项目具体分支进行构建部署

知识背景 1、使用码云WebHooks进行持续集成的时候&#xff0c;我们首先应该明白&#xff0c;他的原理大致是这样的&#xff1a;当我们每一次提交代码到码云的时候&#xff0c;码云会帮我们发送一个关于Push的Post请求到我们的Jenkins服务器&#xff0c;然后Jenkins持续集成插件…

inflate()引发NullPointerException

有时候我们在infalete的时候明明什么都对为什么它会提示出错 原意是你的资源layout出错了 注意看有没有把View写成view 这个View应该大写&#xff01;V而不是小写v 踩坑踩了两次了&#xff01;上次以为是个小问题没有注意&#xff0c;这次一定要记录下来&#xff01;&#xff…

用加密狗控制软件的授权(C#)

加密狗授权方式介绍 每只加密狗都有一个固定的序列号&#xff0c;并且一般是无法修改的。软件运行时读取加密狗的序列号进行判断&#xff0c;序列号通过验证后才能正常使用软件。 选购一套加密狗开发套件 我选购了SaftNet的USB软件狗&#xff0c;入手后查阅开发资料(不同…

哲理寓言

▲ 成长的寓言&#xff1a;做一棵永远成长的苹果树▲    一棵苹果树&#xff0c;终于结果了。   第一年&#xff0c;它结了10个苹果&#xff0c;9个被拿走&#xff0c;自己得到1个。对此&#xff0c;苹果树愤愤不平&#xff0c;于是自断经脉&#xff0c;拒绝成长。第二年&…

技术人如何写好简历

http://ifeve.com/qiuzhi2/ 程序员简历末班模板&#xff1a;https://github.com/geekcompany/ResumeSample