Flex 4:标题窗口超出可访问区域

时间:2011-07-02 15:25:10

标签: flex user-interface flex4 popup

我有一个奇怪的问题 - 我使用标题窗口为用户创建一条消息。用户可以在屏幕上移动标题窗口,以便可以看到主屏幕。

但是,如果用户要过多地移动标题窗口,它实际上可以移出浏览器可访问区域 - 用户别无选择,只能关闭浏览器并重新开始。我们如何确保标题窗口的移动受到限制,以便标题栏始终可用于控制?

我可能没有措辞这个权利 - 请检查附加图像image going out of screen

3 个答案:

答案 0 :(得分:4)

我会收听TitleWindow的move事件。如果窗口移出应用程序的可见坐标,请将其移回。

如果您只是问题是允许用户关闭窗口,那么除了顶部的“x”之外,您还可以在窗口底部添加“关闭”按钮。

答案 1 :(得分:4)

如果您可以使用自定义组件,我建议您覆盖TitleWindow的move()方法。我正在使用以下代码来限制窗口移动:

public class PopUpWindow extends TitleWindow
{
    private static const MIN_VISIBLE:int = 50;

    public override function move(x:Number, y:Number):void
    {
        var maxX:Number = stage.stageWidth - MIN_VISIBLE;
        var maxY:Number = stage.stageHeight - MIN_VISIBLE;

        if (x < 0)
            x = 0;
        else if (x > maxX)
            x = maxX;

        if (y < 0)
            y = 0;
        else if (y > maxY)
            y = maxY;

        super.move(x, y);
    }
}

答案 2 :(得分:1)

在titlewindow的移动事件中调用此函数:

        protected function titlewindow1_moveHandler(event:MoveEvent):void
        {
            // TODO Auto-generated method stub
            var window:UIComponent = event.currentTarget as UIComponent;
            var application:UIComponent = FlexGlobals.topLevelApplication as UIComponent;
            var bounds:Rectangle = new Rectangle(0, 0, application.width, application.height);
            var windowBounds:Rectangle = window.getBounds(application);
            var x:Number;
            var y:Number;
            if (windowBounds.left <= bounds.left)
                x = bounds.left;
            else if (windowBounds.right >= bounds.right)
                x = bounds.right - window.width;
            else
                x = window.x;
            if (windowBounds.top <= bounds.top)
                y = bounds.top;
            else if (windowBounds.bottom >= bounds.bottom)
                y = bounds.bottom - window.height;
            else
                y = window.y;
            window.move(x, y);
        }