2011-05-31 32 views
0

我希望在拖動TitleWindow實例並移動一個特定的事件時模擬窗口的拖放,並且不會進一步移動幾秒鐘。Flex TitleWindow模擬放置並防止拖動幾秒鐘?

這是非常不尋常的問題,但它會比方便更每個點的解決方案

PS:總體思路是如下:當我拖着TitleWindo例如鼠標,如果TitleWindow命中它的父容器的邊界,然後丟棄TitleWindow,並且不可能進一步移動(模擬釋放鼠標按鈕)。如果我想再次移動它,那麼我應該再次單擊TitleWindow標題並將其縮放。

+0

我們在談論什麼樣的特定事件的有關嗎? – 2011-05-31 15:02:05

+0

的東西,只是改變一些屬性爲真,或類似的東西。 – 2011-05-31 16:27:21

+0

請更清楚您想要達到的目標。 – 2011-06-01 14:19:47

回答

2

@Yordan:

讓我們看看我是否正確理解你。下面的演示將「停止」一個窗口,使其不再是藥物舞臺。當您嘗試將其拖離頂部或左邊界時,它會按照您的要求「模擬釋放鼠標按鈕」。右邊界和下邊界不會導致這種情況發生。

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> 
+0

殺手示例!剛剛測試過它。非常感謝你 ! :) – 2011-06-03 08:50:06