Skip to main content
September 10, 2009
Question

How do I listen for all keyboard events?

  • September 10, 2009
  • 2 replies
  • 1049 views

I want to monitor keystrokes and get most through the following code but do not get the enter key event. The enter key inserts a line into the textFlow but no event is passed to my listener. Is this a bug or do I need to listen for some keyboard events another way?

            var compSprite:Sprite = new Sprite();

            compArea.rawChildren.addChild(compSprite);

            textFlow1 = TextFilter.importToFlow(markup, TextFilter.TEXT_LAYOUT_FORMAT);

            textFlow1.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGED, refreshFlow);

            contr = new ContainerController(compSprite, compArea.width, compArea.height);
            var undoMgr:UndoManager = new UndoManager();
            compEditMgr = new EditManager(undoMgr);
            textFlow1.interactionManager = compEditMgr;
            compArea.addEventListener(KeyboardEvent.KEY_DOWN, compKeyDown); // Capture for Tab and navigation processing
            textFlow1.addEventListener(CompositionCompletionEvent.COMPOSITION_COMPLETE, composeListener);

            textFlow1.flowComposer.addController(contr);
            textFlow1.flowComposer.updateAllControllers();

This topic has been closed for replies.

2 replies

September 10, 2009

Thanks! I was hung up trying to override the EditManager and not the controller handler. Works great!

Adobe Employee
September 10, 2009

You can either catch them as events in the ContainerController by overriding keyDownHandler, or in the IEditManager, also in the keyDownHandler method. In the EditManager will work better for you if you have an editable TextFlow, particularly if it has multiple ContainerControllers. Overriding one of these methods is more efficient than adding your own event listener to the container, but if necessary you could add you own event listener to the container of the ContainerController.

Hope this helps,

- robin

September 10, 2009

Do you have example code that overrides the keyDownHandler method of the

ContainerController?

Adobe Employee
September 10, 2009

If you build the documentation and look up ContainerController, it has an example for keyUpHandler, which is very similar. Something like this is what you'll want:

package examples 
{
    import flash.events.KeyboardEvent;
    import flash.display.Sprite;
    import flashx.textLayout.container.ContainerController;
   
    public class ContainerController_keyDownHandlerExample extends ContainerController
    {
        public function ContainerController_keyDownHandlerExample(container:Sprite, compositionWidth:Number=100, compositionHeight:Number=100)
        {
            super(container, compositionWidth, compositionHeight);
        }
        override public function keyDownHandler(event:KeyboardEvent):void
        {   
            // run the TLF handler for the KEY_DOWN event
            super.keyDownHandler(event);
            // and add your own code for the event
            trace("You are in keyDownHandler()");       
        }
    }
}