Flex TitleWindow имитирует перетаскивание и предотвращает перетаскивание на несколько секунд? - PullRequest
0 голосов
/ 31 мая 2011

Хотелось бы, чтобы при перетаскивании и перемещении по экземпляру TitleWindow происходило определенное событие, имитирующее выпадение окна, и дальнейшее перемещение было невозможно в течение нескольких секунд.

Это очень необычный вопрос, но он будет более чем удобен для каждой точки решения

PS: вся идея заключается в следующем: когда я перетаскиваю экземпляр TitleWindo с помощью мыши, и если TitleWindow достигает границы его родительского контейнера, тогда удаляется TitleWindow, и дальнейшее перемещение невозможно (имитировать отпускание мыши кнопка). Если я захочу переместить его снова, я должен снова щелкнуть заголовок TitleWindow и взять его.

1 Ответ

2 голосов
/ 02 июня 2011

@ Йордан:

Посмотрим, правильно ли я вас понял.Приведенная ниже демонстрация «остановит» окно от наркотической зависимости.Когда вы попытаетесь перетащить его за верхнюю или левую границу, он будет "имитировать отпущенную кнопку мыши", как вы и просили.Правая и нижняя граница не будут вызывать это.

AutoDropTitleWindow.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="setup()">
<fx:Script>
    <![CDATA[
        import mx.managers.PopUpManager;

        private function setup() : void {
            var titleWin:MyTitleWindow = PopUpManager.createPopUp(this, MyTitleWindow, false) as MyTitleWindow;
            PopUpManager.centerPopUp(titleWin);
        }
    ]]>
</fx:Script>

</s:Application>

MyTitleWindow.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"
           creationComplete="setup()"
           >

<fx:Script>
    <![CDATA[
        import spark.events.TitleWindowBoundsEvent;

        private function setup(): void {
            addEventListener(TitleWindowBoundsEvent.WINDOW_MOVING, dragWatcher);
        }

        protected function dragWatcher(event:TitleWindowBoundsEvent):void
        {
            if (event.afterBounds.left < 0) {
                event.afterBounds.left = 0;
                dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
            } else if (event.afterBounds.right > systemManager.stage.stageWidth) {
                event.afterBounds.left = systemManager.stage.stageWidth - event.afterBounds.width;
            }
            if (event.afterBounds.top < 0) {
                event.afterBounds.top = 0;
                dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
            } else if (event.afterBounds.bottom > systemManager.stage.stageHeight) {
                event.afterBounds.top = systemManager.stage.stageHeight - event.afterBounds.height;
            }
        }

    ]]>
</fx:Script>

<s:Label x="10" y="10" text="X:"/>
<s:Label x="10" y="30" text="Y:"/>

<s:Label x="40" y="10" text="{this.x}"/>
<s:Label x="40" y="30" text="{this.y}"/>

</s:TitleWindow>
...