【来自FRATA系统】如何支持鼠标滚动事件

导读:
  Mouse wheel support in FlexDecember 21, 2007 at 12:41 pm
  The problem
  Just two of the text fields on your Flex window have to support the mouse wheel. The user turns the wheel, the numeric field in these fields is incremented or decremented


问题描述


你FLEX面版上有两个text框要求支持鼠标滚动事件,随着鼠标的滚动文本数值相应的增加或者减少
  The solution
  As per the Flex manual, there is a MouseEvent.MOUSE_WHEEL event, just listen to it. So far so good. On the creationComplete event adding the one liner:


  systemManager.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel)
  The onMouseWheel event handler gets the MouseEvent, but the problem is that we have more than one field that needs to support the wheel. Which one to increment? The currentTarget of the MouseEvent does not report which text field has the focus. The currentTarget contains a reference to SystemManager.


  Fine, let’s see if the FocusManager can help:
  public function onMouseWheel (evt:MouseEvent): void {
  var compAtFocus: IFocusManagerComponent = focusManager.getFocus();
  // no wheel support unless it’s a TextInput field
  if (compAtFocus is TextInput){
  var theValue:Number=Number(compAtFocus[”text”]);
  theValue += evt.delta;
  compAtFocus[”text”]=”"+theValue;
  }



  And it works fine, see for yourself (right click to see the source code): http://www.myflex.org/codesamples/mousewheel/MouseWheel.html
  In this sample application I’ve created two text inputs that have to support the wheel, and one text area that should not. Hence, first thing I do in the code above is checking the type of the object that has the focus. If this was a text input, get its text property and add the value of delta that comes with event. This delta is default increment that you can configure for your mouse outside of the application. For example, in Windows, go to Control Panel and set the Mouse wheel increment to your liking. Just keep in mind, that support of the mouse wheel depends on the mouse driver that you use, and if something does not work, do not blame Flex.


  If you do not want to link the increment/decrement amount to your? mouse system settings, just do not use the delta property that comes with the MouseEvent and add/subtract any arbitrary value that meets your application’s needs.


解决方案


更具flex手册,有鼠标滑轮消息,那么监听之,这是第一步。具体怎么样的代码参看下面的文章(笔者懒得拷来考去的了),鼠标滚轮消息处理器获得鼠标消息之后,怎么做呢?问题是我们如何去处理两个文本框呢?哪一个增?哪一个减呢?响应函数的上下文并没有告诉我们哪一个获得了焦点。解决方案是上下文给了我们一个systemmanager的引用,可以从这里入手。这样做便解决了问题,如果有问题的话可以参看此链接的演示http://www.myflex.org/codesamples/mousewheel/MouseWheel.html


在这个应用中我们有俩TEXT控件,其中一个要支持滚动,另一个支持,因此我要做的事情就是,通过光标管来来判断这是不是一个text input而不是text area。这样我们再获得其text属性然后更新之。注意这里滚动的delta值可以在操作系统层面设置,是由驱动程序决定的,如果你的应用不正确,那么仔细查找原因不要责怪flex框架
  The homework
  1. Modify the above code to ensure that the numbers in your text field do not go to the negative territory.
  2. Modify the above code so it’ll support just one of the TextInput boxes.


作业:


1.需改上面的代码使得,鼠标的滚动不会使数值出现负数的情况


2.修改代码是的上面俄代码支持两个控件都是textinput,而只对其中一个响应鼠标滚动事件
  Regards,
  Yakov Fain

本文转自
http://flexblog.faratasystems.com/?p=278

你可能感兴趣的:(windows,框架,Flex,Go)