2013-03-03 5 views
5

Mam niestandardowy kursor w moim projekcie flash. Domyślnie niestandardowy kursor pozostaje widoczny po najechaniu kursorem na pole tekstowe i pojawi się kursor I-beam oraz własny kursor widoczny w tym samym czasie. Aby tego uniknąć, muszę ukryć swój niestandardowy kursor za każdym razem, gdy pojawi się kursor I-beam (tj. Po najechaniu myszą na pole tekstowe). Również kursor jest zawsze ustawiony na stan MouseCursor.AUTO. Więc jak mogę wykryć, kiedy zmienia się na I-beam? góry dziękiJak mogę wykryć, kiedy kursor zmienia się w I-beam w AS3?

+0

Niestety jestem przekonany, że nie ma żadnych zdarzeń, które śledzą stan wyświetlania kursora systemu. Możesz po prostu dodać detektory zdarzeń do samych pól tekstowych (przewijaj i rozwijaj) i zarządzaj nimi w ten sposób. – Marty

Odpowiedz

1

Oto coś, co próbuje naśladować to, co chcesz, to dodaje pojedynczy detektor zdarzeń na scenie i wykrywa, czy przewrócić/out wydarzeń stało na polach tekstowych i zmienia kursor 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

Zdarzenia 'ROLL_ *' zdarzają się tylko raz, myślę, że szukasz zdarzeń 'MOUSE_ *'. – xLite

+0

Wydaje mi się, że zdarzenia dotyczące rolki są w tym przypadku w porządku, zostaną wywołane, gdy kursor znajdzie się nad polem TextField, a kursor zostanie zmieniony, zostanie ponownie wywołany, gdy kursor zniknie, a kursor zostanie zmieniony z powrotem. Nie musisz ciągle ustawiać kursora na IBEAM, używając zdarzeń MOUSE_ *. –

+0

Jestem ciekawy, czy przetestowałeś swój kod? – xLite