Bonjour, j'ai un problème .
J'essaye de faire du drag and drop dans un canvas d'un de mes composants MXML. Ce n'est pas un composant tout simple du style <mx:Image>, mais un contrôle basé sur une VBox contenant, plusieurs enfants. Voici le code de ce contrôle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:display="flash.display.*"
		 xmlns:my="*" verticalGap="0"
		 verticalAlign="top" horizontalAlign="center"
		 mouseDown="dragHandler(event)" borderStyle="solid"
		 borderThickness="1" borderColor="#000000">
	<mx:Script>
		<![CDATA[
			import mx.managers.DragManager;
			import mx.core.DragSource;
			import mx.controls.Alert;
 
			[Bindable]
			private var connHeight:uint=20;
			[Bindable]
			private var connWidth:uint=3;
 
 
			private function dragHandler(event:MouseEvent):void
			{
				var dragInitiator:MyBox=event.currentTarget as MyBox;
				var ds:DragSource=new DragSource();
				ds.addData(dragInitiator, "obj");
				ds.addData(event.localX, "localX");
				ds.addData(event.localY, "localY");
				var imgProxy:Box=new Box();
				imgProxy.width=dragInitiator.width;
				imgProxy.height=dragInitiator.height;
				imgProxy.setStyle("borderStyle", "solid");
				imgProxy.setStyle("borderThickness", "1");
				imgProxy.setStyle("borderColor", "#444444");
				DragManager.doDrag(dragInitiator, ds, event, imgProxy);
				//Alert.show("target = "+event.target.toString()+"\n"+"currentTarget = "+event.currentTarget.toString());
			}
 
		]]>
	</mx:Script>
	<my:Connecteur/>
	<mx:Box id="theBox" borderThickness="1"
			borderStyle="solid" borderColor="#000000">
		<mx:Label id="texteMyBox" text="bla"/>
	</mx:Box>
	<my:Connecteur/>
</mx:VBox>
Lorsque je relâche mon composant dans le Canvas, j'utilise cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
private function dragDropZDHandler(event:DragEvent):void
{
	if (event.dragSource.hasFormat("obj"))
	{
		var ds:DragSource=event.dragSource;
		var localX:uint=uint(ds.dataForFormat("localX"));
		var localY:uint=uint(ds.dataForFormat("localY"));
		MyBox(event.dragInitiator).x=Canvas(event.currentTarget).mouseX - localX;
		MyBox(event.dragInitiator).y=Canvas(event.currentTarget).mouseY - localY;
	}
}
Comme vous pouvez le voir, j'ai corriger le décalage créé lors du drag n drop avec localX et localY (sinon le coin haut gauche de l'objet déplacé se place au niveau du pointeur de la souris, ce qui décale mochement l"effet d&d).

Mon problème est le suivant : lorsque je veux déplacer mon objet, si je clique dans une partie de mon composant ou il n'y a pas de sous enfant, pas de problème. Si je clique à un endroit ou un sous élément est présent (genre mon composant connecteur, ou ma Box), le système d'évènement me récupère le localX et le localY pour cet élément enfant (ou encore son enfant, selon le nombre de niveau).
Je sais que cela vient du système d'Event, avec les différentes phases. Cependant, je ne sais pas comment faire pour que mes localX et mon localY finaux soient toujours ceux de mon composant MyBox.

Quelqu'un a-t-il saisi mon problème ? si oui, pouvez vous me donner un coup de main ?
Merci