利用KeyboardEvent.KEY_DOWN和TextEvent.TEXT_INPUT事件结合,可以用FlashPlayer 10中的TextArea完美实现消息发送框的功能。包括:
按Enter键立即发送消息、消息发送后立即清空TextArea、同时按Ctrl/Shift+Enter回车换行。
原理是:先判断KEY_DOWN事件中按下的是什么键,如果是Shift/Ctrl+Enter,则用代码向TextArea中插入一个换行符(这里flashplayer 9和10不一样,在9中按ctrl+Enter默认就是换行,而10不会,所以要用代码插入)。如果只按下了Enter,则在TEXT_INPUT事件处理中用preventDefault()来阻止默认的换行动作。
代码如下:
//下面三个变量用来保存KEY_DOWN事件时键盘的状态 var shiftKey:Boolean; var ctrlKey:Boolean; var keyCode:int; var messageInput:TextArea; messageInput.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown); messageInput.addEventListener(TextEvent.TEXT_INPUT,onTextInput); private function onKeyDown(e:KeyboardEvent):void{ //如果按下Enter时还按下Shift/Ctrl,则换行 if( e.keyCode==Keyboard.ENTER && (e.shiftKey || e.ctrlKey) ){ callLater(function():void{ //注意这个callLater var msg:String = messageInput.text; var part1:String = msg.substring(0, messageInput.selectionBeginIndex); var part2:String = msg.substring(messageInput.selectionEndIndex, 0x7fffffff); var selIndex:int = messageInput.selectionBeginIndex + 1; messageInput.text = part1 + "\n" + part2; messageInput.setSelection(selIndex,selIndex); }); keyCode = -1; //标识本次按键不需要TEXT_INPUT事件配合处理 return; } shiftKey = e.shiftKey; ctrlKey = e.ctrlKey; keyCode = e.keyCode; } private function onTextInput(evt:TextEvent):void{ if(keyCode == -1){ return; } if(keyCode==Keyboard.ENTER && !shiftKey && !ctrlKey){ evt.preventDefault(); callLater(function():void{ //sendMessage()即为发送消息的方法,它应该返回一个Boolean值,以此来决定是否清空消息框 if( sendMessage(messageInput.text) ){ messageInput.text = ""; messageInput.htmlText = ""; messageInput.setSelection(0,0); } }); } } |

技术贴,纯路过。
Reply
方法感觉好麻烦啊,写的还不错
Reply
这个不错,反正是现成的,麻烦点没关系,哈哈。
Reply
这个倒是行。不过人们都习惯了用Enter换行,用了这个直接就发了,造成消息不完整。
Reply
decadal 1998 2009 forward newsletter beta
Reply
100 didn technica 2009 affected suggest january probably
Reply
现在对flash一窍不通了……
Reply
谢谢楼主了
Reply
Louis Vuitton
Gucci Shoes
Hermes Handbags
christian louboutin
nike shoes
replica bags
Louis Vuitton
Gucci Bags
Cheap gucci shoes
wholesale gucci shoes
louis vuitton
herve leger
Rolex Watches
Omega Watches
louis vuitton multicolore
louis vuitton vernis
Reply