Voici mon problème:Flex3, Cliquez et événement de capture, cas particulier
J'ai une toile principale « tableau noir » dans un panneau, cette toile elle-même a plusieurs Childs, comme une barre d'outils (tuiles), une étiquette et un peu de peau. Le problème est que quand je passe à l'outil rectangle et que je commence à dessiner des rectangles si je veux changer l'outil quand je clique sur un autre outil tel que 'cercle' ou 'sélectionner' le bouton n'attrape pas le cliquez sur événement, intead la toile va attraper la souris et commencer à dessiner.
Tout comme sur la photo. Donc, je suis incapable de changer d'outil une fois que je commence à dessiner.
alt text http://www.freeimagehosting.net/uploads/397a7cd49e.png
Comment pourrais-je pas faire la toile réagir quand il est sur un outil, ou comment pourrais-je faire le bouton attraper le premier clic et dire la toile ne rien faire dessiner.
Bien sûr, je pourrais juste mettre la barre d'outils ailleurs que sur la toile, mais comme l'espace est important je voudrais que les boutons soient sur la toile.
Je suis ouvert à toutes suggestions.
=== Voici un code pour montrer comment cela fonctionne à l'interne. ===
<?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>
La barre d'outils est une liste de boutons contenus dans une mosaïque. Le tableau 'tableau noir' est lié à plusieurs événements de manipulation, en particulier la souris vers le haut et se déplacer pour dessiner des formes.
...
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 + ')';
....
La barre d'outils écouter également clique
<?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>