我正在尝试打开一个实用程序,我在spark中创建了一个窗口。
场景是:我必须在应用程序停用时打开实用程序窗口。当应用程序被激活时,应该关闭实用程序窗口。
但是当我打开窗口myUtilityWin.open(false)
时停用,当窗口打开时,我的应用程序被激活,实用程序窗口关闭。
MyUtilityWindow.mxml
<s:Window xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" backgroundAlpha="0" systemChrome="none" type="utility" showStatusBar="false" transparent="true" alwaysInFront="true">
//代码
我如何打开MyUtilityWindow:
myUtilityWin = new MyUtilityWindow();
myUtilityWin.open(false);
myUtilityWin.alwaysInFront = true;
myUtilityWin.orderToFront();
我如何实现目标?
答案 0 :(得分:0)
此处的问题是使用deactivate
,activate
事件。 Event.DEACTIVATE
和Event.ACTIVATE
是所有事件调度程序调度的程序范围事件,“当Flash Player或AIR应用程序失去或获得系统焦点时,deactivate reference,activate reference。
当您在请求系统焦点的Window.open(); Window.orderToFront();
期间呼叫deactivate
时,会在下一次屏幕刷新时触发activate
广播。没有办法避免这种情况,这是在Flash的基类中编码的,你必须重写EventDispatcher
才能阻止它。
我的建议是构建一个静态类(或使用顶级应用程序来处理Window
个对象。
应用程序类示例:
public function openWindow(window:Window,openActiveWindow:Boolean,alwaysInFront:Boolean,orderToFront:Boolean):void{
window.addEventListener(Event.CLOSE,windowClosed);
window.open(openActiveWindow);
window.alwaysInFront = alwaysInFront;
if (orderToFront) window.orderToFront();
}
private function windowClosed(event:Event):void{
if (event is myUtilityWindow){
//utility window just closed act accordingly
}
else {
//a window of another type closed open utility window
}
}