keydown в Flex Flex

У меня есть небольшое приложение на флексе, в котором я определил 2 холста. На одном из них я добавил элементы управления, а другой используется для рисования чего-либо, и никаких элементов управления не добавлено:

<mx:Canvas x="0" y="80" width="100%" height="520%" id="Canvas1"/>
<mx:Canvas x="0" y="0" width="100%" height="80" id="Canvas2"/>

Я добавляю обработанное в приложение событие нажатия клавиши, но оно запускается только после того, как я щелкаю мышью на первом холсте (том, где были добавлены элементы управления). В противном случае событие не срабатывает при нажатии клавиш.

Я пробовал несколько вещей: установить фокус на втором холсте, добавить обработчик нажатия клавиш в приложение (это), этап, холст ... К сожалению, я не нашел решения для запуска нажатия клавиш независимо от того, где находится фокус .


person Community    schedule 27.05.2009    source источник


Ответы (2)


Это для гибкого трубопровода 4.

<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx"
            name="MyApp"
            width="480" height="480"
            creationComplete="init();">

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        public function init():void
        {
            trace("init");
            this.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); 
        }

        private function keyDown(event:KeyboardEvent):void
        {
            trace(event.charCode);
        }       
</fx:Script></s:Application>
person viphak    schedule 16.12.2010

Первая проблема, которую вы описываете (необходимость щелкнуть мышью перед отправкой любых KeyboardEvents), вероятно, связана с тем, что браузер не фокусирует внимание на самом приложении Flex. Вы можете использовать Javascript в оболочке HTML, чтобы программно передать фокус приложению Flex на событие onLoad элемента body. Я точно знаю, что это работает в Firefox, и я считаю, что это нормально работает и в IE. Попробую откопать соответствующий код Javascript.

Что касается второй проблемы, пробовали добавить прослушиватель событий в Application.application для перехвата всех KeyboardEvents?

person cliff.meyers    schedule 27.05.2009