문제

Flex AIR App에서는 활성화 된 창 뒤에있는 창을 어떻게 열 수 있습니까?

나는 다음을 시도했고, 나는 그것을 일하게 될 수 없다

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       creationComplete="onCreationComplete(event)">

    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            import spark.components.Window;

            private var window1:Window  = new Window();
            private var window2:Window  = new Window();
            private var timer:Timer     = new Timer(3000,1);

            private function onCreationComplete(event:FlexEvent):void
            {
                window1         = new Window();
                window1.title   = "Window 1";
                window1.width   = 200;
                window1.height  = 200;
                window1.open(false);
                window1.orderInBackOf(this);

                window2         = new Window();
                window2.title   = "Window 2";
                window2.width   = 200;
                window2.height  = 200;

                timer.addEventListener(TimerEvent.TIMER_COMPLETE, openWindow2, false, 0, true);
                timer.start();          
            }

            private function openWindow2(event:TimerEvent):void
            {
                window2.open(false);    
                window2.orderInBackOf(window1);
            }
        ]]>
    </fx:Script>
</s:WindowedApplication>
.

이 코드를 사용하면 Window1이 기본 앱 창 뒤에 열리고 3 초 후에 Window2는 Window1 뒤에 열립니다.그러나이 기능을 실행하면 Window1이 기본 창 위에 열리고 Window2가 Window1 맨 위에 열리고 기본 앱이 포커스를 유지합니다.이것은 Flex의 버그처럼 보입니다.이 문제에 대한 해결 방법이 있으면이 문제가 있습니까?

올바른 솔루션이 없습니다

다른 팁

그래서이 문제를 해결할 수있는 좋은 방법이없는 것처럼 보입니다. 해결 방법은 airevent.window_complete에 대한 이벤트 리스너를 추가하고 이벤트 처리기에서 창을 이동하는 것입니다. 이것은 "올바른"해결책과 같고 원래 예제와 같은 간단한 사례를 위해 작동합니다. 문제는이 접근 방식이 내 코드에서 작동하지 않는다는 것입니다.

SDK에서 Spark.Components.Window 코드를 보면 event.enter_frame for event.enter_frame에 대한 이벤트 리스너가 추가 될 때 추가됩니다 (commitProperties ()). 그런 다음 이벤트 처리기에서 EnterFrameHandler (), 카운터 및 두 번째 프레임에 AirEvent.window_complete 이벤트를 Dispatch합니다. 이렇게하면 LiveDoc이 "

라고하더라도 윈도우의 상태에 관계없이 이벤트가 두 번째 프레임에서 발사 될 것이라고 생각합니다.

이 초기 레이아웃을 완료하고 기본 윈도우 을 엽니 다.

내 창이 두 번째 프레임에 의해 만들어지지 않았으므로 orderinbackof가 실패했습니다.


그래서 내 해결 방법이 있습니다 :

첫째, 내 창에서 Open (OpenWindowActive)을 덮어 씁니다. openWindowActive가 false이면 이벤트가 event.enter_frame에 대한 이벤트 리스너를 추가합니다. 이벤트 핸들러에서는 카운터를 보관하고 프레임 수가 특정 숫자 (지금 10)에 도달하면 현재 창 뒤에있는 현재 창을 옮깁니다. 이것은이 문제를 해결할 수있는 매우 해피 방식입니다. 나는 한계를 늘리고 이제는 시간의 약 90 %를 성공적으로 성공했습니다. 100 % 가까이에 가깝게 될 때까지 한계를 계속 늘릴 수 있었지만 창을 변경할 때 마다이 상태를 확인해야합니다. 또한이 상태는 기계에 따라 다를 수 있습니다.

누군가가 나의 문제를 얼마나 틀렸는지 말해 줄 수 있는지 말하고 내 문제를 해결할 수있는 훨씬 더 좋은 방법을 말해 줄 수 있지만, 이것을해야 할 것입니다 ...

useWeakReference 매개 변수를 true로 설정하는 특별한 이유가 있습니까? 그렇지 않으면 다음과 같이 전화 할 수 있어야합니다.

timer.addEventListener(TimerEvent.TIMER_COMPLETE, openWindow2);
.

그러나 해당 코드 줄에 버그가 있습니다. 타이머가 모든주기를 완료하면 TIMER_COMPLETE 이벤트가 실행됩니다. 당신은 당신의 타이머를 무한히 "화재"하도록 설정했습니다. 그래서 그것은 결코주기를 완성하지 않습니다.

해당 코드 행을 다음과 같이 수정해야하며 예상 결과를 얻어야합니다.

timer.addEventListener(TimerEvent.TIMER, openWindow2);
.







두 번째 질문을 해결하려면 (Window1이 응용 프로그램 뒤에 나타나지 않는 이유). OrderInbackOf 기능의 반환 값으로 판단 :

Boolean  — true if the window was succesfully sent behind;
           false if the window is invisible or minimized. 
.

창이 보이지 않으면 순서가 실패하는 것 같습니다. CreationComplete 핸들러에 코드를 사용하면 응용 프로그램 창에 자체를 표시 할 수있는 기회가 있기 전에이 함수를 호출하는 경우가 있습니다. OpenWindow2 함수 내에서 해당 코드를 이동하십시오. yeilding :

        private function openWindow2(event:TimerEvent):void
        {
            window1.orderInBackOf(this);
            window2.open(false);    
            window2.orderInBackOf(window1);
        }
.

이것은 어떤 식 으로든 도움이되기를 바랍니다.

  • gmale

편집 : 내 마지막 코멘트 당

        private function openWindow2(event:TimerEvent):void
        {
            window1.depth = 5; //arbitrary number
            window2.depth = 4;
            window1.open(false); //assumes window1 isn't opened before
            window2.open(false);                    
        }
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top