2009-07-06 3 views
1

Мне нужно сохранить NativeWindow, который я создаю поверх главного окна приложения.как сохранить nativewindow сверху

В настоящее время я использую alwaysInFront = true, который не ограничивается окнами в приложении. Я могу успешно синхронизировать действия minimize/restore/move/resize, поэтому верхнее окно ведет себя соответствующим образом в этих случаях. Несмотря на то, что использование этой опции имеет недостаток, если я использую alt-tab для другого приложения, окно переходит поверх другого приложения.

Из-за вышеизложенного я пытаюсь заставить его работать без использования alwaysInFront. Я попытался использовать orderInFrontOf и orderToFront, который получает его на месте, но когда я нажимаю область в главном окне, верхняя часть становится скрытой, то есть воздух делает ее верхней.

Я попытался захватить активацию/деактивацию событий, но это происходит только при первом щелчке, так что при втором нажатии верхнее окно снова скрывается. Я также попытался активировать верхнее окно, когда основной становится активным, но это заставляет основной потерять фокус, и я не могу нажать ни на что.

Ps. Я делаю это для улучшения поведения используемого HTMLOverlay - см. Flex Air HTMLLoader blank pop up window when flash content is loaded

ответ

0

Включение/выключение опции alwaysInFront в зависимости от того, активны ли главное окно или верхнее окно, если нет, где активен, я отключил его. Это было дополнительно к тому, что я упомянул в вопросе.

Таким образом, когда пользователь переключается на другое приложение, окно не переходит поверх других приложений. Я все же предпочел бы решение, в котором мне не нужно использовать параметр alwaysInFront, или даже лучше альтернативное решение для флеш-флеш-памяти во внешних проблемах сайтов, с которыми я связан выше.

Ps. Я попытаюсь проверить с владельцем HTMLOverlay, чтобы отправить патч (его улучшение, хотя оно связано с приложением, которое не открывает дополнительные окна при открытии наложения).

Обновление: Я внес изменения в HTMLOverlay.

0

Прослушивание Event.DEACTIVATE и вызов event.preventDefault() должны работать. Не уверен, что это то, что вы пробовали, но у меня есть приложение, где это делает трюк.

+0

Thx, к сожалению, это не сработало в моем сценарии. Я предполагаю, что в вашем приложении вы использовали alwaysInFront и отменили деактивацию, чтобы он никогда не закрывался, или вы просто хотели, чтобы окно оставалось открытым, когда основной был сведен к минимуму. Кажется, проблема заключается в том, что если я не использую параметр alwaysInFront, тогда, когда воздух меняет фокус на главное окно, он помещает его сверху, и я не могу найти способ предотвратить его. – eglasius

+0

Я обнаружил, что обработка окон AIR невелика ... неспособность создавать надлежащие модальные диалоги иногда является болью. – Theo

0

Я пытаюсь сделать что-то очень похожее. В приложении AIR у меня есть одно большое полноэкранное окно, которое по сути является «рабочим столом». Я всегда хочу, чтобы это окно оставалось позади всех других окон моего приложения. Однако есть некоторые элементы в окне «desktop», которые необходимо кликать.

Похоже, что нет чистого способа заставить окно сохранить свое положение в заказе окна.

То, что я до сих пор решил, что не идеально, заключается в том, чтобы все остальные окна в моем приложении использовали свойство alwaysOnTop, но связывают с глобальным var (ugh), который я поддерживаю для отслеживания общая приложение уровень активное/неактивное состояние. Таким образом, когда я переключаюсь на другое приложение, мои окна не плавают над всеми окнами других приложений - они правильно двигаются позади, как ожидалось.

Затем у меня есть регулярное (alwaysOnTop = false) окно, которое полностью прозрачно, как «наложение» на окно рабочего стола, на котором я могу разместить различные интерактивные элементы управления. Это окно в порядке, чтобы выйти вперед, поскольку оно прозрачно и мои другие окна всегдаOnTop.

Наконец, и самое главное, установить три слушателя событий на окне «рабочего стола» следующим образом:

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); 
} 

Я не совсем доволен всем этим, так как есть еще некоторые иногда заметное мерцание объектов в оверлейное окно - кажется, что окно «Desktop» упорядочивается перед ним, происходит какое-то обновление, а затем оно снова задерживается.

Любые лучшие решения приветствуются!

Смежные вопросы