Frage

Hier ist mein Problem:

Ich habe einen großen Leinwand ‚Tafel‘ in einer Platte, Diese Leinwand hat sich mehrere Childs, wie eine Symbolleiste (Fliesen), ein Etikett und einige Häutung.

Das Problem ist, dass, wenn ich auf das Rechteck-Werkzeug bewegen und i beginnen Rechtecken zeichnen, wenn ich das Werkzeug geändert werden soll, wenn ich auf einem anderen Werkzeug klicken wie ‚Kreis‘ oder ‚wählen‘ die Taste wird den Klick nicht fangen Ereignis, intead wird die Leinwand, um die Maus fangen und nach unten zu zeichnen beginnen.

Genau wie auf dem picture.So ich nicht in der Lage bin Werkzeug zu ändern, sobald ich Zeichnen beginnen.

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

Wie kann ich die Leinwand machen reagieren, wenn es auf einem Werkzeug ist, oder wie könnte ich die Taste macht zuerst den Klick fangen und die Leinwand sagt nicht, etwas zu tun ziehen.

Natürlich konnte ich nur die Symbolleiste setze woanders nicht auf der Leinwand, aber da Raum wichtig ist, würde ich die Tasten auf der Leinwand sein mag.

Ich bin offen für alle Vorschläge.

=== Hier sind einige Code zu zeigen, wie es internaly funktioniert. ===

<?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>

Die Toolbar ist eine Liste von Schaltflächen in einer Kachel enthalten. Die Leinwand ‚Tafel‘ ist mit mehreren Veranstaltungen verknüpft Handhabung, insbesondere Maus nach oben und nach unten bewegen Formen zu ziehen.

...
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 + ')';
....

Die Toolbar auch Klicks hören

<?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>
War es hilfreich?

Lösung 2

Danke, Ich fand einige ähnliche Position tatsächlich hörte ich nur für die Maus in meiner Symbolleiste nach unten und hielt die Ereignispropagierung, so dass die Leinwand, um ihn nicht fangen.

Andere Tipps

Sie können die Ziel Eigentum Ihrer Mouseevent die Verhaltung zu unterscheiden, wenn die Klick ist aus Ihrer Symbolleiste. Nehmen Sie einfach eine Beute bei LiveDocs zu verstehen, was die Zieleigenschaft ist.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top