AOL's Web Log

Life is like a box of chocolate , you never know what you gonna get .

原创 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();
        }
        
}

发表于 @ 2004年09月06日 13:55:00|评论(loading...)|编辑

新一篇: 椭圆形按钮的代码 | 旧一篇: 试一下高亮显示

评论

#hxhbluestar 发表于2004-09-06 13:57:00  IP: 218.81.101.*
不错!
#faster 发表于2004-09-08 12:52:00  IP: 218.18.64.*
不太明白怎么使用,能够解释一下么?
#AOL 发表于2004-09-12 20:39:00  IP: 218.1.190.*
把它做成组件, 就可以使用了 :)
#oydj 发表于2004-09-12 22:05:00  IP: 220.170.98.*
您好.我把此文转到了<flex开发者网络>
http://www.flexdn.com/bbs/showthread.asp?threadid=186
如有不妥,请联系MSN:xzskyweb@hotmail.com谢谢
#dfblb 发表于2005-04-19 21:08:00  IP: 221.231.51.*
不知道怎么使,能否友情给出一使用的范例?拜托(我知道你人很热情)。
#AOL 发表于2005-04-21 09:32:00  IP: 218.81.118.*
参考mx2004帮助里面一下组件的做法就知道了 :)
#BJSEEK 发表于2007-12-06 15:57:03  IP: 60.189.36.*
数据恢复可以分为RAID数据恢复服务器数据恢复。请问北京家数据恢复公司最专业?
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © AOL