/************************************************************************************ * Tip提示框 * version 2.0 * athor: koaqiu * * from : 佛山/China * contact: koaqiul@2ego.com * blog: http://f358.com/blog/koaqiu ************************************************************************************ * 方法 * public function LoadXML(url):Void * 参数:url 可以为XML地址 也可以为 XML对象 * 说明:加载XML数据 * 此方法会触发 onData事件 * * public function ShowHelp(Void):Void * 说明: 在输出窗口显示简单帮助信息 * ************************************************************************************ * 属性 * dataProvider * 类型: 数组 * 说明: 由以下结构的对象组成 * obj.目标 String 要显示提示框的MC(推荐使用绝对路径) * obj.提示信息 String 要显示的信息 * obj.样式 String 自定义样式 * obj.可用 Boolean 是否可用 * * XMLPath * 类型: String * 说明: XML文件地址 重新设置后要调用 LoadXML 进行加载 * ************************************************************************************ * 事件 * onData(sccess) * 说明: 加载XML数据后触发 * * onShowTip(objData) * 说明: 显示提示框时触发 * * onHideTip(objData) * 说明: 隐藏提示框时触发 * ************************************************************************************ * 历史 * 2004-11-24 V2.0 升级为AS2.0 1.添加3个事件(onData,onShowTip,onHideTip) 2.新增可由外部XML文件读取数据 也可以直接给定XML对象 3.可以使用属性 dataProvider 实时修改数据 4.可以自定义提示框样式 方法:建立一个MC上面放置一个名称为tiptxt的动态文本框并制定其变量值为msgtxt 最后导出即可。) 5.支持全局设置和独立设置(必须使用XML) * 2003-09-30 V1.1.1 修改了2个BUG 谢谢 叶枫 * 2003-09-29 V1.1 修改函数“Show()”是TIP框出现位置固定为目标右下角; * 提供了2种显示方式; * 添加了注释。 * 2003-08-20 V1.0 原始版本 基本功能 ************************************************************************************/ //图标 [IconFile("ToolTip.png")] //事件 //XML数据加载完毕时 [Event("onData")] //显示提示框时 [Event("onShowTip")] //隐藏提示框时 [Event("onHideTip")] class com.Ejj.工具.ToolTip.ToolTip extends MovieClip { static var symbolName:String = "ToolTip"; static var symbolOwner:Object = com.Ejj.工具.ToolTip.ToolTip; var className:String = "ToolTip"; //属性定义 [Inspectable(name=XML地址,defaultValue="")] private var _xmlPath:String public function get XMLPath():String{return _xmlPath;} public function set XMLPath(newValue:String){_xmlPath=newValue;} [Inspectable(name=对象列表,defaultValue="")] private var oblist:Array; [Inspectable(name=消息,defaultValue="")] private var tiplist:Array; [Inspectable(name=显示帮助,defaultValue=false)] private var show_Help:Boolean; [Inspectable(name=字体,defaultValue="_sans",type="Font Name")] private var _font:String; [Inspectable(name=文字大小,defaultValue=12)] private var _font_szie:Number; [Inspectable(name=文字颜色,defaultValue="#000000",type="Color")] private var _font_color:Color; [Inspectable(name=边框颜色,defaultValue="#0000ff",type="Color")] private var _border_color:Color; [Inspectable(name=填充颜色,defaultValue="#ffffff",type="Color")] private var _fill_color:Color; [Inspectable(name=显示方式,defaultValue="普通",type="List",enumeration="普通,淡入淡出")] private var _show_type:String; [Inspectable(name=显示时间,defaultValue=4000)] private var _show_time:Number; [Inspectable(name=延迟时间,defaultValue=300)] private var _delay_time:Number; private var _show_style:String="默认"; // private var _dataProvider:Array=new Array(); [Bindable] public function get dataProvider():Array {return _dataProvider;} public function set dataProvider(newValue:Array){_dataProvider = newValue;} //私有变量 private var 显示状态:Number = 0; private var timer0:Number = 0; //private var timer1:Number = 0; private var timer2:Number = 0; private var t_mc:MovieClip;//用于碰撞检测 private var txt_mc:MovieClip;//TIP显示文本框 private var ShowTarget:MovieClip; private var 舞台宽度:Number; private var 舞台高度:Number; private var TopIndex:Number; //以下变量纯属为了编译不出错 private var tiptxt; private var bg:MovieClip; private var dispatchEvent:Function; private function ToolTip(){ 舞台宽度=Stage.width; 舞台高度=Stage.height; bg._visible=false; this._x=0; this._y=0; init(); } //初始化 private function init(Void):Void { mx.events.EventDispatcher.initialize(this); LoadXML(); if (show_Help){ShowHelp();} //创建MC "t_mc" 用于碰撞检测 t_mc = createEmptyMovieClip("t9998", 9998); with (t_mc) { lineStyle(1, 0, 0); beginFill(0, 0); lineTo(1, 0); lineTo(1, 1); lineTo(0, 1); lineTo(0, 0); endFill(); } t_mc.startDrag(true); //创建TIP显示文本框 txt_mc = createEmptyMovieClip("txt9999", 9999); //开始监听 timer0 = setInterval(check, 300, t_mc, this); } /********************** 公共方法 加载XML数据 参数 url 可以为XML地址 也可以为 XML对象 此方法会触发 onData事件 ***********************/ public function LoadXML(url):Void { _dataProvider.splice(0,_dataProvider.length); //清空数据 var tmpp:Object = new XML(); tmpp.ignoreWhite = true; tmpp.p = this; tmpp.onLoad = function(c) { if (c=true) { this.p.加载全局设置(tmpp.firstChild.childNodes[0]); this.p.加载数据(tmpp.firstChild.childNodes[1]); } else { } this.p.onData(c); }; if(typeof(url)=="string"){//给定XML文件地址 tmpp.load(url); }else if(typeof(url)=="object"){//给定XML对象 this.加载全局设置(url.firstChild.childNodes[0]); this.加载数据(url.firstChild.childNodes[1]); this.onData(true); }else if(_xmlPath.length>0){//参数为空 且在组件面板设置了XML文件地址 tmpp.load(_xmlPath); }else{////参数为空 且没有在组件面板设置了XML文件地址 for(var i:Number=0;i2) { for (var i = 1; ieval(pob._dataProvider[pob.TopIndex].目标).getDepth()) { pob.TopIndex = tmplist[i]; } } } //是否已经显示过了 显示过的不再显示 if (pob.oldTopIndex != pob.TopIndex) { clearInterval(pob.timer2); pob.txt_mc._alpha = 1; pob.txt_mc.tiptxt._visible = 0; pob.显示状态 = 0; } //显示TIP if (pob.显示状态 == 0) { pob.ShowTarget = eval(pob._dataProvider[pob.TopIndex].目标); pob.Show(pob._dataProvider[pob.TopIndex].提示信息); pob.oldTopIndex = pob.TopIndex; } // */ } else { clearInterval(pob.timer2); pob.Hide(pob); pob.显示状态 = 0; } } private function 画框(ob:MovieClip, 宽度:Number, 高度:Number, 粗细:Number, 边框颜色, 填充颜色):Void { 高度 += 10; 宽度 += 8; ob.clear(); ob.lineStyle(粗细, 边框颜色); ob.beginFill(填充颜色); ob.moveTo(8, 10); ob.lineTo(宽度, 10); ob.lineTo(宽度, 高度); ob.lineTo(8, 高度); ob.lineTo(8, 10); ob.endFill(); } private function 显示文字(ob:MovieClip, msg:String, 字体:String, 大小:Number, 颜色):Void { ob.createTextField("tiptxt", 1, 9, 11, 100, 100); with (ob.tiptxt) { _visible = 0; autoSize = "left"; var myformat = new TextFormat(); myformat.color = 颜色; myformat.font = 字体; myformat.size = 大小; text = msg; setTextFormat(myformat); //_visible=1; } } //创建 要显示的TIP框 并显示 private function create_tip(msg:String):Void { msg=replace(msg, "\\n", "\n"); if(_dataProvider[TopIndex].样式=="默认"){ if(_show_style=="默认"){ this.txt_mc=this.createEmptyMovieClip("txt9999", 9999); 显示文字(this.txt_mc, msg, this._font, this._font_szie, this._font_color); var 宽度:Number = this.txt_mc.tiptxt._width+4; var 高度:Number = this.txt_mc.tiptxt._height+4; 画框(this.txt_mc, 宽度, 高度, 1, this._border_color, this._fill_color); this.txt_mc.tiptxt._visible = true; }else{ //使用自定义样式 this.txt_mc=this.attachMovie(_show_style,"txt9999",9999,{_visible:true,_x:0,_y:0,msgtxt:msg}); } }else{ //使用自定义样式 this.txt_mc=this.attachMovie(_dataProvider[TopIndex].样式,"txt9999",9999,{_visible:true,_x:0,_y:0,msgtxt:msg}); } this.显示状态 = 1; //用于确定提示框的位置 此代码备用 //var point:Object={x:this.ShowTarget._x,y:this.ShowTarget._y}; //如果不是在_root 则计算它的舞台(全局)坐标 //if(this.ShowTarget._parent!=_root) // this.ShowTarget.localToGlobal(point); // 使用鼠标位置进行定位 var point:Object={x:_root._xmouse,y:_root._ymouse}; //判断TIP显示框是否在舞台内 并作适当的调整 //有个BUG Stage.height 的值会根据Stage.scaleMode 的值变动 if(point.x+this.txt_mc._width>舞台宽度){ point.x=舞台宽度-this.txt_mc._width-20; } if(point.y+this.txt_mc._height>舞台高度){ point.y=舞台高度-this.txt_mc._height-20; } this.txt_mc._x = point.x; this.txt_mc._y = point.y; switch (this._show_type) { case "普通" : this.txt_mc._alpha = 100; break; case "淡入淡出" : this.txt_mc.onEnterFrame = function() { if (this._alpha<100) { this._alpha += 10; } else { delete this.onEnterFrame; } }; break; default : this.txt_mc._alpha = 100; break; } onShowTip(); } private function Show(msg:String):Void { //显示TIP this.create_tip(msg); this.timer2 = setInterval(this.Hide, this._show_time, this,true); } //隐藏TIP private function Hide(ob:MovieClip,autoHide:Boolean):Void { clearInterval(ob.timer2); switch (ob._show_type) { case "普通" : ob.txt_mc._alpha = 1; ob.txt_mc.tiptxt._visible = 0; break; case "淡入淡出" : ob.txt_mc.onEnterFrame = function() { if (this._alpha>1) { this._alpha -= 10; } else { this._alpha = 1; this.tiptxt._visible = 0; delete this.onEnterFrame; } }; break; default : ob.txt_mc._alpha = 1; this.tiptxt._visible = 0; break; } if(ob.显示状态==1 or autoHide){ if(onHideTip==undefined) ob.onHideTip(); else onHideTip(); } ob.显示状态 = 2; } /*************************************** 公共方法 在输出窗口 显示简单帮助信息 ****************************************/ public function ShowHelp(Void):Void { trace("***************************************************"); trace("|Tip提示框 |"); trace("|version 2.0 |"); trace("|athor: koaqiu |"); trace("|from : 佛山/China |"); trace("|contact: koaqiul@163.com |"); trace("| |"); trace("|请将此组件放置到_root的最上层。或将此组件单独制 |"); trace("|作为一swf文件用loadMovie(tip.swf,9999)调用,以 |"); trace("|保证此组件会在最顶层。 |"); trace("***************************************************"); } /*********************** 私有方法 加载全局设置数据 参数 xml 为 XML对象 ***********************/ private function 加载全局设置(xml:XML):Void{ show_Help=Boolean(xml.childNodes[0].firstChild); _show_type=String(xml.childNodes[1].firstChild); _show_style=String(xml.childNodes[2].firstChild); _show_time=Number(String(xml.childNodes[3].firstChild)); _delay_time==Number(xml.childNodes[4].firstChild); } /******************** 私有方法 加载数据 参数 xml 为 XML对象 *********************/ private function 加载数据(xml:XML):Void{ for(var i:Number=0;i