2008-10-28 86 views
0

這裏是我的問題:FLEX3,點擊和事件捕捉,特殊情況

我有一個主畫布「黑板」的面板, 這種帆布有本身的幾個孩子的,就像一個工具欄(牌),標籤和一些皮膚。

問題是,當我移動到矩形工具,我開始繪製矩形,如果我想改變工具,當我點擊其他工具,如'圓'或'選擇'按鈕不會趕上點擊事件,畫布將抓住鼠標並開始繪畫。

就像在picture.So我無法改變工具,一旦我開始繪畫。

alt text http://www.freeimagehosting.net/uploads/397a7cd49e.png

我怎麼能不使畫布反應過來的時候它是一個工具,或者我怎麼能讓按鈕第一趕上點擊並告訴畫布沒有做畫什麼。

當然,我可以把工具欄放在畫布上的其他地方,但是因爲空間很重要,所以我希望按鈕放在畫布上。

我願意接受任何建議。

===下面是一些代碼,以顯示它如何工作內部。 ===

<?xml version="1.0" encoding="utf-8"?> 
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" 
      xmlns:degrafa="http://www.degrafa.com/2007" 
      xmlns:comp="org.foo.bar.view.components.*" 
      layout="absolute" 
      title="Tableau"> 


    <mx:Script> 
    <![CDATA[ 
     import org.edorado.edoboard.ApplicationFacade; 
    ]]> 
    </mx:Script> 

    <mx:Canvas id="blackBoard"> 

     <degrafa:Surface id="boardSurfaceContainer"> 
      skinning  
    </degrafa:Surface> 

     <!-- Tool bar --> 
     <comp:ToolbarView 
      id = "toolbar" 
      name = "toolbar" 
      verticalScrollPolicy="off" 
      horizontalScrollPolicy="off" 
      bottom="5" 
      right="5" 
      top="5" 
      direction="vertical" 
      width="30" /> 

     <mx:Label x="10" y="10" text="Label" color="#FFFFFF" id="lbl"/> 

    </mx:Canvas> 

</mx:Panel> 

工具欄是包含在瓷磚中的按鈕列表。 畫布「黑板」與多個事件處理相關聯,特別是鼠標向上和移動以繪製形狀。

... 
boardCanvas.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); 
      boardCanvas.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp); 
... 
     private function handleMouseDown(event:MouseEvent):void { 
      // Get the current mouse location wich may be adjusted to the grid 
      var selectPoint:Point = boardCanvas.globalToLocal(new Point(event.stageX, event.stageY)); 
      startPoint = snapPoint(selectPoint.x, selectPoint.y); 
      boardView.lbl.text = '(' + startPoint.x +',' + startPoint.y + ')'; 
.... 

工具欄還聽點擊

<?xml version="1.0" encoding="utf-8"?> 
<mx:Tile xmlns:mx="http://www.adobe.com/2006/mxml"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.charts.BubbleChart; 
      import org.edorado.edoboard.view.components.shapes.*; 

      public static const TOOL_CHANGE:String = "toolChange"; 
      public static const TEXT_TOOL:String = "textTool"; 
      public static const SELECT_TOOL:String = "selectTool"; 
      public static const RECTANGLE_TOOL:String = "rectangleTool"; 

      private var b:Button = null; 

      private function handleButtonClick(event:MouseEvent):void { 
       trace("CLICKED TOOL"); 
       // selectButton.dispatchEvent(new Event(TOOL_CHANGE, true, true)) 
       b = event.target as Button; 
       b.dispatchEvent(new Event(TOOL_CHANGE, true, true)); 
      } 


     ]]> 
    </mx:Script> 

      <!-- Use class facotry ? --> 
      <mx:Button id="selectButton" 
        name="{SELECT_TOOL}" 
        selectedUpSkin="assets.skins.ToolButtonSkin" 
        width="30" 
        height="30" 
        styleName="selectButton" 
        toolTip="selection" 
        click="handleButtonClick(event); " /> 

      <mx:Button id="textButton" 
        name = "{TEXT_TOOL}" 
        selectedUpSkin="assets.skins.ToolButtonSkin" 
        width="30" 
        height="30" 
        styleName="textButton" 
        toolTip="text" 
        click="handleButtonClick(event);" /> 

      <mx:Button id="rectButton" 
        name = "{RECTANGLE_TOOL}" 
        selectedUpSkin="assets.skins.ToolButtonSkin" 
        width="30" 
        height="30" 
        styleName="rectButton" 
        toolTip="rectButton" 
        click="handleButtonClick(event);" /> 
</mx:Tile> 

回答

1

謝謝, 我發現了一些類似的帖子actualy我只聽到鼠標放在我的工具欄中,並停止事件傳播,以便畫布不抓住它。

1

您可以用您MouseEventtarget屬性來區分的行爲舉止時,點擊來自您的工具欄。 只需在LiveDocs上獲得一個戰利品來了解什麼是目標屬性。

祝你好運!