发现自带的没有这个组件自己就写了一个简单的,后来才发现第三方有写这个,看来是白写了,下边开源下源码
有兴趣的可以自己看看 一共就5个文件 ResizeWindow.as是住文件,继承的是TitleWindow
ResizeWindow.mxml是flex的组件界面直接用就可以了。如果想扩展的可以自己扩展下
支持拖拉,大小拖动
--------------------------------ResizeWindow.mxml----------------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
xmlns:wxsr="com.components.resizeWindow.*"
xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="200">
<wxsr:ResizeWindow width="100%" x="0" y="0" height="100%" showCloseButton="true">
</wxsr:ResizeWindow>
</mx:Canvas>
-------------------------------------ResizeWindow.as---------------------------------------
package com.components.resizeWindow
{
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.utils.Timer;
import mx.containers.TitleWindow;
import mx.effects.Move;
import mx.effects.Resize;
import mx.events.MoveEvent;
import mx.events.TweenEvent;
public class ResizeWindow extends TitleWindow
{
public static const RESIZE:String='resize'
private var bounds:Rectangle
public var scaleGrid:ScaleGrid
private var timer:Timer
private var _isResize:Boolean=false
private var _resizeType:String
private var moveing:Boolean=false
public var minMax:Boolean=false
public function ResizeWindow()
{
super();
this.showCloseButton=true
this.timer=new Timer (30)
this.timer.addEventListener(TimerEvent.TIMER,timerFunc)
this.isPopUp=true
this.scaleGrid=new ScaleGrid
//this.scaleGrid.visible=false
this.scaleGrid.addEventListener(ResizeWindowEvent.RESIZE,resizeFunc)
this.addEventListener(Event.ADDED_TO_STAGE,addedFunc,false,0,true)
}
public function ableResize(bool:Boolean):void
{
this.scaleGrid.visible=bool
}
public function get isResize():Boolean
{
return this._isResize
}
public function get resizeType():String
{
return this._resizeType
}
private function timerFunc(event:TimerEvent):void
{
if(this._isResize)
{
this.moveing=false
this.removeEventListener(MoveEvent.MOVE,moveFunc)
var point:Point=new Point(this.parent.parent.mouseX,this.parent.parent.mouseY)
switch (this.resizeType)
{
case ResizeWindowEvent.TOP_LEFT:
if(point.x>this.x+this.width-this.scaleGrid.minWidth)point.x=this.x+this.width-this.scaleGrid.minWidth
if(point.y>this.y+this.height-this.scaleGrid.minHeight)point.y=this.y+this.height-this.scaleGrid.minHeight
this.scaleGrid.resizeTopLeft(point)
break;
case ResizeWindowEvent.TOP:
if(point.y>this.y+this.height-this.scaleGrid.minHeight)point.y=this.y+this.height-this.scaleGrid.minHeight
this.scaleGrid.resizeTop(point)
break;
case ResizeWindowEvent.TOP_RIGHT:
if(point.y>this.y+this.height-this.scaleGrid.minHeight)point.y=this.y+this.height-this.scaleGrid.minHeight
this.scaleGrid.resizeTopRight(point)
break;
case ResizeWindowEvent.LEFT:
if(point.x>this.x+this.width-this.scaleGrid.minWidth)point.x=this.x+this.width-this.scaleGrid.minWidth
this.scaleGrid.resizeLeft(point)
break;
case ResizeWindowEvent.RIGHT:
if(point.x<this.x+this.scaleGrid.minWidth)point.x=this.x+this.scaleGrid.minWidth;
if(point.y<this.y+this.scaleGrid.minHeight)point.y=this.y+this.scaleGrid.minHeight;
this.scaleGrid.resizeRight(point)
break;
case ResizeWindowEvent.BOUTTON_LEFT:
if(point.x>this.x+this.width-this.scaleGrid.minWidth)point.x=this.x+this.width-this.scaleGrid.minWidth
this.scaleGrid.resizeBouttonLeft(point)
break;
case ResizeWindowEvent.BOUTTON:
this.scaleGrid.resizeBoutton(point)
break;
case ResizeWindowEvent.BOUTTON_RIGHT:
if(point.x<this.x+this.scaleGrid.minWidth)point.x=this.x+this.scaleGrid.minWidth;
if(point.y<this.y+this.scaleGrid.minHeight)point.y=this.y+this.scaleGrid.minHeight;
this.scaleGrid.resizeBouttonRight(point)
break;
}
}
}
private function mouseUpFunc(event:MouseEvent):void
{
if(!this.moveing&&this.isResize){
this._isResize=false
var resize:Resize=new Resize(this)
resize.duration=100
resize.heightTo=this.scaleGrid.rect.height
resize.widthTo=this.scaleGrid.rect.width
resize.play()
var move:Move=new Move(this)
move.duration=80
move.xTo=this.scaleGrid.rect.topLeft.x//-this.scaleGrid.top.height*1.5//-this.scaleGrid.top.width
move.yTo=this.scaleGrid.rect.topLeft.y//-this.scaleGrid.top.height*1.5//-this.scaleGrid.top.width
move.play()
resize.addEventListener(TweenEvent.TWEEN_END,endFunc)
this.timer.stop()
}
moveing=false
}
private function endFunc(event:TweenEvent):void
{
moveing=true
event.target.removeEventListener(TweenEvent.TWEEN_END,endFunc)
this.scaleGrid.graphics.clear()
this.dispatchEvent(new Event (RESIZE))
this.addEventListener(MoveEvent.MOVE,moveFunc)
var time:Timer=new Timer(50)
time.addEventListener(TimerEvent.TIMER,updataAfterMove)
time.start()
}
private function updataAfterMove(event:TimerEvent):void
{
var t:Timer=event.currentTarget as Timer
if(t.currentCount>2){
t.stop()
t.removeEventListener(TimerEvent.TIMER,updataAfterMove)
}
this.resize()
this.scaleGrid.graphics.clear()
}
private function resizeFunc(event:ResizeWindowEvent):void
{
this.moveing=false
this._resizeType=event.resizeType
this._isResize=true
this.timer.start()
}
private function addedFunc(event:Event):void
{
this.stage.addChild(scaleGrid)
this.stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpFunc)
this.addEventListener(MoveEvent.MOVE,moveFunc)
this.addEventListener(Event.ENTER_FRAME,enterFrameFunc)
}
private function moveFunc(event:MoveEvent):void
{
this.resize()
this.scaleGrid.graphics.clear()
}
private function fitSize(rect:Rectangle):void
{
this.x=rect.x
this.y=rect.y
this.width=rect.width
this.height=rect.height
}
private var num:int=1
private function enterFrameFunc(event:Event):void
{
this.bounds!=null?this.resize():''
if(this.num>=2){
event.target.removeEventListener(Event.ENTER_FRAME,enterFrameFunc)
}
this.bounds=this.getBounds(this.parent)
this.num++
this.scaleGrid.graphics.clear()
//this.scaleGrid.visible=true
}
public function resize():void
{
var rect:Rectangle=this.getBounds(this.parent.parent)
rect.width=this.width
rect.height=this.height
rect.y=y//+this.scaleGrid.top.height*1.5
rect.x=x//+this.scaleGrid.top.height*1.5
this.scaleGrid.resize(rect)
this.dispatchEvent(new Event (RESIZE))
}
}
}
----------------------------------ScaleGrid-------------------------------------------
package com.components.resizeWindow
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
public class ScaleGrid extends Sprite
{
public var rect:Rectangle
private var box:Sprite
public var top:ResizeCell
public var boutton:ResizeCell
public var left:ResizeCell;
public var right:ResizeCell
public var top_left:ResizeCell
public var top_right:ResizeCell
public var boutton_left:ResizeCell
public var boutton_right:ResizeCell
public var minWidth:Number=100
public var minHeight:Number=100
public function ScaleGrid()
{
confIt()
}
public function resize(rect:Rectangle):void
{
//if(rect.bottomRight.x<=rect.topLeft.x&&rect.bottomRight.y<=rect.topLeft.y>100){
resizeing(rect)
//}
//this.boutton_right.x=this.
}
private function resizeing(rect:Rectangle):void
{
this.rect=rect
this.top_left.x=this.rect.topLeft.x
this.top_left.y=this.rect.topLeft.y;
this.top_left.rect=new Rectangle(this.top_left.x,this.top_left.y,this.top_left.width,this.top_left.height)
this.top.x=this.rect.topLeft.x+this.rect.width/2-this.top.width/2
this.top.y=this.rect.topLeft.y;
this.top.rect=new Rectangle(this.top.x,this.top.y,this.top.width,this.top.height)
this.top_right.x=this.rect.topLeft.x+this.rect.width-this.top_right.width
this.top_right.y=this.rect.topLeft.y;
this.top_right.rect=new Rectangle(this.top_right.x,this.top_right.y,this.top_right.width,this.top_right.height)
this.left.x=this.rect.topLeft.x
this.left.y=this.rect.topLeft.y+this.rect.height/2-this.left.height/2;
this.left.rect=new Rectangle(this.left.x,this.left.y,this.left.width,this.left.height)
this.right.x=this.rect.topLeft.x+this.rect.width-this.right.width
this.right.y=this.rect.topLeft.y+this.rect.height/2-this.right.height/2;
this.right.rect=new Rectangle(this.right.x,this.right.y,this.right.width,this.right.height)
this.boutton_left.x=this.rect.topLeft.x
this.boutton_left.y=this.rect.topLeft.y+this.rect.height-this.boutton_left.height
this.boutton_left.rect=new Rectangle(this.boutton_left.x,this.boutton_left.y,this.boutton_left.width,this.boutton_left.height)
this.boutton.x=this.rect.topLeft.x+this.rect.width/2-this.boutton.width/2
this.boutton.y=this.rect.topLeft.y+this.rect.height-this.boutton.height
this.boutton.rect=new Rectangle(this.boutton.x,this.boutton.y,this.boutton.width,this.boutton.height)
this.boutton_right.x=this.rect.topLeft.x+this.rect.width-this.boutton_right.width
this.boutton_right.y=this.rect.topLeft.y+this.rect.height-this.boutton_right.height
this.boutton_right.rect=new Rectangle(this.boutton_right.x,this.boutton_right.y,this.boutton_right.width,this.boutton_right.height)
this.graphics.clear()
this.graphics.lineStyle(1)
this.graphics.moveTo(this.rect.topLeft.x,this.rect.topLeft.y)
this.graphics.lineTo(this.rect.bottomRight.x,this.rect.topLeft.y)
this.graphics.lineTo(this.rect.bottomRight.x,this.rect.bottomRight.y)
this.graphics.lineTo(this.rect.topLeft.x,this.rect.bottomRight.y)
this.graphics.lineTo(this.rect.topLeft.x,this.rect.topLeft.y)
}
public function resizeTop(top:Point):void
{
top.y-=this.top.height*.5
var tmp:Rectangle=new Rectangle(this.rect.x,top.y,this.rect.width,this.rect.height+this.rect.topLeft.y-top.y)
doResize(tmp)
}
public function resizeTopLeft(topLeft:Point):void
{
topLeft.y-=this.top.height*.5
var x:Number=topLeft.x
var y:Number=topLeft.y
var width:Number=this.rect.width+this.rect.left-topLeft.x
var height:Number=this.rect.height+this.rect.topLeft.y-topLeft.y
var tmp:Rectangle=new Rectangle(x,y,width,height)
doResize(tmp)
}
public function resizeTopRight(topRight:Point):void
{
var tmp:Rectangle=new Rectangle(this.rect.x,topRight.y,Math.abs(this.rect.topLeft.x-topRight.x),this.rect.bottomRight.y-topRight.y)
doResize(tmp)
}
public function resizeLeft(left:Point):void
{
var tmp:Rectangle=new Rectangle(left.x,rect.y,this.rect.width+this.rect.left-left.x,this.rect.height)
doResize(tmp)
}
public function resizeRight(right:Point):void
{
var tmp:Rectangle=new Rectangle(this.rect.x,rect.y,Math.abs(this.rect.topLeft.x-right.x),this.rect.height)
doResize(tmp)
}
public function resizeBoutton(boutton:Point):void
{
boutton.y+=this.top.height*.5
var tmp:Rectangle=new Rectangle(this.rect.x,rect.y,this.rect.width,rect.height+boutton.y-rect.bottomRight.y)
doResize(tmp)
}
public function resizeBouttonLeft(bouttonLeft:Point):void
{
bouttonLeft.y+=this.top.height*.5
var tmp:Rectangle=new Rectangle(bouttonLeft.x,rect.y,this.rect.width+this.rect.left-bouttonLeft.x,rect.height+bouttonLeft.y-rect.bottomRight.y)
doResize(tmp)
}
public function resizeBouttonRight(bouttonRight:Point):void
{
bouttonRight.y+=this.top.height*.5
var tmp:Rectangle=new Rectangle(this.rect.x,rect.y,this.rect.width+bouttonRight.x-rect.bottomRight.x,rect.height+bouttonRight.y-rect.bottomRight.y)
doResize(tmp)
}
private function doResize(tmp:Rectangle):void
{
tmp.width<this.minWidth?tmp.width=minWidth:''
tmp.height<this.minHeight?tmp.height=this.minHeight:''
this.rect=tmp
this.resize(this.rect)
}
private function confIt():void
{
this.box=new Sprite
this.top_left=new ResizeCell
this.top=new ResizeCell
this.top_right=new ResizeCell
this.left=new ResizeCell
this.right=new ResizeCell
this.boutton_left=new ResizeCell
this.boutton=new ResizeCell
this.boutton_right=new ResizeCell
this.box.addChild(this.top_left)
this.box.addChild(this.top)
this.box.addChild(this.top_right)
this.box.addChild(this.left)
this.box.addChild(this.right)
this.box.addChild(this.boutton_left)
this.box.addChild(this.boutton)
this.box.addChild(this.boutton_right)
this.addChild(this.box)
this.rect=new Rectangle
this.top_left.addEventListener(MouseEvent.MOUSE_DOWN,top_left_Click)
this.top.addEventListener(MouseEvent.MOUSE_DOWN,top_Click)
this.top_right.addEventListener(MouseEvent.MOUSE_DOWN,top_right_Click)
this.left.addEventListener(MouseEvent.MOUSE_DOWN,left_Click)
this.right.addEventListener(MouseEvent.MOUSE_DOWN,right_Click)
this.boutton_left.addEventListener(MouseEvent.MOUSE_DOWN,boutton_left_Click)
this.boutton.addEventListener(MouseEvent.MOUSE_DOWN,boutton_Click)
this.boutton_right.addEventListener(MouseEvent.MOUSE_DOWN,boutton_right_Click)
}
private function createEvent(target:ResizeCell,type:String):void
{
var e:ResizeWindowEvent=new ResizeWindowEvent(ResizeWindowEvent.RESIZE)
e.rect=target.rect
e.resizeType=type
this.dispatchEvent(e)
}
private function top_left_Click(event:MouseEvent):void
{
createEvent(this.top_left,ResizeWindowEvent.TOP_LEFT)
}
private function top_Click(event:MouseEvent):void
{
createEvent(this.top,ResizeWindowEvent.TOP)
}
private function top_right_Click(event:MouseEvent):void
{
createEvent(this.top_right,ResizeWindowEvent.TOP_RIGHT)
}
private function left_Click(event:MouseEvent):void
{
createEvent(this.left,ResizeWindowEvent.LEFT)
}
private function right_Click(event:MouseEvent):void
{
createEvent(this.right,ResizeWindowEvent.RIGHT)
}
private function boutton_left_Click(event:MouseEvent):void
{
createEvent(this.boutton_left,ResizeWindowEvent.BOUTTON_LEFT)
}
private function boutton_Click(event:MouseEvent):void
{
createEvent(this.boutton,ResizeWindowEvent.BOUTTON)
}
private function boutton_right_Click(event:MouseEvent):void
{
createEvent(this.boutton_right,ResizeWindowEvent.BOUTTON_RIGHT)
}
}
}
----------------------------------------ResizeCell.as--------------------------------
package com.components.resizeWindow
{
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.net.URLRequest;
public class ResizeCell extends Sprite
{
public var rect:Rectangle
public function ResizeCell(w:Number=15,h:Number=15)
{
this.drawGrid(w,h)
}
public function set icon(source:Object):void
{
if(source as Class)
{
this.addChild(new source)
}else if(source as String)
{
var loader:Loader=new Loader
loader.load(new URLRequest(String(source)))
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadeeFunc,false,0,true)
}
}
private function loadeeFunc(event:Event):void
{
var load:DisplayObject= event.target.loader as DisplayObject
load.width=this.rect.width
load.height=this.rect.height
var bmd:BitmapData=new BitmapData(this.rect.width,this.rect.height,true,0)
bmd.draw(load)
this.graphics.clear()
this.graphics.beginBitmapFill(bmd)
this.graphics.drawRect(0,0,this.rect.width,this.rect.height)
this.graphics.endFill()
this.rect=new Rectangle(0,0,this.rect.width,this.rect.height)
}
public function drawGrid(width:Number=15,height:Number=15):void
{
this.graphics.clear()
this.graphics.beginFill(0,.1)
this.graphics.drawRect(0,0,width,height)
this.graphics.endFill()
this.rect=new Rectangle(0,0,width,height)
}
}
}
----------------------------------------ResizeWindowEvent.as---------------------------
package com.components.resizeWindow
{
import flash.events.Event;
import flash.geom.Rectangle;
public class ResizeWindowEvent extends Event
{
public static const TOP:String='top'
public static const TOP_LEFT:String='top_left'
public static const TOP_RIGHT:String='top_right'
public static const LEFT:String='left'
public static const RIGHT:String='right'
public static const BOUTTON:String='boutton'
public static const BOUTTON_LEFT:String='boutton_left'
public static const BOUTTON_RIGHT:String='boutton_right'
public static const RESIZE:String='resize'
public var rect:Rectangle
public var resizeType:String
public function ResizeWindowEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}