I tried to do it while modifying your code as little as possible.
Copying is a lot more complex than moving and it can become a nightmare
if you have children embedded inside your Title Window. I think that you
may also have to clean up the BitmapData used as a drag proxy image to
avoid memory leaks. There are not only one way of doing this and it
might not be the best way but it's a start.
Good luck!
Whyves
---------------- BEGIN OF CODE -------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="init();" >
<mx:Panel x="47" y="78" width="200" height="200"
backgroundColor="#FFFFFF"
layout="absolute"
id="pan1" >
<mx:TitleWindow id="myTitleWindow" title="My Title Window" x="10"
y="10" label="Button" mouseMove="mouseOverHandler(event);" width="160"
backgroundColor="#F60B0B" height="77"/>
<mx:Button x="40" y="118" label="Button2"/>
</mx:Panel>
<mx:Panel x="460" y="78" width="200" height="200"
backgroundColor="#FFFFFF"
dragDrop="dragDropHandler(event)" id="pan2"
dragEnter="dragEnterHandler(event)">
</mx:Panel>
<mx:Script>
<![CDATA[
import mx.core.BitmapAsset;
import mx.core.FlexBitmap;
import mx.core.IFlexDisplayObject;
import mx.events.CloseEvent;
import mx.containers.TitleWindow;
import mx.managers.DragManager;
import mx.core.DragSource;
import mx.events.DragEvent;
import mx.containers.Canvas;
public function init():void
{
DragManager.showFeedback(DragManager.COPY);
}
private function mouseOverHandler(event:MouseEvent):void
{
// You need to make a copy of the window and pass it to the drag
source
var dragData:TitleWindow = copyTitleWindow(myTitleWindow);
var ds:DragSource= new DragSource();
ds.addData(dragData, "can");
// Drag Image
var bd:BitmapData = new BitmapData(dragData.width, dragData.height);
bd.draw(myTitleWindow);
var dragImage:IFlexDisplayObject = new BitmapAsset(bd);
DragManager.doDrag(myTitleWindow, ds, event, dragImage);
}
/**
* Makes a copy of a Title Window
*
*/
protected function
copyTitleWindow(originalWindow:TitleWindow):TitleWindow {
var newWindow:TitleWindow = new TitleWindow();
with (newWindow) {
title = originalWindow.title.concat(" copy");
width = originalWindow.width;
height = originalWindow.height;
setStyle("backgroundColor",
originalWindow.getStyle("backgroundColor"));
}
return newWindow;
}
private function dragEnterHandler(event:DragEvent):void
{
if (event.dragSource.hasFormat("can"))
{
event.preventDefault();
DragManager.showFeedback(DragManager.COPY);
DragManager.acceptDragDrop(pan2);
}
}
private function dragDropHandler(event:DragEvent):void
{
var window:TitleWindow= event.dragSource.dataForFormat("can") as
TitleWindow;
window.x = 10;
window.y = 10;
window.showCloseButton=true;
window.addEventListener(CloseEvent.CLOSE, fermer_h)
pan2.addChild(window);
}
public function fermer_h(event:CloseEvent):void
{
pan2.removeChild(TitleWindow(event.currentTarget));
}
]]>
</mx:Script>
</mx:Application>
________________________________
From: [email protected] [mailto:[email protected]] On
Behalf Of soulflow132
Sent: Saturday, April 11, 2009 9:18 AM
To: [email protected]
Subject: Re: re: [flexcoders] Problem drag and drop
I've tried what you said but its not working dude :confused::confused:
any suggestions please ?
--
View this message in context:
http://www.nabble.com/Problem-drag-and-drop-tp22997154p23001090.html
<http://www.nabble.com/Problem-drag-and-drop-tp22997154p23001090.html>
Sent from the FlexCoders mailing list archive at Nabble.com.