dahanRoleLetter = letterModule.factory.create() as DaHanRoleLetter;
PopUpManager.addPopUp(dahanRoleLetter,dahanFlex);
PopUpManager.centerPopUp(dahanRoleLetter);
var componentDrag:ComponentDrag = new ComponentDrag(dahanFlex,dahanRoleLetter,dahanRoleLetter.letTitle,dahanFlex.stage,null);
===============================================
// ActionScript file
package com.dahan.util
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import mx.core.UIComponent;
import mx.managers.DragManager;
public class ComponentDrag{
/**
* 声明要拖动的窗口的约束窗口
*/
private var father:UIComponent;
/**
* 声明要拖动的窗口
*/
private var child:UIComponent;
/**
* 可选,声明拖动面板主操作区的一个覆盖容器(如果主面板道具也有拖动,在主面板拖动时禁止了格子道具的拖动)
**/
private var model:UIComponent;
/**
* 声明舞台
*/
private var stage:DisplayObject;
/**
* 事件的宽度
*/
private var img:UIComponent;
private var height:Number;
/**
* 带参构造
* 参数为:
* father:UIComponent---要拖动窗口的约束窗口
* child:UIComponent---要拖动的窗口
* stage:DisplayObject---舞台
* model---可选,声明拖动面板主操作区的一个覆盖容器(如果主面板道具也有拖动,在主面板拖动时禁止了格子道具的拖动)
*/
public function ComponentDrag(father:UIComponent,child:UIComponent,img:UIComponent,stage:DisplayObject,model:UIComponent){
this.setChild(child);
this.setFather(father);
this.setStage(stage);
this.setHeight(height);
this.setImg(img);
this.model = model;
init();
}
public function setHeight(height:Number):void{
this.height=height;
}
public function getHeight():Number{
return height;
}
/**
* father:UIComponent的set方法
*/
public function setFather(father:UIComponent):void{
this.father=father;
}
/**
* father:UIComponent的get方法
* 返回值为father:UIComponent
*/
public function getFather():UIComponent{
return father;
}
/**
* child:UIComponent的set方法
*/
public function setChild(child:UIComponent):void{
this.child=child;
}
/**
* child:UIComponent的get方法
* 返回值为 child:UIComponent
*/
public function setImg(img:UIComponent):void{
this.img=img;
}
public function getImg():UIComponent{
return img;
}
public function getChild():UIComponent{
return child;
}
/**
* stage:DisplayObject的set方法
*/
public function setStage(stage:DisplayObject):void{
this.stage=stage;
}
/**
* stage:DisplayObject的get方法
* 返回值为stage:DisplayObject
*/
public function getStage():DisplayObject{
return stage;
}
/**
* 注册窗口拖动时的事件
*/
public function init():void{
img.addEventListener(MouseEvent.MOUSE_DOWN,mouseHandle);
//child.addEventListener(MouseEvent.MOUSE_UP,mouseHandle);
stage.addEventListener(MouseEvent.MOUSE_UP,mouseHandle);
//father.addEventListener(MouseEvent.MOUSE_MOVE,mouseHandle);
//child.addEventListener(MouseEvent.MOUSE_MOVE,mouseHandle);
//child.addEventListener(MouseEvent.MOUSE_OUT,mouseHandle);
//child.addEventListener(MouseEvent.MOUSE_MOVE,titleInit);
}
public function titleInit(event:MouseEvent):void{
var reX:Number=child.x;
var reY:Number=child.y;
var rect:Rectangle=new Rectangle(reX,reY,child.width,height);
if(rect.contains(event.stageX,event.stageY)){
child.addEventListener(MouseEvent.MOUSE_DOWN,mouseHandle);
//child.addEventListener(MouseEvent.MOUSE_OUT,mouseHandle);
}else{
child.removeEventListener(MouseEvent.MOUSE_DOWN,mouseHandle);
}
stage.addEventListener(MouseEvent.MOUSE_UP,mouseHandle,true);
}
/**
* 设置startDrag
*/
private function componentStartDrag(event:Event):void{
var pWidth:Number=father.width;
var pHeight:Number=father.height;
var tWidth:Number=child.width;
var tHeight:Number=child.height;
var xwidth:Number=pWidth-tWidth;
var xheight:Number=pHeight-tHeight;
var reX:Number=father.x;
var reY:Number=father.y;
var rect:Rectangle=new Rectangle(reX,reY,xwidth,xheight);
child.startDrag(false,rect);
if(model != null){
model.setStyle("backgroundColor","blue");
}
}
/**
* 设置stopDrag
*/
private function componentStopDrag(event:Event):void{
child.stopDrag();
if(model != null){
model.setStyle("backgroundColor","");
}
}
/**
*根据event.type的不同值来调用不同方法
*/
private function mouseHandle(event:Event):void{
if(event.type==MouseEvent.MOUSE_DOWN){
componentStartDrag(event);
}else if(event.type==MouseEvent.MOUSE_UP){
componentStopDrag(event);
}else if(event.type==MouseEvent.MOUSE_OUT){
componentStopDrag(event);
}
}
}
}