FLEX3, Clique e evento captura, caso especial
-
04-07-2019 - |
Pergunta
Aqui está o meu problema:
Eu tenho uma tela principal 'negro' em um painel, esta tela tem-se várias criança, como uma barra de ferramentas (telhas), um rótulo e alguns esfola.
O problema é que quando eu passar para a ferramenta retângulo e eu começar a desenhar retângulos se eu quiser mudar a ferramenta quando eu clico em uma outra ferramenta como o 'círculo' ou 'selecionar' o botão não vai pegar o clique evento, intead a tela vai pegar o mouse para baixo e começar a desenhar.
Assim como no picture.So eu sou incapaz de ferramenta de mudança uma vez que eu começar a desenhar.
alt texto http://www.freeimagehosting.net/uploads/397a7cd49e.png
Como eu não poderia fazer a tela de reagir quando ele está em uma ferramenta, ou como eu poderia fazer o botão de captura o clique primeiro e dizer a tela sem fazer desenhar qualquer coisa.
É claro que eu poderia apenas colocar a barra de ferramentas em outro lugar não na tela, mas desde que o espaço é importante eu gostaria que os botões para estar na tela.
Estou aberto a todas as sugestões.
=== Aqui estão alguns códigos para mostrar como ele funciona internamente. ===
<?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>
A barra de ferramentas é uma lista de botões contidos em uma telha. A tela 'negro' está ligada a vários eventos de manipulação, em particular do mouse para cima para baixo e mover-se para desenhar formas.
...
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 + ')';
....
A barra de ferramentas também ouvir cliques
<?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>
Solução 2
Obrigado, Encontrei alguns post semelhante, na verdade, eu só ouviu por mouse para baixo na minha barra de ferramentas e parou a propagação do evento para que a captura não faça lona lo.
Outras dicas
Você pode usar o alvo propriedade do seu MouseEvent para diferenciar o comportamento quando o clique é de sua barra de ferramentas. Basta ter um saque no LiveDocs para entender o que é a propriedade de destino.
Boa sorte!