2013-03-03 32 views
5

Tôi có con trỏ tùy chỉnh trong dự án flash của mình. Theo mặc định, con trỏ tùy chỉnh vẫn hiển thị khi bạn di chuột qua trường văn bản và bạn sẽ nhận được con trỏ hình chữ I và con trỏ tùy chỉnh của bạn hiển thị cùng một lúc. Để tránh điều này, tôi cần phải ẩn con trỏ tùy chỉnh của mình bất cứ khi nào con trỏ I-beam xuất hiện (nghĩa là khi bạn di chuột qua một trường văn bản). Ngoài ra con trỏ luôn được đặt thành trạng thái MouseCursor.AUTO. Vậy làm thế nào tôi có thể phát hiện khi nó thay đổi thành I-beam? Cảm ơn trướcLàm thế nào tôi có thể phát hiện khi con trỏ thay đổi thành I-beam trong AS3?

+0

Thật không may tôi khá tự tin rằng không có bất kỳ sự kiện nào sẽ theo dõi trạng thái hiển thị con trỏ hệ thống. Bạn có thể chỉ cần thêm người nghe sự kiện vào các trường văn bản (cuộn qua và cuộn ra) và quản lý nó theo cách đó. – Marty

Trả lời

1

Dưới đây là một cái gì đó mà cố gắng để bắt chước những gì bạn muốn, nó cho biết thêm một người biết lắng nghe sự kiện duy nhất để sân khấu và phát hiện nếu cuộn qua các sự kiện ra/xảy ra trên các lĩnh vực văn bản và thay đổi con trỏ accordinly:

package 
{ 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import flash.ui.Mouse; 
    import flash.ui.MouseCursor; 

    public class Main extends Sprite 
    { 

     private var textField1:TextField = new TextField(); 
     private var textField2:TextField = new TextField(); 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      // entry point 

      var loader:Loader = new Loader(); 
      loader.load(new URLRequest('bg.png')); 
      addChild(loader);    

      textField1.text = "Text Field 1"; 
      textField1.border = true; 
      textField1.x = 100; 
      addChild(textField1); 

      textField2.text = "Text Field 2"; 
      textField2.border = true; 
      textField1.x = 400; 
      addChild(textField2); 

      Mouse.cursor = MouseCursor.HAND; 

      stage.addEventListener(MouseEvent.ROLL_OVER, onRollOver, true); 
      stage.addEventListener(MouseEvent.ROLL_OUT, onRollOut, true); 
     } 

     private function onRollOver(e:MouseEvent):void 
     { 
      var tf:TextField = e.target as TextField; 
      if (tf) 
      { 
       Mouse.cursor = MouseCursor.IBEAM; 
       //hide your custom cursor here 
      } 
     } 

     private function onRollOut(e:MouseEvent):void 
     { 
      var tf:TextField = e.target as TextField; 
      if (tf) 
      { 
       Mouse.cursor = MouseCursor.HAND; 
       //show your custom cursor here 
      } 
     } 
    } 

} 
+0

'ROLL_ *' sự kiện chỉ xảy ra một lần, tôi nghĩ bạn đang tìm kiếm các sự kiện 'MOUSE_ *'. – xLite

+0

Tôi nghĩ rằng các sự kiện cuộn là tốt trong trường hợp này, chúng sẽ được trigged một khi con trỏ đi qua TextField và con trỏ sẽ được thay đổi, nó sẽ được trigged một lần nữa khi con trỏ lá và con trỏ sẽ được thay đổi trở lại. Không cần phải đặt con trỏ vào IBEAM liên tục bằng cách sử dụng các sự kiện MOUSE_ *. –

+0

Tôi tò mò, bạn đã thử nghiệm mã của mình chưa? – xLite

Các vấn đề liên quan