2011-08-10 8 views
0

私は、NativeWindowに拡張されたFlexNativeWindowクラスを持っています。 このメソッドを使用して、AIRアプリケーションで新しいウィンドウを作成します。 すべて正常に機能しますが、一部のキーボードの干渉は利用できません。Flex 4.5 - カスタムNativeWindowと問題

たとえば、フォーカスのarroundのテキスト入力は表示されません。 DropDownListでキーダウンおよびキーアップが機能しません。 TabOrderがうまくいきません!

なぜ説明できますか?私は非常にdesapointedだから!あなたがフォーカスの問題を修正するためにFlexNativeWindowIFocusManagerContainerを実装する必要がありますNativeWindowの

package fr.int.ui.windowSkin 
{ 
    import flash.display.NativeWindow; 
    import flash.display.NativeWindowInitOptions; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 

    import mx.core.IUIComponent; 
    import mx.core.IVisualElement; 
    import mx.core.IVisualElementContainer; 
    import mx.core.UIComponent; 
    import mx.events.*; 
    import mx.managers.WindowedSystemManager; 

    [Event(name="creationComplete", type="mx.events.FlexEvent")] 

    public class FlexNativeWindow extends NativeWindow implements IFlexNativeWindow 
    { 
     private var _systemManager:WindowedSystemManager; 

     private var _content:UIComponent; 

     private var _window:IVisualElementContainer; 

     public function FlexNativeWindow(window:IVisualElementContainer, initOptions:NativeWindowInitOptions = null) 
     { 
      super(initOptions); 


      _window = window; 

      addEventListener(Event.ACTIVATE, windowActivateHandler); 

     } 

     public function addElement(control:IVisualElement):void 
     { 
      _window.addElement(control); 
     } 

     public function removeElement(control:IVisualElement):void 
     { 
      _window.removeElement(control); 
     } 

     private function windowActivateHandler(event:Event):void 
     { 
      event.preventDefault(); 
      event.stopImmediatePropagation(); 
      removeEventListener(Event.ACTIVATE, windowActivateHandler); 

      if (stage) 
      { 
       if (!_systemManager) 
        _systemManager = new WindowedSystemManager(IUIComponent(_window)); 

       stage.addChild(_systemManager); 

       dispatchEvent(new FlexEvent(FlexEvent.CREATION_COMPLETE)); 

       stage.addEventListener(Event.RESIZE, windowResizeHandler); 
       stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); 

      } 
     } 

     private function keyDownListener (e:KeyboardEvent):void { 

      if (e.keyCode == Keyboard.ESCAPE) { 
       stage.nativeWindow.dispatchEvent(new Event("myEventClose", true)); 
       stage.nativeWindow.close(); 
      } 


     } 

     private function windowResizeHandler(event:Event):void 
     { 
      // prise en compte de la valeur mini 
      UIComponent(_window).height = stage.stageHeight; 
      UIComponent(_window).width = stage.stageWidth; 


     } 
    } 
} 
+0

独自のWindowedSystemManagerを追加してステージに追加する目的は何ですか?私はこれがおそらくFlexが作成するものと干渉していると思うでしょう。 –

答えて

0

私のカスタムについて

var wdetcorr:wDetailCorrespondant = new wDetailCorrespondant(); 
       wdetcorr.monIdCorresp = correspDG.selectedItem.crIndex; 

       var wOptions:NativeWindowInitOptions = new NativeWindowInitOptions(); 
       wOptions.systemChrome = NativeWindowSystemChrome.NONE; 
       wOptions.transparent = false; 
       var fnwDetailPatient:FlexNativeWindow = new FlexNativeWindow(wdetcorr, wOptions); 
       fnwDetailPatient.active(); 

コードを新しいウィンドウを作成するための

コード。ここで

Flash Builderでそれを行う方法です:

  1. 押しCtrl + Shift + TとタイプがIFocusManagerContainer
  2. を開き、対応するファイルに
  3. あなたのクラスで宣言されたすべてのメソッドを実装しFlexNativeWindow

PS :フレックスコンテナはフレックスコンテナの内側に配置する必要があるため、この方法は失敗する可能性があります。NativeWindowはネイティブクラスであり、Flex SDKクラスではありません。フレックスコンテナで、IFocusManagerContainerを既に実装しているWindowクラスを使用することをお勧めします。

+0

この回答に感謝します。私は初心者なので、FlexNativeWindowクラス/ありがとう – Flex60460

+0

を修正する方法を私に説明することができますあなたの答えをありがとう。私は説明したが、DefaultButtonを取得して設定するだけで済んだ。 – Flex60460

+0

あなたの答えをありがとう。私は説明したが、DefaultButtonを取得して設定するだけで済んだ。宣言されたすべてのメソッドを実装する必要がありますか?その他の質問では、私は空気と一緒に作業するため、NativeWindowを使用します。ネイティブウィンドウオプションを使用することが重要です。ですから、窓で販売することができれば、どうすればいいのか分かります。ありがとう – Flex60460