`
txf2004
  • 浏览: 7040221 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

<![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,按组合键,效果跟一般软件的组合键效果一样,手感回来了。

总结

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

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

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

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

系列索引

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

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

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

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

]]>

分享到:
评论

相关推荐

    FLEX入门篇——日期的格式化

    本文将围绕“FLEX入门篇——日期的格式化”这一主题,深入探讨如何在Flex中处理和格式化日期。日期格式化在任何应用程序中都是常见的需求,尤其是在展示或存储用户友好的时间信息时。 首先,我们要了解Flex中处理...

    创建第一个Flex应用——编码模式

    创建第一个Flex应用——编码模式创建第一个Flex应用——编码模式创建第一个Flex应用——编码模式

    创建第一个Flex应用——设计模式

    创建第一个Flex应用——设计模式创建第一个Flex应用——设计模式创建第一个Flex应用——设计模式

    flex调用swf——swf可以转成具体的对象,而非MovieClip

    在本文中,我们将深入探讨如何在Flex应用中调用SWF文件,并将其转换为特定的对象,而不仅仅是作为MovieClip处理。在Flex开发中,我们经常需要集成外部的SWF资源,例如库或自定义组件,这通常是通过ActionScript实现...

    ArcGIS Flex 例子——源码(强烈推荐)

    **ArcGIS Flex 示例详解——源码深度解析** ArcGIS Flex 是 Esri 公司提供的一款基于 Adobe Flex 技术的 GIS 开发框架,它允许开发者创建丰富的、交互式的地图应用程序,用于网页上展示地理信息。这个压缩包包含的...

    flex组合键

    本篇文章将深入探讨Flex布局及其相关的组合键应用。 首先,Flex布局的核心概念是容器(flex container)和项目(flex items)。一个容器通过设置`display`属性为`flex`或`inline-flex`,即可开启Flex模式。在这个...

    精通Flex 3.0——基于ActionScript 3.0实现_源代码

    《精通Flex 3.0——基于ActionScript 3.0实现》一书源代码。 Flex 3.0 ActionScript 3.0源代码 Flex 3.0源代码。 --------------------------- 第1篇 Flex技术概述 第1章 Flex概述 3 1.1 Flex简介 3 1.2 Flex...

    Flex游戏——水果乐园(含源码)

    * 通过键盘方向键控制小熊(游戏主人翁)在迷宫内行走,在指定时间内拾取所有水果就通过游戏否不通过。 * 每次拾取水果必须正确回答问题才能够真正获取水果。 * 游戏中有敌人,道具等元素,增加游戏的趣味。 技术要点...

    flex布局项目——携程在线首页(原生轮播图效果).zip

    携程在线首页。适合零基础入门的人使用的demo,对布局这块有不错的...采用的是flex布局使用了原生js实现的tab栏切换等。自己可以通过swiper插件或者TouchSlide插件以及bootstrap框架来替换!可以把这个demo进行更改。

    FLEX资源——FLEX数据绑定专题(中文PDF)

    数据绑定是Flex中一个核心的概念,它简化了用户界面与应用程序数据之间的通信,使得数据的更新能够自动反映在UI上,反之亦然。 在Flex中,数据绑定是一种声明式编程方式,开发者无需编写复杂的事件处理代码,即可...

    Flex通信-Java服务端通信实例

    Flex通信-Java服务端通信实例主要探讨的是在Web开发中,如何使用Adobe Flex与Java后端进行交互。Flex是一款强大的富互联网应用程序(RIA)开发工具,它可以创建动态、交互式的用户界面,而Java则通常作为服务器端的...

    Flex与Java实现通信

    ### Flex与Java实现通信——使用BlazeDS技术详解 #### 一、引言 随着互联网技术的不断发展,前端与后端之间的数据交换变得越来越频繁。Adobe Flex作为一种强大的RIA(Rich Internet Applications)技术,广泛应用...

    java+flex通信源码

    Java和Flex之间的通信是开发富互联网应用程序(RIA)时的一项关键技术。这个"java+flex通信源码"项目提供了一个实际的、完整的示例,演示了如何利用BlazeDS技术实现Java后端与Flex前端的无缝交互。下面我们将深入...

    精通Flex3.0 CHM电子书

    精通Flex 3.0――14.1.1 LCDS与服务端通信方式介绍 精通Flex 3.0――14.1.2 ActionScript与Java数据类型的转换 精通Flex 3.0――14.1.3 LCDS的内容结构 精通Flex 3.0――14.2 一个最基本的LCDS应用 精通Flex 3.0――...

    Flex第一步——基于ActionScript 3

    本篇内容将深入探讨“Flex第一步——基于ActionScript 3”,这对于初学者来说是一份极具价值的学习资料。 首先,我们需要了解ActionScript 3。ActionScript是Flash平台的核心语言,而ActionScript 3是其最新版本,...

    JS与Flex通信、互转例子

    本篇文章将详细讲解JS与Flex之间的通信方式以及互转实例。 首先,我们探讨JS与Flex之间的通信机制。这种通信通常通过两种方式实现:Flash Player的LocalConnection API和使用SWFObject加载的Flex组件。 1. **...

Global site tag (gtag.js) - Google Analytics