如何检测flex中的CTRL + C输入和F3键输入

时间:2011-07-11 14:01:46

标签: actionscript-3 flex flex3

我正在尝试在我的应用程序中实现查找功能,为此我尝试打开基于键盘输入的查找弹出窗口,如F3或CTRL + F.但是在F3上,它不会转到事件监听器,而是打开默认查找Internet Explorer的工具栏。任何线索,我如何绕过它并在我的应用程序中使用f3?

另一件事是如何在flex中捕获CTRL + F?

private function keyPressed(evt:KeyboardEvent):void
{
    if (evt.keyCode == Keyboard.F3)
    {
        //open popup
    } else {
        //do something elese
    }
}

感谢。

3 个答案:

答案 0 :(得分:3)

用于检测CTRL + F:

event.ctrlKey == true && event.keyCode == Keyboard.F

其中'event'当然是KeyBoardEvent。

至于F3问题:只要Flash应用程序具有焦点,您编写的代码就会起作用。然后,F3键命令也不会路由到浏览器。所以你需要做的是确保你的应用程序在用户点击F3时具有焦点。您如何解决这个问题取决于您的JavaScript实现。 您可以使用ExternalInterface告诉浏览器应用程序已准备就绪,而不是专注于应用程序。或者在Javascript中,您可以捕获键盘事件,阻止其默认行为,然后在Flash应用程序上调用该函数(再次通过ExternalInterface)。

为了帮助您入门,这是一个用于防止默认F3行为的小JQuery代码段:

$('body').keyup(function(event) {
    if (event.keyCode == '114') event.preventDefault();
}

答案 1 :(得分:1)

这是对你的第二个问题的回应,顺便说一下,这个问题应该在一个完全独立的问题中提出。

此解决方案允许您根据需要测试任意数量的组合键。它将按下的键存储在一个数组中,并再次测试该数组以确定组合。

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class MultiKeyHandlerApp extends Sprite
    {
        protected var keyCodes:Array;

        public function MultiKeyHandlerApp()
        {
            keyCodes = [];
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler );
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandler );
        }

        protected function onKeyDownHandler( event:KeyboardEvent ):void 
        {
            addKey( event.keyCode );    

                    // -- 65 = a, 83 = s, 68 = d
            if( hasKey( 65 ) && hasKey( 83 ) && hasKey( 68 ) )
            {
                trace( "match!" );  
            }
        }

        protected function onKeyUpHandler( event:KeyboardEvent ):void 
        {
            removeKey( event.keyCode );
        }

        protected function addKey( keyCode:int ):void 
        {
            if( keyCodes.indexOf( keyCode ) < 0 ) keyCodes.push( keyCode );
        }

        protected function removeKey( keyCode:int ):void 
        {
            var index:int = keyCodes.indexOf( keyCode );
            if( index > -1 ) keyCodes.splice( index, 1 );
        }

        protected function hasKey( keyCode:int ):Boolean 
        {
            return keyCodes.indexOf( keyCode ) >= 0;
        }
    }
}

答案 2 :(得分:0)

只需检查所有浏览器(所有浏览器都是最新的)。使用10.3闪存播放器。

一切正在Chrome / FireFox / Opera上运行。你需要做的主要是确保你专注于flash电影(swf),而不是浏览器(HTML)或其他一些。

由于IE正在使用ActiveX技术,它首先捕获所有的Function键事件,然后将其解析为Flash。

野生动物园也是如此。

但你可以在所有浏览器上使用F2,F8和F9。

获得ctrl / alt / shift的组合。

KeyboardEvent有一些不错的属性: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/KeyboardEvent.html#propertySummary