ResizableWindow源码

//****************************************************************************
// 版权及最终解释权归AOL所有
// 大小可以由鼠标拖动的Window组件
// 由mx.containers.Window类继承
//****************************************************************************

import mx.containers.Window;
import mx.controls.SimpleButton;
import mx.events.EventDispatcher;


[IconFile("ResizableWindowIcon.png")]

class ResizableWindow extends Window
{
        static var symbolName:String = "ResizableWindow";
        static var symbolOwner:Object = Object(ResizableWindow);
        static var version:String = "0.01";
        
        // 	private var _maxwidth:Number;
        // 	private var _maxheight:Number;
        // 	private var _minwidth:Number;
        // 	private var _minheight:Number;
        // 	private var _rangewidth:Number;
        // 	private var _rangeheight:Number;
        
        
        /* 当前类参数
        * 及当前类+父类参数组合
        */
        var clipParameters:Object =	{ //maxWidth:1, maxHeight:1, minWidth:1, minHeight:1
        };
        static var mergedClipParameters:Boolean = UIObject.mergeClipParameters(
        mx.containers.Window.prototype.clipParameters,
                                                                               ResizableWindow.prototype.clipParameters);
        
        
        /*
        * 拖动按钮
        */
        private var handle:SimpleButton;
        
        /*
        * 鼠标原位置
        */
        private var _oldx:Number;
        private var _oldy:Number;
        
        /*
        * 可控大小窗口按钮的皮肤
        */
        [Inspectable(verbose=1, category="Skins")]
        var skinResize:String = "ResizeButton";
        
        // /*
        //  * 可控大小窗口的最大宽度
        //  */
        // 	[Inspectable (name="ResizableWindow Maximal Width" defaultValue=550 type="Number", category="Values")]
        // 	public function set maxWidth(val:Number):Void
        // 	{
        // 		_maxwidth = val;
        // 		_rangewidth = _maxwidth - _minwidth;
        // 	}
        
        // 	public function get maxWidth():Number
        // 	{
        // 		return _maxwidth;
        // 	}
        
        // /*
        //  * 可控大小窗口的最小宽度
        //  */
        // 	[Inspectable (name="ResizableWindow Minimum Width" defaultValue=20 type="Number", category="Values")]
        // 	public function set minWidth(val:Number):Void
        // 	{
        // 		_minwidth = val;
        // 		_rangewidth = _maxwidth - _minwidth;
        // 	}
        
        // 	public function get minWidth():Number
        // 	{
        // 		return _minwidth;
        // 	}
        
        // /*
        //  * 可控大小窗口的最大高度
        //  */
        // 	[Inspectable (name="ResizableWindow Maximal Height" defaultValue=400 type="Number", category="Values")]
        // 	public function set maxHeight(val:Number):Void
        // 	{
        // 		_maxheight= val;
        // 		_rangeheight= _maxheight - _minheight;
        // 	}
        
        // 	public function get maxHeight():Number
        // 	{
        // 		return _maxheight;
        // 	}
        
        // /*
        //  * 可控大小窗口的最小高度
        //  */
        // 	[Inspectable (name="ResizableWindow Minimum Height" defaultValue=40 type="Number", category="Values")]
        // 	public function set minHeight(val:Number):Void
        // 	{
        // 		_minheight = val;
        // 		_rangeheight = _maxheight - _minheight;
        // 	}
        
        // 	public function get minHeight():Number
        // 	{
        // 		return _minheight;
        // 	}
        
        /*
        * 构造函数
        */
        function MyComponent()
        {
                
        }
        
        /* 方法
        * 初始化组件
        */
        function init(Void):Void
        {
                super.init();
        }
        
        /* 方法
        * 改变组件大小
        */
        function size(Void):Void
        {
                super.size();
                // 		handle.setSize();
        }
        
        /*
        * 建立组件的子项
        * ResizableWindow组件有一个子项要建立
        * 那就是使得Window可以变化的一个按钮
        */
        private function createChildren(Void):Void
        {
                super.createChildren();
                
                var resizeObj:Object = new Object();
                resizeObj.falseUpSkin = skinResize;
                resizeObj.falseOverSkin = skinResize;
                resizeObj.falseDownSkin = skinResize;
                handle = createClassObject(SimpleButton, "handle", 100,resizeObj);
                handle.tabEnabled = false;
                handle.onPress = startResize;
                handle.onRelease = stopResize;
                handle.onReleaseOutside = stopResize;
        }
        
        /*
        * 布局
        * 布置可控窗口大小按钮的位置
        */
        private function doLayout(Void):Void
        {
                super.doLayout();
                handle.move(width-handle.width, height-handle.height);
        }
        
        /*
        * 事件处理方法
        * 当按钮被按下,窗口的大小开始随着变化
        */
        private function startResize(Void):Void
        {
                // 		trace("start");
                this.useHandCursor=true;
                this._parent._oldx=this._parent._xmouse;
                this._parent._oldy=this._parent._ymouse;
                this._parent.onMouseMove = this._parent.resize;
        }
        
        /*
        * 事件处理方法
        * 当按钮被拖动,窗口的大小变化
        */
        private function resize(Void):Void
        {
                // 		trace("resize");
                var dx = _xmouse - _oldx;
                var dy = _ymouse - _oldy;
                if((width>minWidth && height>minHeight ) || (dx>0 && dy>0))
                setSize(width +dx, height +dy);
                _oldx=_xmouse;
                _oldy=_ymouse;
        }
        
        /*
        * 事件处理方法
        * 当按钮被释放,窗口的大小变化停止
        */
        private function stopResize(Void):Void
        {
                this.useHandCursor=false;
                delete this._parent.onMouseMove;
                this._parent.releaseFocus();
        }
        
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值