2009-07-06 6 views
1

NativeWindow를 유지해야합니다. 응용 프로그램의 기본 창 위에 만듭니다.nativeWindow를 맨 위에 유지하는 방법

현재 응용 프로그램의 창에만 국한되지 않는 alwaysInFront = true를 사용하고 있습니다. 내가 최소화/복원/이동/크기 조정 작업을 성공적으로 동기화 할 수 있으므로 상단 창이 적절하게 작동합니다. 이 옵션을 사용하더라도 단점은 다른 응용 프로그램으로 alt-tab하면 다른 응용 프로그램의 맨 위에 표시된다는 것입니다.

위의 이유로 인해 alwaysInFront를 사용하지 않고 작동 시키려고합니다. orderInFrontOf와 orderToFront를 사용해 보았습니다. orderToFront는 자리 표시를 가져 오지만 주 창의 영역을 클릭하면 맨 위가 숨겨집니다. 즉 공기가 맨 위에 표시됩니다.

활성화/비활성화 이벤트 캡처를 시도했지만 첫 번째 클릭에서만 발생하므로 두 번째 클릭시 상단 창이 다시 숨겨집니다. 또한 메인 윈도우가 활성 상태가되었을 때 상단 윈도우를 활성 상태로 만들려고했으나 메인 포커스가 느슨한 포커스로 인해 아무 것도 클릭 할 수 없습니다.

ps. Flex Air HTMLLoader blank pop up window when flash content is loaded

답변

0

메인 윈도우 또는 상단 윈도우가 활성화되어 있는지 여부에 따라 alwaysInFront 옵션을 켜거나 끕니다. 이것은 제가 질문에서 언급 한 것에 추가적으로있었습니다.

그런 식으로 사용자가 다른 응용 프로그램으로 전환하면 창이 다른 응용 프로그램 위로 이동하지 않습니다. 나는 여전히 alwaysInFront 옵션을 사용할 필요가없는 솔루션을 선호 할 것이다. 또는 위에 링크 된 외부 사이트에서 플렉스 로딩 플래시에 대한 대체 솔루션을 더 좋게 만들 수도있다.

ps. 나는 HTMLOverlay의 소유자에게 패치 (오버레이를 열 때 여분의 윈도우를 열지 않는 앱에 묶여 있음에도 불구하고 그 개선점)를 제출하도록 시도 할 것이다.

업데이트 : 나는 HTMLOverlay를 변경했습니다.

0

듣고 event.preventDefault()을 호출하면 작동하는 HTMLOverlay의 동작을 향상시키기 위해이 작업을 수행하고 있습니다. 그것이 당신이 시도한 것이라면 확실하지 않지만, 그 트릭을 수행하는 앱이 있습니다.

+0

Thx, 불행히도 내 시나리오에서는 작동하지 않았습니다. 내 생각 엔 응용 프로그램에서 alwaysInFront를 사용 중이었고 비활성화되지 않았기 때문에 비활성화되지 않았거나 주 윈도우가 최소화되었을 때 열려 있던 창이 필요했습니다. 문제는 내가 alwaysInFront 옵션을 사용하지 않으면 공기가 주 창에 포커스를 변경하면 맨 위에 놓고이를 방지 할 수있는 방법을 찾을 수 없다는 것입니다. – eglasius

+0

AIR의 윈도우 처리가 다소 부족하다는 것을 알았습니다 ... 적절한 모달 대화 상자를 만들 수없는 경우가 있습니다. – Theo

0

저는 비슷한 것을 시도하고 있습니다. AIR 응용 프로그램에서 본질적으로 "데스크탑"인 하나의 큰 전체 화면 창이 있습니다. 난 항상이 창을 내 앱의 다른 모든 창 뒤에두고 싶습니다. 그러나 "바탕 화면"창에는 클릭 할 필요가있는 항목이 있습니다.

창 순서에서 창의 위치를 ​​유지하도록하는 명확한 방법이없는 것처럼 보입니다.

는 지금까지 완벽하지 않은에 정착 한 것은, 내 응용 프로그램의 다른 모든 창 (우) 난을 추적하기 위해 유지하는 글로벌 VAR에 alwaysOnTop 속성하지만 바인드이를 사용하는 것입니다 전체 응용 프로그램 활성/비활성 상태입니다. 이렇게하면 다른 앱으로 전환 할 때 내 창은 다른 모든 앱 창 위에 떠오르지 않습니다.

그런 다음 다양한 대화 형 컨트롤을 배치 할 수있는 바탕 화면 창에 "오버레이"로 완전히 투명 한 일반 (alwaysOnTop = false) 창이 있습니다. 이 창은 투명하기 때문에 앞으로 나아갈 수 있습니다. 내 다른 창은 alwaysOnTop입니다.다음과 같이

마지막으로, 그리고 결정적으로, 나는 "바탕 화면"창에서 세 가지 이벤트 리스너를 설치합니다 여전히 일부 개체 가끔 눈에 띄는 플리커에 있기 때문에

protected function onApplicationComplete(event:Event):void 
{ 
    this.addEventListener(MouseEvent.MOUSE_DOWN, onClickHandler, true,1000,true); 
    this.addEventListener(MouseEvent.CLICK, onClickHandler, true,1000,true); 
    this.nativeWindow.addEventListener(Event.ACTIVATE, onActivateWindow,false,-1); 
} 

protected function onActivateWindow(event:Event):void 
{ 
    trace("sent via activate to back"); 
    orderInBackOf(bigTransparentWindow); 
} 

protected function onClickHandler(event:MouseEvent):void 
{ 
    trace("sent via click to back"); 
    orderInBackOf(bigTransparentWindow); 
} 

나는 모든이와 완전히 행복하지 않다 오버레이 윈도우 - "데스크톱"창이 그 앞에 정렬되고, 일종의 업데이트가 발생하고, 다시 뒤에서 강제로 나타나는 것으로 나타납니다.

더 나은 솔루션을 환영합니다!

관련 문제