package { import fl.controls.Button; import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.display.Stage; import flash.events.MouseEvent; import flash.filters.DropShadowFilter; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; /** * ALert信息提示类<br>使用时先调用init()方法初始化舞台对象,然后调用show()方法传入需要提示的信息 * @author hfy 2011-10-19 */ public class Alert { //舞台对象 private static var stage:Stage; /** * 第一次使用Alert类的时候,调用该方法,为Alert初始化舞台对象 * @param stageReference 舞台对象 */ public static function init(stageReference:Stage):void { stage = stageReference; } /** * 调用该方法使用Alert * @param text 需要显示的提示信息 */ public static function show(text:String):void { //如果舞台为空,那么退出Alert,不做任何操作 if (stage == null) return; //如果text为null,退出Alert if(text==null) return; //定义ALert的sprite面板 var myAlert:Sprite = new Sprite(); //添加遮罩层 myAlert.addChild(createMask()); //添加信息提示框主体 myAlert.addChild(createPrompt(text)); //为alert面板注册事件 assignListeners(myAlert,null); //加载显示 stage.addChild(myAlert) } /** * 为Alert注册事件 */ private static function assignListeners(myAlert:Sprite, callback:Function):void { var Prompt:Sprite = myAlert.getChildAt(1) as Sprite; var OKbutton:* = Prompt.getChildByName("sure"); // Cause Alert to call specified function when alert has been closed if (callback != null) { function myFunction(myEvent:MouseEvent):void { OKbutton.removeEventListener(MouseEvent.CLICK, myFunction); closeAlert(myEvent); callback(); }; OKbutton.addEventListener(MouseEvent.CLICK, myFunction); } else { OKbutton.addEventListener(MouseEvent.CLICK, closeAlert); } } /** * 关闭Alert的提示框 */ private static function closeAlert(event:MouseEvent):void { var button:* = event.target; button.removeEventListener(MouseEvent.CLICK, closeAlert); var prompt:* = event.target.parent; prompt.removeEventListener(MouseEvent.CLICK, doStartDrag); prompt.removeEventListener(MouseEvent.CLICK, doStopDrag); var myAlert:Sprite = event.target.parent.parent; stage.removeChild(myAlert); } /** * Creates the mask for the Alert */ private static function createMask():Sprite { var mask:Sprite=new Sprite; mask.graphics.lineStyle(2,0x0099ff); mask.graphics.beginFill(0xffffff); mask.graphics.drawRoundRect(0,0,stage.width,stage.height,5); mask.graphics.endFill(); mask.alpha=0.6; return mask; } /** * 创建一个提示框sprite位于舞台中央。并显示提示信息和确定按钮。 * @param text 提示信息 */ private static function createPrompt(text:String):Sprite { var holder:Sprite = new Sprite; holder.name="holder"; //注册提示框的拖拽事件 holder.addEventListener(MouseEvent.MOUSE_DOWN, doStartDrag); holder.addEventListener(MouseEvent.MOUSE_UP, doStopDrag); //创建提示信息文本框和确定按钮 var textField:TextField=getTextField(text); var button:Button=getSureButton(); //创建提示框holder的graphice样式 GraphicePrompt(holder,textField); //设置文本框和按钮的坐标位置,并加载到显示界面 textField.x=(holder.width/2)-(textField.width/2); textField.y=26; button.x=(holder.width/2)-(button.width/2); button.y=holder.height-27; holder.addChild(textField); holder.addChild(button); //设置holder的显示坐标位置 holder.x = (stage.stageWidth/2)-(holder.width/2); holder.y = (stage.stageHeight/2)-(holder.height/2); return holder; } /** * 绘制信息提示框主体的显示样式 * @param holder 提示框的主体对象 * @param text 提示信息文本框 */ private static function GraphicePrompt(holder:Sprite,text:TextField):void { var myWidth:int = text.width+50; var myHeight:int = text.height+60; if (myWidth < 150) { myWidth = 150; } if (myHeight < 80) { myHeight = 80; } if (myHeight > stage.stageHeight) { myHeight = stage.stageHeight - 20; text.autoSize = TextFieldAutoSize.NONE; text.height = stage.stageHeight-80; } //holder.graphics.lineStyle(1,0,0); holder.graphics.beginFill(0xffffff); holder.graphics.drawRoundRect(0,0,myWidth,myHeight,20); holder.graphics.endFill(); var shap1:Shape=new Shape; var shap2:Shape=new Shape; shap1.graphics.beginFill(0x768f9a); shap1.graphics.drawRoundRectComplex(0,0,myWidth,20,10,10,0,0); shap1.graphics.endFill(); shap2.graphics.beginFill(0x899fa9); shap2.graphics.drawRoundRectComplex(0,21,myWidth,myHeight-21,0,0,10,10); shap2.graphics.endFill(); holder.addChild(shap1); holder.addChild(shap2); var tip:TextField=getTextField("Alert",true); tip.x=5; tip.y=0; holder.addChild(tip); //设置阴影效果 var shadow:DropShadowFilter = new DropShadowFilter; shadow.distance = 5; shadow.alpha=0.5; holder.filters = [shadow]; } /** * 生成一个textfield文本框 * @param text 提示信息 */ private static function getTextField(Text:String,bold:Boolean=false):TextField { var myTextField:TextField = new TextField(); //计算文本字符的长度 var length:Number=CalLength(Text); if(length>300){ myTextField.width=300; } else{ myTextField.width=length; } //字体显示为白色 myTextField.textColor = 0xffffff; myTextField.name = "textfield"; //允许多行显示 myTextField.multiline = true; myTextField.wordWrap=true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.CENTER; var format:TextFormat=new TextFormat; //format.font="幼圆"; if (bold) { format.bold=true; } myTextField.defaultTextFormat=format; myTextField.text=Text; return myTextField; } /** * 创建一个button按钮 */ private static function getSureButton():Button{ var button:Button=new Button; button.name="sure"; button.label="确定"; button.width=40; button.height=20; button.textField.height=20; return button; } /** * 计算文本字符的长度 * @param str 待计算长度的文本字符 */ private static function CalLength(str:String):Number{ var charNum:uint=0; for(var i:uint=0;i<str.length;i++){ //大于255则是汉字,汉字占两个字符 if(str.charCodeAt(i)>255){ charNum+=2; } else{ charNum++; } } //返回width return charNum*6+5; } /** * 鼠标拖拽事件 */ private static function doStartDrag(event:MouseEvent):void { if(event.target.name=="holder"){ event.target.startDrag(); } } private static function doStopDrag(event:MouseEvent):void { if(event.target.name=="holder"){ event.target.stopDrag(); } } } }
参考:
http://download.csdn.net/detail/hfangyu/3699219
看下评论