adobe cs5 序列号
// April 23rd, 2010 // No Comments » // Adobe技术总汇, hack一下
Adobe CS5 序列号 1325-1558-5864-4422-1094-1126 1325-1958-5864-4422-1094-1178
// April 23rd, 2010 // No Comments » // Adobe技术总汇, hack一下
Adobe CS5 序列号 1325-1558-5864-4422-1094-1126 1325-1958-5864-4422-1094-1178
// March 18th, 2010 // 2 Comments » // AS3知识积累, Flex积累
ActionScript3使用Socket查看邮件介绍pop3命令和相关内容
什么是 POP3POP3 (Post Office Protocol 3) 即邮局协议的第 3 个版本,它规定怎样将个人计算机连接到 Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准, POP3 允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循 POP3 协议的接收邮件服务器,用来接收电子邮件的。
POP3 命令POP3 命令包括:USER username 认证用户名PASS password 认证密码认证,认证通过则状态转换APOP name,digest 认可一种安全传输口令的办法,执行成功导致状态转换,请参见 RFC 1321 。STAT 处理请求 server 回送邮箱统计资料,如邮件数、邮件总字节数UIDL n 处理 server 返回用于该指定邮件的唯一标识,如果没有指定,返回所有的。LIST n 处理 server 返回指定邮件的大小等RETR n 处理 server 返回邮件的全部文本DELE n 处理 server 标记删除,QUIT 命令执行时才真正删除RSET 处理撤消所有的 DELE 命令TOP n,m 处理 返回 n 号邮件的前 m 行内容,m 必须是自然数NOOP 处理 server 返回一个肯定的响应QUIT 希望结束会话。如果 server 处于”处理” 状态,则现在进入”更新”状态,删除那些标记成删除的邮件。如果 server 处于”认可”状态,则结束会话时 server 不进入”更新”状态 。
使用 telnet 连接 Winmail Server 收信例如:安装Winmail 的邮件服务器 IP 是 192.168.0.1(蓝色字体内容由客户端输入,红色字体内容是服务返回的)
telnet 119.119.119.212 110—————————– 使用 telnet 命令连接服务器 110 端口Trying 119.119.119.212…—————————— 正在连接服务器 110 端口Connected to 119.119.119.212.————————– 连接服务器 110 端口成功+OK Winmail Mail Server POP3 readyuser username—————————————— 输入用户名, username 为具体的用户名+OK—————————————————- 执行命令成功pass password—————————————— 输入用户密码,password 为具体的密码+OK 2 messages—————————————– 密码认证通过(-ERR authorization failed—————————– 密码认证失败)stat————————————————— 邮箱状态+OK 2 6415——————————————— 2 为该信箱总邮件数,6415 为总字节数list————————————————— 列出每封邮件的字节数+OK—————————————————- 执行命令成功,开始显示,左边为邮件的序号,右边为该邮件的大小1 537————————————————– 第 1 封邮件,大小为 537 字节2 5878————————————————- 第 2 封邮件,大小为 5878 字节.top 1————————————————– 接收第 1 封邮件+OK—————————————————- 接收成功, 返回第 1 封邮件头Return-Path: <test1@look.com>Delivered-To: test2@look.comReceived: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800From: test1@look.comTo: test2@look.comDate: Mon, 25 Oct 2004 14:24:27 +0800Subject: test mail.retr 1————————————————- 接收第 1 封邮件+OK—————————————————- 接收成功, 返回第 1 封邮件全部内容Return-Path: <test1@look.com>Delivered-To: test2@look.comReceived: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800From: test1@look.comTo: test2@look.comDate: Mon, 25 Oct 2004 14:24:27 +0800Subject: test mail
Hi, test2This is a test mail, you don’t reply it.
.dele 1————————————————- 删除第 1 封邮件+OK—————————————————- 删除成功dele 2————————————————- 删除第 2 封邮件+OK—————————————————- 删除成功quit————————————————— 结束会话+OK—————————————————- 执行命令成功
// February 11th, 2010 // No Comments » // AS3知识积累, Flex积累
【自动大小调整和对齐】
TextField.autoSize = TextFieldAutoSize.LEFT;
可选之值:
flash.text.TextFieldAutoSize.CENTER
flash.text.TextFieldAutoSize.LEFT
flash.text.TextFieldAutoSize.NONE
flash.text.TextFieldAutoSize.RIGHT
【指示文本字段是否自动换行】
TextField.wordWrap = true; //自动换行
【用程序手段滚动文字】
水平方向以像素为单位,而垂直方向以行做单位:
scrollV: 指出文字框可见区域的最顶行,可读写;
bottomScrollV: 指出文字框内最底端可见行,只读;
maxScrollV: scrollV的最大值,只读;
numLines: 定义多行文本字段中的文本行数,只读;
TextField.scrollV = field.maxScrollV; //滚动到最后一页
【响应滚动事件】
field.addEventListener(Event.SCROLL, onTextScroll);
【样式化文字的方法】
1. 使用HTML标签进行样式化;
2. 使用TextFormat对象;
3. 使用CSS.
例如: HTML是用<font>标签,TextFormat对象是设定font属性,而CSS是使用font-family属性的.
受支持的层叠样式表(CSS)属性和值,及其相应的ActionScript属性名称(小括号内):
color(color),display(display),font-family(fontFamily),font-size(fontSize),font-style(fontStyle),font-weight(fontWeight),kerning(kerning),leading(leading),letter-spacing(letterSpacing),margin-left(marginLeft),margin-right(marginRight),text-align(textAlign),text-decoration(textDecoration),text-indent(textIndent)
受支持的HTML实体: <(小于号: <), >(大于号: >), &(和: &), “(双引号: “), ‘(撇号,单引号: ‘)
其中样式对象的两种写法:
写法一:
var sampleStyle.:Object = new Object();
sampleStyle.color = “#FFFFFF”;
sampleStyle.textAlign = “center”;
css.setStyle(“.sample”, sampleStyle);
写法二:
var sampleStyle.:Object = {color: “#FFFFFF”, textAlign: “center”};
css.setStyle(“.sample”, sampleStyle);
【对用户输入的文字进行样式化】
使用defaultTextFormat属性,样式会施加至用户键入输入框的文字身上:
var formatter:TextFormat = new TextFormat();
formatter.color = 0x0000FF; //把文字变成蓝色
field.defaultTextFormat = formatter;
【对现有文字的一部分进行样式化】
TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
【设定文字框的字体】
例子:
HTML: field.htmlText = “<font face=’Arial’>Formatted text</font>”;
TextFormat: formatter.font = “Arial”;
CSS: P{ font-family: Arial; }
也可以使用以逗号隔开的字体清单: formatter.font = “Arial, Verdana, Helvetica”;
注意:
字体和字体群组不同.字体群组有三种: _sans,_serif以及_typewriter.
_sans群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier New这种字体.
【嵌入字体】
使用[Embed]后设标签.[Embed]后设标签应该出现在ActionScript文件中,处于类宣告之外.你可以内嵌TrueType字体或系统字体.内嵌TrueType字体时的语法:
[Embed(source="pathToTtfFile", fontName="FontName", mimeType="application/x-font-truetype")]
pathToTtfFile: ttf文件的路径,TrueType字体的路径可以是相对的,也可以是绝对的;
FontName: 字体名称;
内嵌系统字体的语法:
[Embed(systemFont="Times New Roman", fontName="Times New Roman", mimeType="application/x-font-truetype")]
fontName: 以相同名称作为实际系统字体名称.
注意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替 embedFonts设为true的TextField使用设备字体,什么都不会显示.如果embedFonts设为true,就无法指定以逗号相隔的字体清单.
【建立可以旋转的文字】
使用内嵌字体.当你旋转文字框时,设备字体就会消失.
【显示Unicode文字】
1. 从外部来源载入Unicode文字;
2. 假如你的编辑器支持Unicode(如 Flex Builder),则可以直接在ActionScript程序中使用该字符;
3. 使用Unicode转义字符,ActionScript里所有Unicode转义字符都以\u开头,后面再跟四位十六进制数字.
注意: 如果你想取得Unicode字符,在Windows下使用: 开始>所有程序>附件>系统工具>字符映射表.
【把Flash Player的焦点带给文字框】
stage.focus = field;
把焦点移除:
stage.focus = null;
注意: 当.swf文件首次载入至网页浏览器时,并没有焦点.因此,以程序的方式把焦点指定给Flash应用程序的一个元素前,必须先把焦点移至Flash Player.
【以ActionScript选取文字】
使用TextField.setSelection(beginIndex:int, endIndex:int):void
为了可以正常选取文字,文字框必须具有焦点:
stage.focus = field; //把焦点设给文字框
field.text = “This is example text”; //设定文字
field.setSelection(0, 4); //把”This”这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.
【在文字内设定安插点(游标位置)并访问游标位置的索引值】
可以使用TextField.setSelection()把起始和结尾的索引参数都设成相同值,在文字内设定游标位置(假设具有焦点):
field.setSelection(0, 0); //在第一个字符前摆放安插点
trace(field.caretIndex); //输出游标位置的索引值
【当文本字段受到选取或取消选取时给予响应】
获得焦点时: FocusEvent.FOCUS_IN
失去焦点时: FocusEvent.FOCUS_OUT
通过键盘(Tab键)把焦点移除时: FocusEvent.KEY_FOCUS_CHANGE
通过鼠标把焦点移除时: FocusEvent.MOUSE_FOCUS_CHANGE
FocusEvent 类有一个relatedObject属性.就FOCUS_IN事件而言,relatedObject属性是刚才拥有焦点的对象的引用地址;对于 FOCUS_OUT,KEY_FOCUS_CHANGE以及MOUSE_FOCUS_CHANGE事件,relatedObject属性是刚接收到焦点的对象的引用地址.
FOCUS_IN和FOCUS_OUT事件都是在焦点改变后发生的,所以两者都是不可取消的事件.对于KEY_FOCUS_CHANGE和MOUSE_FOCUS_CHANGE事件,可以使用FocusEvent.preventDefault()方法取消默认行为:
field.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);
private function onKeyFocus(event:FocusEvent):void {
if(field.text == “”) {
event.preventDefault(); //当field没有任何文字前,不允许使用Tab键把焦点移除
}
//event.relatedObject就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址
}
// February 11th, 2010 // 1 Comment » // AS3知识积累, Flex积累
【改变输出swf的尺度,背景颜色或帧频】
在”Navigator”窗框里右键你的项目>选中”Properties”>选中”ActionScript. Compiler”>在”Additional compiler arguments”里输入你所需要的命令
如想改变背景颜色,请输入: -default-background-color 0xffffff
【鼠标坐标】
mouseX mouseY
【检查变量类型并返回布尔值】
is
【检查变量类型并返回类型】
typeof
【检查对象类型并返回该对象】
as
【是数字但不是有效数字问题】
var quantity:Number = 15 – “rabbits”;
trace(typeof quantity); //显示: “number” , 但它是NaN (not a number)
trace(quantity is Number); //true
trace(quantity != NaN); //false
//使用isNaN()函数检测:
isNaN(quantity); //true
//检测变量是否内含有效数字:
!isNaN(quantity); //false
【取消默认的严格编译模式】
在”Navigator”窗框里右键你的项目>选中”Properties”>选中”ActionScript. Compiler”>取消”Enabel compile-time type checking”选项
【基元数据类型和复杂数据类型好比”值类型”和”引用类型”】
基元数据类型类似按值传递:
var intOne:int = 1;
var intTwo:int = 1;
trace(intOne == intTwo); //true
【复杂数据类型类似按引用传递】
var arrayOne:Array = new Array(“a”, “b”);
var arrayTwo:Array = arrayOne;
trace(arrayOne == arrayTwo); //true
//———————————–
var arrayOne:Array = new Array(“a”, “b”);
var arrayTwo:Array = new Array(“a”, “b”);
trace(arrayOne == arrayTwo); //false
【优化逻辑AND(&&)和OR(||)的小知识】
对于逻辑And(&&):
除非条件表达式的前半部分为真,否则,ActionScript不会再去求算逻辑AND运算符的后半部.如果前半部为假,整个条件表达式一定为假,所以再去求算后半部就没效率了.
对于逻辑OR(||):
除非条件表达式前半部为假,否则,ActionScript不会再去求算逻辑OR运算符的后半部,如果前半部为真,整个条件表达式一定为真.
总结:使用逻辑AND(&&)时,把结果最可能为false的表达式放到前面;使用逻辑OR(||)时,把结果最可能为true的表达式放到前面.
【Timer类注意事项】
不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.
【private,protected,internal,public访问权限】
private:只能在类本身内部访问,按惯例,命名私有成员时以下划线”_”开头;
protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线”_”开头;
internal:可以由类本身或者相同包内的任何类访问;
public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.
【一个函数具有未知个数的参数,用arguments对象或”…(rest)”符号访问它的参数】
注意:使用”…(rest)”参数会使 arguments 对象不可用;
private funciton average():void{
trace(arguments.length); //输出参数的个数
// arguments的类型是:object,但可以像访问数组一样去访问它
trace(arguments[1]); //输出第二个参数
}
private function average(…argu):void{
trace(argu[1]); //输出第二个参数,argu参数名是自定义的.
}
【错误处理try,catch,finally】
private function tryError():void{
try {
trace(“测试开始-try”);
throwError();
}catch(errObject:Error) {
trace(“错误信息:” + errObject.message);
trace(“测试结束-catch”);
return;
}finally{
trace(“虽然catch里已经有return方法,但位于return方法后面的finally里的代码依然会被执行.其实无论return方法是在try里,还是catch里,finally里的代码始终会被执行”);
}
trace(“前面已经有return了,此处是不会再执行的.除非没有抛出错误,以使catch里的代码没有被执行”);
}
private function throwError():void{
throw new Error(“抛出错误”);
}
【for…in与for each…in的区别】
与for…in循环不同的是,for each…in循环中的迭代变量包含属性所保存的值,而不包含属性的名称(或主键,索引).
【命名包路径的小技巧】
使用相应于拥有者和相关项目的包名称会比较好.按惯例来讲,包名称的开头应该是逆向的网址名称.例如,如果Example Corp(examplecorp.com)写了一些ActionScript3.0类,就会把所有类放在com.examplecorp包内(或者 com.examplecorp的子包内).如此一来,如果英国有另一家Example Corp(examplecorp.co.uk)也写了一些ActionScript3.0类,只要使用包uk.co.examplecorp,就可确保唯一性.
当类属于特定应用程序的一部分时,就应该放在该应用程序特定的子包内.例如,Example Corp可能有个应用程序名叫WidgetStore.如果WidgetStore应用程序使用一个名为ApplicationManager的类,则此类就应该放在com.examplecorp.widgetstore包内,或者位于该包的子包内.
按惯例来说,包名称的开头是小写字母.
【隐式的取出方法(getter)和设定方法(setter)】
public function get count():uint {
return _count;
}
public function set count(value:uint):uint {
if(value < 100){
_count = value;
}else {
throw Error();
}
}
【确保类是绝不会有子类,使用final】
final public class Example{}
【super关键字的使用】
super(); //父类的构造函数,只能在类实例构造函数内部使用
super.propertyName; //调用父类的属性,属性需要声明为public或protected
super.methodName(); //调用父类的方法,方法需要声明为public或protected
【建立常数,使用关键字const而不是var】
static public const EXAMPLE:String = “example”;
【检测播放器版本】
flash.system.Capabilities.version
对于8.5版以前的任何Flash Player版本,这种方法都不适用.
【判断客户端系统】
flash.system.Capabilities.os
【检测播放器类型】
flash.system.Capabilities.playerType
可能的值有:
“StandAlone”,用于独立的 Flash Player
“External”,用于外部的 Flash Player 或处于测试模式下
“PlugIn”,用于 Flash Player 浏览器插件
“ActiveX”,用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件
【检测系统语言】
flash.system.Capabilities.language
【判断用户是否启用了IME(输入法编辑器)】
flash.system.IME.enabled
【检测屏幕的分辨率】
flash.system.Capabilities.screenResolutionX
flash.system.Capabilities.screenResolutionY
【把弹出窗口居中的算法】
X = (舞台宽/2)-(窗口宽/2)
Y = (舞台高/2)-(窗口高/2)
【控制影片配合Player的方式,包括缩放问题】
stage.scaleMode
可供选择值:flash.display.StageScaleMode
【舞台的对齐方式】
stage.align
可供选择值:flash.display.StageAlign
【隐藏Flash Player的右键菜单】
stage.showDefaultContextMenu = false;
【检测系统是否具有音频功能】
flash.system.Capabilities.hasAudio
【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】
flash.system.Capabilities.hasMP3
【检测播放器能 (true) 还是不能 (false) 播放流式视频】
flash.system.Capabilities.hasStreamingVideo
【检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行】
flash.system.Capabilities.hasEmbeddedVideo
【检测播放器能 (true) 还是不能 (false) 对视频流(如来自 Web 摄像头的视频流)进行编码】
flash.system.Capabilities.hasVideoEncoder
【显示 Flash Player 中的”安全设置”面板】
flash.system.Security.showSettings();
可供选择项:flash.system.SecurityPanel
【让其它域的.swf访问本域的.swf】
在本域的.swf文件里加上:flash.system.Security.allowDomain()
或者使用安全策略文件”crossdomain.xml”.在Flash 8以前,这个文件必须放在.swf所在域的根目录,现在,你可以使用flash.system.Security.loadPolicyFile(),指定安全策略文件所在的位置.拒绝任何域的做法是在<cross-domain-policy>标签内什么也不填,安全策略文件也支持通用字符 “*”:
<?xml version=”1.0″?>
<!– http://www.mydomain.com/crossdomain.xml –>
<cross-domain-policy>
<allow-access-from domain=”www.riahome.cn ” />
<allow-access-from domain=”*.Y-boy.cn” />
<allow-access-from domain=”210.38.196.48″ />
<allow-access-from domain=”*” />
</cross-domain-policy>
【数字的不同进制之间的转换】
parseInt(str:String, radix:uint = 0):Number 返回十进制的数,参数radix表示要分析的数字的基数.如果省略radix,就默认为10,除非字符串的开头是”0x”,”0X”或”0″:
trace(parseInt(“0×12″)); //设定radix为16,输出:18
trace(parseInt(“017″)); //设定radix为8,输出:15
或者使用Number,uint和int对象的toString(radix)方法.
【使用Math.round()对一个数取整,四舍五入】
Math.round()
trace(Math.round(204.499)); //输出:204
trace(Math.round(401.5)); //输出:402
【使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分】
trace(Math.floor(204.99)); //输出:204
【使用Math.ceil()对一个数向上取整,只要小数部分不为零,整数部分就加1】
trace(Math.ceil(401.01)); //输出:402
【产生一个随机数】
使用Math.random()产生一个伪随机数n,其中 0 <= n < 1
【把数字取至最近的小数点位,即指定精确度】
1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;
2. 让输入值除以步骤1所选的数字(此例为0.01);
3. 使用Math.round()把步骤2所计得的值取成最近的整数;
4. 把步骤3所得的结果乘以步骤2用于除法的那个值.
例如,要把90.337取成两个小数点位数,可以使用:
trace(Math.round(90.337/0.01)*0.01); //输出:90.34
【把数字取成一个整数的最接近倍数值】
例1,这样会把92.5取成5的最近倍数值:
trace(Math.round(92.5/5)*5); //输出:95
例2,这样会把92.5取成10的最近倍数值:
trace(Math.round(92.5/10)*10); //输出:90
【在指定数值范围内获得随机数】
//可取范围:[min, max]
private function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max – min + 1)) + min;
return randomNum;
}
应用例子:
模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);
模拟投骰子,即希望得到随机六个值: randRange(1, 6);
为避免被缓存而需要产生一个独一无二的数字追加在URL尾端,通常最佳方法是取得当前毫秒数.
【弧度(radian)与度数(degree)之间的转换】
从弧度转为度数: degrees = radians * 180 / Math.PI
从度数转为弧度: radians = degrees * Math.PI / 180
【计算两点之间的距离】
勾股定理: c2 = a2 + b2
假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:
var c:Number = Math.sqrt(Math.pow(mc1.x – mc2.x, 2) + Math.pow(mc1.y – mc2.y, 2));
【模拟圆周运动】
已知圆心o(x0, y0),半径r和弧度angle,求圆上任意一点P(x, y)的坐标:
x = x0 + (Math.cos(angle) * r);
y = y0 + (Math.sin(angle) * r);
注意:舞台的x轴正方向水平向右,y轴正方向垂直向下.
【模拟椭圆运动】
已知圆心o(x0, y0),长轴a,短轴b以及弧度angle,求圆上任意一点P(x, y)的坐标:
x = x0 + (Math.cos(angle) * a);
y = y0 + (Math.sin(angle) * b);
【华氏温度和摄氏温度之间的转换】
华氏温度 = 摄氏度数 * 9 / 5 + 32
摄氏温度 = (华氏度数 – 32) * 5 /9
【公斤与磅之间的转换】
公斤 = 磅 * 2.2
磅 = 公斤 / 2.2
【向数组尾端添加元素】
var array:Array = new Array();
array.push(“a”, “b”);
//向数组尾端添加单一元素也可以这样:
array[array.length] = “c”;
//如果以索引设定的元素不存在,数组本身会自动扩展以包含足够的元素数目.介于中间的元素会被设为undefined:
array[5] = “e”;
trace(array[4]); //输出: undefined
【向数组开端添加元素】
var array:Array = ["a", "b"];
array.unshift(“c”, “d”);
trace(array); //输出: c,d,a,b
【删除数组中第一个元素并返回该元素,使用shift()方法】
var letters:Array = new Array(“a”, “b”, “c”);
var firstLetter:String = letters.shift();
trace(letters); //输出: b,c
trace(firstLetter); //输出: a
【删除数组中最后一个元素并返回该元素的值,使用pop()方法】
var letters:Array = new Array(“a”, “b”, “c”);
trace(letters); //输出: a,b,c
var letter:String = letters.pop();
trace(letters); //输出: a,b
trace(letter); //输出: c
【删除数组中的元素,给数组添加新元素并返回删除的元素,使用splice()方法】
splice(startIndex:int, deleteCount:uint, … values):Array
startIndex: 一个整数,它指定数组中开始进行插入或删除的位置处的元素的索引;
deleteCount: 一个整数,它指定要删除的元素数量;
… values: 用逗号分隔的一个或多个值的可选列表或数组,此列表或数组将插入到此数组中由 startIndex 参数指定的位置.
【查找数组中第一个相匹配的元素】
var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = “b”;
for(var i:int = 0; i < array.length; i++) {
if(array[i] == match) {
trace(“Element with index ” + i + ” found to match ” + match);
//输出: Element with index 1 found to match b
break;
}
}
【查找数组中最后一个相匹配的元素】
var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = “b”;
for(var i:int = array.length – 1; i >= 0; i–) {
if(array[i] == match) {
trace(“Element with index ” + i + ” found to match ” + match);
//输出: Element with index 5 found to match b
break;
}
}
【把字符串转成数组】
使用String.split()方法:
var list:String = “I am YoungBoy.”;
var words:Array = list.split(” “); //以空格作为分隔符将字符串切割
trace(words); //输出: I,am,YoungBoy.
【把数组转成字符串】
使用String.join()方法:
var myArr:Array = new Array(“one”, “two”, “three”);
var myStr:String = myArr.join(” and “);
trace(myArr); //输出: one,two,three
trace(myStr); //输出: one and two and three
【使用对象数组处理相关数据】
var cars:Array = new Array();
cars.push({make:”Mike”, year:1997, color:”blue”});
cars.push({make:”Kelly”, year:1986, color:”red”});
for(var i:int = 0; i < cars.length; i++) {
trace(cars[i].make + ” – ” + cars[i].year + ” – ” + cars[i].color);
}
//输出:
// Mike – 1997 – blue
// Kelly – 1986 – red
【在数组中获取最小或最大值】
var scores:Array = [10, 4, 15, 8];
scores.sort(Array.NUMERIC);
trace(“Minimum: ” + scores[0]);
trace(“Maximum: ” + scores[scores.length - 1]);
【使用for … in语句读取关联数组元素】
var myObject:Object = new Object();
myObject.name = “YoungBoy”;
myObject.age = 20;
for(var i:String in myObject) {
trace(i + “: ” + myObject[i]);
}
//输出: name: YoungBoy
// age: 20
注意: for … in循环不会显示对象所有的内建属性.例如,循环会显示执行期间新增的特殊属性,但是,不会列出内建对象的方法,即使都是储存在对象属性内.
【AVM(ActionScript. Virtual Machine,虚拟机)和渲染引擎(Rendering Engine)】
AVM负责执行ActionScript程序,而渲染引擎则是把对象绘制在显示器上.
【指出容器的显示清单中有多少显示对象】
每个容器都有numChildren属性.
【把项目新增至显示清单】
addChild(child:DisplayObject)
addChildAt(child:DisplayObject, index:int)
index: 添加该子项的索引位置.如果指定当前占用的索引位置,则该位置以及所有更高位置上的子对象会在子级列表中上移一个位置.
【从显示清单中移除项目】
removeChild(child:DisplayObject)
removeChildAt(index:int)
index: 要删除的 DisplayObject 的子索引,该子项之上的任何显示对象的索引位置都减去1.
如果想移除窗口所有子元件,可以结合removeChildAt(),numChildren属性以及for循环.因为每次一个子元件被移除时,索引位置都会变化,所以,有两种方法可以处理所有子元件的移除:
1. 总是移除位置0的子元件;
2. 倒过来移除子元件,也就是从尾端开始.
【更改现有子项在显示对象容器中的位置】
setChildIndex(child:DisplayObject, index:int):void
可能用到的方法:
返回 DisplayObject 的 child 实例的索引位置: getChildIndex(child:DisplayObject):int
返回位于指定索引处的子显示对象实例: getChildAt(index:int):DisplayObject
注意: 当子元件移到低于它现在所在位置的索引时,那么,从标的索引起,直到子元件索引前面的那个索引的所有子元件都会令其索引增加1,而该子元件就会指定至标的索引.当子元件移到较高索引时,从该子元件索引之上的那个索引起,直到标的索引的所有子元件都会令其索引往下减1,而该子元件就会指定至标的索引值.
【关于TextField以垂直方式把文字摆在按钮表面中心点的小技巧】
textField.y = (_height – textField.textHeight) / 2;
textField.y -= 2; //减2个像素以调整偏移量
【外部.swf影片载入和互动】
1. 监听init事件;
2. 透过content属性存取所载入的影片.
当所载入的影片做好足够的初始化工作,使其方法和属性可以接受互动时,init事件就会被发起.只有在载入器发起init事件后,才能控制影片.所载入的影片还没初始化就试着与它互动,是会产生执行期间错误的.
_loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit); //当载入的.swf的属性和方法可用时
_loader.load(new URLRequest(“ExternalMovie.swf”));
private function handleInit(event:Event):void {
var movie:* = _loader.content;
trace(movie.getColor());
movie.setColor(0xFF0000);
}
【TextField有两种类型:动态(dynamic)和输入(input),默认值为动态.改变TextField类型方法】
field.type = TextFieldType.INPUT; //selectable属性默认值为true
flash.text.TextFieldType.INPUT和flash.text.TextFieldType.DYNAMIC
【过滤文字输入】
TextField.restrict = “此处为可输入的内容”;
field.restrict = “^此处为禁止输入的内容”;
restrict属性支持一些类似正则表达式的样式:
field.restrict = “a-zA-z”; //只允许大小字母
field.restrict = “a-zA-z “; //只允许字母和空格
field.restrict = “0-9″; //只允许数字
field.restrict = “^abcdefg”; //除了小写字母abcdefg不允许外,其它都允许
field.restrict = “^a-z”; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母
field.restrict = “0-9^5″; //只允许数字,但5例外
让restrict字符包含具有特殊意义的字母(例如-和^):
field.restrict = “0-9\\-”; //允许数字和破折号
field.restrict = “0-9\\^”; //允许数字和^
field.restrict = “0-9\\\\”; //允许数字和反斜杠
你也可以使用Unicode转义序列,指定允许的内容.例如:
field.restrict = “^\u001A”;
注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.
【设定输入框的最大长度】
TextField.maxChars:int
【向TextField追加内容】
TextField.appendText(text:String):void
与通过对 text 属性使用加法赋值来连接两个字符串(例如 field.text += moreText)相比,此方法的效率更高.
【显示HTML格式的文字】
TextField.htmlText = “<b>Html text</b>”;
支持的HTML标签集有: <b>,<i>,<u>,<font>(有face,size以及color属性),< p>,<br>,<a>,<li>,<img>以及<textformat>(有 leftmargin,rightmargin,blockindent,indent,leading以及tabstops属性,相应于 TextFormat类的同名属性)
【缩减空白】
TextField.condenseWhite = true;
删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.
注意: 在设置 htmlText 属性之前设置 condenseWhite 属性
// January 24th, 2010 // No Comments » // AS3知识积累, javascript and CSS
TestData.as
package {
import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.utils.Timer;
import flash.external.ExternalInterface;
public class TestDate extends Sprite
{
private var i:int=0;
private var timer:Timer=new Timer(1000,60);
internal var jsReady:Boolean;
internal var aa:String =”hi”;
private var output:TextField=new TextField();
public function TestDate()
{
this.addChild(this.output);
this.timer.addEventListener(TimerEvent.TIMER,timerHandler);
this.timer.start();
this.output.appendText(‘开始时间’+”\n”);
this.output.autoSize=’12px’;
}
private function timerHandler(event:TimerEvent):void{
jsReady = new Boolean(ExternalInterface.call(“JSReady”,aa));
this.output.appendText(“runing:”+(i++)+”\n”);
if(jsReady){
ExternalInterface.addCallback(“sayHello”,sayHello);
ExternalInterface.call(“setSwfReady”,true);
if(ExternalInterface.available)ExternalInterface.call(“callAS”,”");
this.timer.stop();
}
}
public function sayHello(txt:String):void{
this.output.appendText(“JS: “+txt+”\n”);
}
}
}
javascript
<script language="JavaScript" type="text/javascript">
var jsReady=false;
var swfReady=false;
function atReady(){
jsReady=true;
}
function JSReady(){
return jsReady;
}
function setSwfReady(ready){
swfReady=ready;
}
function callAS(){
if(swfReady){
TestDate.sayHello(“Hello,World”);
}
}
function show(str){
document.getElementById(“show”).innerHTML=”test:”+str;
}
</script>
// January 11th, 2009 // No Comments » // Flex积累
设置visible属性为false。但这样做还是会有问题:组件仍然占用原来的位置。
同时使用includeInLayout属性为false解决占位。
<mx:Button label=”hide text”
click=”myText.visible=false;
myText.includeInLayout=false;” />
<mx:Text id=”myText” text=”hello,
this text will be hidden or shown,
depending on the buttons” />
<mx:Button label=”show text”
click=”myText.visible=true;
myText.includeInLayout=true;” />
</mx:Application>
// December 31st, 2008 // No Comments » // AIR实践
#.隐藏标题栏
先把#-app.xml中的标签值设置成none
么mxml里设置showTitleBar=”false”
#.隐藏状态栏
showStatusBar=”false”
#.NativeWindow类的常用方法:
最大化:maximize() ;
恢复: restore();
最小化:minimize() ;
关闭:close();
拖动窗口:startMove();
改变大小:startResize();
置前:alwaysInFront = true / false
#.Flex中AIR透明背景
1.打开同名app.xml
2.修改none
3.修改
true 4.设置WindowedApplication中showFlexChrome=”false”
#.自动启动
NativeApplication.nativeApplication.startAtLogin = true;
// December 31st, 2008 // No Comments » // Flex积累, 电脑知识
Flash,Flex,AS3中遍历对象的属性和方法
var xml:XML = flash.utils.describeType(this);
这里的this 可以换成其他的对象 什么button canvas 自己定义的类 自己去尝试
package
{
public class testClass
{
private var _className:String;
public function get className():String{
return _className;
}
public function set className(value:String):void{
_className = value;
}
}
}
var obj:testClass = new testClass();
var xml:XML = flash.utils.describeType(obj);
trace(xml.toXMLString());
输出结果
// December 22nd, 2008 // No Comments » // Flex积累
打开网址: navigateToURL(new URLRequest(’http://www.e-snowlife.com’),’_blank’)
页面重载: navigateToURL(new URLRequest(”javascript:location.reload();”),”_self”)
关闭浏览器:navigateToURL(new URLRequest(”javascript:window.close()”),”_self”);
编译as -keep-generated-actionscript
最上层 parent.setChildIndex(this,parent.numChildren-1);
随机颜色 :lbl.setStyle(’color’, 0xffffff*Math.random());
mxmlc -link-report=report.xml Main.mxml
mxmlc -load-externs=report.xml ChartModule.mxml
DataGrid自适应高度:dg.height=dg.measureHeightOfItems(0,dg.dataprovider.length)+dg.headerHeight+2;
+2 for 1 pixel border at top and bottom
判断数据类型:getQualifiedClassName(数据)
复制ArrayCollection:(From: http://blog.shiue.net/?p=490
)
//dummy solution( well, it works )
var bar:ArrayCollection = new ArrayCollection();
for each ( var i:Object in ac ){
bar.addItem( i );
}
// fantastic ! //
var bar:ListCollectionView = new ListCollectionView( ListCollectionView( ac ).list );
Alert背景透明:
Alert{
modalTransparency:0.0;
modalTransparencyBlur:0;
}
No Dead space in TabNavigator: paddingTop:0
如何限制TextInput中的输入。其实文本输入控件TextInput和TextArea都有一个restrict属性,它可以控制TextInput 的输入。这个东西挺有用,可以防止输入恶意字符串。不过Flex 帮助文档中对这个属性介绍的不够全面,经过我实验N次,总结出了几条新的经验:
1.如果你想要控制用户只能输入字母和数字,就这样写:restrict=”a-zA-Z0-9″。帮助中只给出了一个例子说”a-z”就是只允许输入小写字母,但是没有说如何多重限制,自己实验了一下,终于成功。你按照我上面写的那样做就可以多重限制了,中间不用加空格,我实验过了。
2.帮助文档中写了“^”符号可以限定不允许输入的字符串,比如”^0″就是不允许输入0。同样,帮助中也没有说明如何限定多个字符。实验结果如下:想要控制多个字符的时候需要加括号,这样歇restrict=”^(’;:)”,就可以限定多个字符了。另外,你想控制的字符有<>这样在 MXML中有特殊意义的字符的话,请转换成 < 的形式。至于每个符号的编码是怎么样的,请打开DreamWeaver,在代码编辑器中输入&,然后查看代码提示,方便又快捷!
三.DataGrid的labelFunction。我需要在DataGrid中现实时间,但是后台传回的是格林威治时间,很长,我得需要格式化,这就要用到 labelFunction 属性。这个属性的值是一个函数,这些都在帮助文档中有说明,我就不多说了,我想说的是如何用这个东西。先说一下这个函数需要的两个参数:item:类型 Object,column:类型DataGridColumn。其中item保存的是显示在DataGrid中的每一个对象的引用,而column表示的就是当前列,这个column好像没什么用。我一直以为必须要用到column才可以,结果总是显示错误。最后终于成功。代码如下:
private function formatLabel(item:Object,column:DataGridColumn):String
{
return df.format(item.dates);// df是一个DateFormatter,item中
//的dates放的是格林威治时间
}
// December 12th, 2008 // No Comments » // Flex积累
最近在做一个大型的项目,了解了一下模块化开发的知识,以下这篇文章感觉不错,所以拿来和大家一起分享。
示例源码
你可以下载关于这个例子的压缩文件:点击这里下载。
模块(Modules)
模块(Module)是创建大型Flex应用程序的一个解决方案,它允许你将你的用户接口分割成许多分散的有各自用途的小块。例如(下面出自Flex 2的文档),一个保险公司可能有数百个表单——针对于各个领域的,针对各种请求类型,以及针对各种应用等等。创建一个包含所有这些表单的Flex应用程序 将会产生一个巨大SWF文件,还会有不少问题:
应用程序越大开发过程越复杂;
应用程序越大测试过程越复杂;
应用程序越大部署过程越复杂;
SWF文件越大加载时间越长
示例程序基于Flex 2文档中的一个程序,但是我将它做了一些更改来说明几个常见的问题。这个例子展示了一个主程序和其它三个共享公有数据的模块(Module)。
其中一个设计要素是一个接口的使用,这个接口实质上是接口实现者和使用者之间的一个契约。这个例子将会说明我所说的意思。模块(Module)的接口部分 虽然不是必须的但是却可以大大简化以后的开发和维护。比如,如果开发人员有一个小组负责报告部分,另一个小组负责图表部分,如果它们一开始用了接口,那么 只要有需要,接口的实现就可以做足够多的变形而不会影响到工程结果。接口在模块(Module)中还扮演另外一个角色,我在下文中将会揭示这点。
模块(Module)是以<mx:Module>代替<mx:Application>作为根标签的MXML文件(或 ActionScript文件)。你可以将带有<mx:Module>标签的作为一个程序来看,但是它不能运行。
这个示例有一个主程序文件以及带有一个接口的两个模块。打开主程序文件你会看到:
<mx:Panel x=”187″ y=”41″ width=”500″ height=”500″ layout=”absolute” title=”Module: {moduleName}”>
<mx:ModuleLoader id=”currentModule” ready=”readyModule(event)”
width=”100%” height=”100%” />
</mx:Panel>
第一个Panel包含了控制示例中模块(Module)加载和卸载的RadioButtons。第二个Panel是使 用<mx:ModuleLoader>标签加载模块(Module)的地方。注意那个id为currentModule的 ModuleLoader,它有一个关于ready事件的事件处理器。当模块SWF文件加载了足够多可以开始使用的时候,ModuleLoader 就会分派ready事件(或者说ModuleEvent.READY)。
这里有一个readyModule函数,它在<mx:Script>块中:
var ichild:IExpenseReport = ml.child as IExpenseReport;
if( ichild != null ) {
ichild.expenseReport = expenses;
}
}
注意ModuleLoader的child属性是如何转换为IExpenseReport类的。IExpenseReport是一个所有模块 (Module)都实现了的接口。只要每个模块都实现了这个接口,它就可以很容易适应于应用程序。换句话说,想象一下当你需要创建另一个表单或者报告的时 候它的用途。并不需要更改主程序为新模块添加IF语句,你只要在新模块中实现IExpenseReport接口它就可以在程序中完美地运行。
IExpenseReport接口是:
程序代码
每个模块(Module)都实现这个接口,定义各自的名为expenseReport的set函数。下面是ChartModule的根标签和接口IExpenseReport的实现:
public function set expenseReport( ac:ArrayCollection ) : void
{
expenses = ac;
}
]]></mx:Script>
…
</mx:Module>
让我们回到主程序,RadioButton的click事件会卸载任何当前已加载的模块然后加载一个新的模块。下面是ChartModule的RadioButton标签:
程序代码
这个click事件会调用上面列出的readyModule事件。
编译并运行程序
如果你使用了Flex Builder 2,请确定更改了项目的Properties将模块(Module)作为”Applications”包含进来。这样Flex Builder 2回将它们编译进SWF文件并且放进bin文件夹中。
Flex Builder注意:要创建一个使用模块(Module)的工程,请使用工程的Properties将模块文件作为”Applications”。这会使得他们被编译进SWF文件。
一旦SWF文件被创建你就可以运行主程序并点击RadioButtons在模块(Module)之间切换。
Flex Builder注意:Flex Builder并不会保存任何关于模块(Module)和主程序的从属信息。只要你对一个模块(Module)作了更改,你就可能需要重新编译主程序或其它从属的模块(Module)。
将SWF文件最优化
如果你查看一下主程序的SWF文件和模块(Module)的SWF文件的话,你会发现它们的大小差不多。这就说明,模块的SWF和主程序SWF中有很多同样的组件定义。
Flash Player并不会保存元件(symbol)的副本。例如,如果主程序有一个Button组件而一个模块(Module)也有一个Button组件,Flash Player就不会从模块中加载Button了,因为它已经在主程序中有定义了。
使用-link-report=report.xml编译主程序,这样会创建一个链接到主程序的包含所有元件信息的文件。然后在编译模块(Module)的时候会使用那个report.xml文件。
程序代码
当ChartModule被编译的时候,所有在report.xml文件中列出的元件将会在它的SWF中省略。当我不使用report.xml文件编译 ChartModule.swf的时候,它的大小是202K。而当我使用report.xml文件的时候,SWF的大小只有68K。这大大减少了模块 (Module)的加载时间。
在文章的开始将到模块(Module)的时候,我提过接口有另一个作用。假设你没有使用接口而是在主程序中引用模块的类。当你运行link-report 的时候,你的模块类将会出现在report.xml中。当你使用使用link-report编译模块(Module)的时候你的模块并不会包含在它自己的 SWF中!起初这并不会成为一个问题,尽管主程序由于包含了模块的定义而变得很大。然而,当你更改你的模块的时候发生了什么才是重要的。如果你没有重新编 译主程序,你主程序的SWF文件将会包含模块(Module)旧的定义——而不是你已经更改过的。
如果你决定使用这个技术来减小模块(Module)的大小,那么就使用接口来确保终端用户使用的总是模块(Module)的最新版本。
Flex Builder注意:Flex Builder在一个工程里没有办法做到这些。如果你确定你将要创建一个使用模块(Module)的工程,可以考虑一下将公共的类和接口(包括event 类)放到一个SWC(Flex Library Project)中然后将模块(Module)分离到它们各自的工程里。
或者,你可以将所有东西创建为一个单一的Flex工程,然后将最优化作为一个产品化前或测试前的部署步骤在Flex Builder之外进行。
总结
将程序分割成多块并不是每个人都会使用模块(Module)。使用这种方法主程序会比平常小,而且多数用户只使用整个程序的一部分。
使用接口来使主程序或模块(Module)来与加载的模块通信。这使维护变得容易。
使用-link-report命令参数编译主程序来产生一个使用元件列表。
在主程序中使用-load-externs和report.xml编译模块(Module),这样可以使它们变得更小。
// December 12th, 2008 // No Comments » // AIR实践
接触Adobe AIR的朋友一定会有这样一个疑惑:
如果客户的电脑上没装Adobe AIR运行环境怎么办?
事实上,我们明白,在Adobe AIR普及率还不算高的今天(尤其在中国)总是告诉客户“请先下载Adobe AIR1.1”会显得太不“友好”。因为可能网友们一时半会还没明白“AIR”是什么,我为什么要安装这个东西?
现在给大家介绍来自Adobe的解决方案:AIR Express Install Badge
如果你需要发布一个Adobe AIR应用,没有安装Adobe AIR运行环境的客户机它会为你自动地先安装Adobe AIR运行环境,然后再安装Adobe AIR应用。当然已经安装了AIR运行环境的就会直接安装AIR应用了. 这种在线安装AIR的方法很方便。
AIR Express Install Badge 事实上是一种Adobe AIR推出的“在线安装”AIR应用的方式。
怎样创建一个Adobe AIR应用在线安装?(步骤和下载):
简而言之,这个方法就是使用一个Flash动画作为在线安装的前端(因为FLASH的普及率是相当高的),这个时候通过FLASH来判断客户端是否 有Adobe AIR运行环境,如果没有则自动先安装Adobe AIR运行环境(当然时间也会变的长一些,需要下载、安装),接着再自动安装这个AIR应用。这个过程客户几乎察觉不到他安装了AIR。
Adobe AIR应用在线安装(配置方法) :
1.创建安装FLASH动画的背景图像
创建一个215px x 100px 图像,被用来作为背景。 默认的在线安装区域为 217px x 180px 。
2.配置SWF
参数:
// December 9th, 2008 // No Comments » // Flex积累
var xml:XML = flash.utils.describeType(this);
这里的this 可以换成其他的对象 什么button canvas 自己定义的类 自己去尝试
for example
package
{
public class testClass
{
private var _className:String;
public function get className():String{
return _className;
}
public function set className(value:String):void{
_className = value;
}
}
}
var obj:testClass = new testClass();
var xml:XML = flash.utils.describeType(obj);
trace(xml.toXMLString());输出结果
<type name=”textClass” base=”Object” isDynamic=”false” isFinal=”false” isStatic=”false”>
<extendsClass type=”Object”/>
<accessor name=”className” access=”readwrite” type=”String” declaredBy=”textClass”/>
</type>// December 8th, 2008 // No Comments » // Flex积累
这10个Flex 框架可以用来加速 Flex RIA的开发。
// November 25th, 2008 // No Comments » // Flex积累
第一步继承Event类,实现自己的事件
package lib
{
import flash.events.Event;
public class MyEvent extends Event
{
public static const FEvent:String =”first”;
public static const SEvent:String =”second”;
public static const TEvent:String =”third”;
private static var type:String;
public function MyEvent(eventType:String)
{
super(eventType,true, true);
type = eventType;
}
override public function clone():Event
{
return new MyEvent(type);
}
}
}
第二步,类定义何时触发事件
package lib
{
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.events.FlexEvent;
import flash.display.Sprite;
[Event(name="first",type="lib.MyEvent")]
[Event(name="second",type="lib.MyEvent")]
[Event(name="third",type="lib.MyEvent")]
public class MyClass extends EventDispatcher
{
public function Call1():void
{
this.dispatchEvent(new MyEvent(MyEvent.FEvent));
}
public function Call2():void
{
this.dispatchEvent(new MyEvent(MyEvent.SEvent));
}
public function Call3():void
{
this.dispatchEvent(new MyEvent(MyEvent.TEvent));
}
}
}
实例化类,并建立监听
public function Init():void
{
var mc:MyClass = new MyClass();
mc.addEventListener(MyEvent.FEvent,f);
mc.addEventListener(MyEvent.SEvent,s);
mc.addEventListener(MyEvent.TEvent,t);
mc.Call1();
mc.Call2();
mc.Call3();
}
private function f(event:Event):void
{
Alert.show(“event:f”);
}
private function s(event:Event):void
{
Alert.show(“event:s”);
}
private function t(event:Event):void
{
Alert.show(“event:t”);
}
// November 24th, 2008 // No Comments » // Flex积累, PHP知识累计
PHP
转:http://blog.csdn.net/faith_zerg/archive/2007/10/31/1859835.aspx
// October 6th, 2008 // No Comments » // Flex积累
Icon Alerts
by Rich A Tretola on September 11, 2008 Avg Rating 4.7 (3) | Log in to rate post.
Tagged with icons , alerts , air , Flex
View Comments (0)
Problem
You would like to alert the user of something important that is occurring within the application by utilizing a flashing icon within the dock or system tray.
Solution
This is a custom solution that will utilize a filter to create a second icon that is colored in reverse of the original and a timer to swap the application icon from the original, to the reversed, and back.
Detailed description
The IconManager class below is a part of the everythingflexairlib.swc library which is hosted on Google Code. For more information, please visit http://blog.everythingflex.com/air-central/everythingflexair1swc/
The example below simply embeds a few pngs and sets their bitmapData into an Array named defaultSysDockIconBitmaps to be used as application icons. An instance of the IconManager is created and the defaultSysDockIconBitmaps are passed into the constructor. There is a second optional argument that allows you to pass in a second set of icons to be used as teh alternate icons that will sequence with the default set during an alert. If only the default icons are passed in, the second set is created in reverse color of the original by using a ColorMatrixFilter.
A basic example would then simply call the startAlert method on the IconManager. However, in this example, I have included a timer so that after you click on the startAlert method, you will have time to put focus onto a different window which will allow the bounce functionality to work if you are on a Mac. This example also passes in both optional arguments to the startAlert method. The first will be used on Windows machine’s as the toolTip for the system tray icon. The second defines the Notification type that will be used when the operating system is a Mac.
Although the IconManager class is defined below, I would recommend that you use the compiled swc file available at http://blog.everythingflex.com/air-central/everythingflexair1swc/
Usage of IconManager:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:WindowedApplication xmlns:mx=”http://www.adobe.com/2006/mxml”
width=”200″ height=”100″>
<mx:Script>
<![CDATA[
import com.everythingflex.air.managers.IconManager;
[Embed(source="assets/icons/AIRApp_16.png")]
private var Icon16:Class;
private var bitmap16:Bitmap = new Icon16();
[Embed(source="assets/icons/AIRApp_32.png")]
private var Icon32:Class;
private var bitmap32:Bitmap = new Icon32();
[Embed(source="assets/icons/AIRApp_48.png")]
private var Icon48:Class;
private var bitmap48:Bitmap = new Icon48();
[Embed(source="assets/icons/AIRApp_128.png")]
private var Icon128:Class;
private var bitmap128:Bitmap = new Icon128();
private var defaultSysDockIconBitmaps:Array = [bitmap16.bitmapData,
bitmap32.bitmapData,
bitmap48.bitmapData,
bitmap128.bitmapData];
private var i:IconManager = new IconManager(defaultSysDockIconBitmaps);
private var timer:Timer;
private function testAlert():void{
timer = new Timer(3000,1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE,timerComplete);
timer.start();
}
private function timerComplete(event:TimerEvent):void{
/**
* set toolTip to ‘ALERT! ALERT!’ (Windows Only)
* set NotificationType to CRITICAL (Mac Only)
*/
i.startAlert(‘ALERT! ALERT!’,NotificationType.CRITICAL)
}
]]>
</mx:Script>
<mx:Button click=”testAlert()” label=”Start Alert”
horizontalCenter=”0″ verticalCenter=”0″/>
</mx:WindowedApplication>
IconManager Class
/*
Copyright (c) 2008 EverythingFlex.com.
http://code.google.com/p/everythingflexairlib/
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the “Software”), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
package com.everythingflex.air.managers
{
import flash.desktop.NativeApplication;
import flash.desktop.NotificationType;
import flash.desktop.SystemTrayIcon;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.TimerEvent;
import flash.filters.ColorMatrixFilter;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.utils.Timer;
public class IconManager
{
/**
* @private
* stores the Array of bitmaps tobe used as icons
*/
private var sysDockIconBitmaps:Array = new Array();
/**
* @private
* stores the Array of altered bitmaps tobe used as icons
*/
private var alteredSysDockIconBitmaps:Array = new Array();
/**
* @private
* stores the alertType, defaults to NotificationType.CRITICAL
*/
private var alertType:String = NotificationType.CRITICAL;
/**
* @private
* used as an indicator to determine which state of icon to display
*/
private var _count:int;
/**
* @private
* timer used to alternate between sysDockIcon and alteredSysDockIcon
*/
private static var ALERT_TIMER:Timer;
/**
* Constructor.
*/
public function IconManager(sysDockIconBitmaps:Array,
alteredSysDockIconBitmaps:Array=null,
alertType:String=”critical”) {
this.sysDockIconBitmaps = sysDockIconBitmaps;
this.alteredSysDockIconBitmaps = alteredSysDockIconBitmaps;
this.alertType = alertType;
handleIcons();
}
/**
* @private
* called by constructor to initialize the icons sets
*/
private function handleIcons():void{
stopAlert();
if(NativeApplication.supportsDockIcon || NativeApplication.supportsSystemTrayIcon){
if(sysDockIconBitmaps.length > 0){
NativeApplication.nativeApplication.icon.bitmaps = sysDockIconBitmaps;
if(alteredSysDockIconBitmaps == null){
alteredSysDockIconBitmaps = new Array();
for (var i:int=0; i<sysDockIconBitmaps.length;i++){
alteredSysDockIconBitmaps.push(applyAlertFilter(sysDockIconBitmaps.clone(),i));
}
}
}
}
}
/**
* @private
* alters icon to reverse of original using a filter
*/
private function applyAlertFilter(bitmapData:BitmapData,i:int):BitmapData {
var matrix:Array = new Array();
matrix = matrix.concat([-1, 0, 0, 0, 255]);
matrix = matrix.concat([0, -1, 0, 0, 255]);
matrix = matrix.concat([0, 0, -1, 0, 255]);
matrix = matrix.concat([0, 0, 0, 1, 0]);
var r:Rectangle;
if(i == 0)r= new Rectangle(0,0,16,16);
if(i == 1)r= new Rectangle(0,0,32,32);
if(i == 2)r= new Rectangle(0,0,48,48);
if(i == 3)r= new Rectangle(0,0,128,128);
bitmapData.applyFilter(bitmapData,r,new Point(),new ColorMatrixFilter(matrix));
return new Bitmap(bitmapData).bitmapData;
}
/**
* @public
* starts an alert and shows toolTip message (Windows Only)
*/
public function startAlert(message:String=”Alert”):void{
IconManager.ALERT_TIMER = new Timer(500,0);
IconManager.ALERT_TIMER.addEventListener(TimerEvent.TIMER,changeIcon)
IconManager.ALERT_TIMER.start();
if(NativeApplication.supportsSystemTrayIcon){
SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = message;
}
}
/**
* @public
* stops an alert
*/
public function stopAlert():void{
if(NativeApplication.supportsSystemTrayIcon){
SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = “”;
}
try{
IconManager.ALERT_TIMER.stop();
} catch (e:Error){
}
}
/**
* @private
* timer handler, alters state of icon
*/
private function changeIcon(event:TimerEvent):void{
if(_count == 0){
if(sysDockIconBitmaps.length){
NativeApplication.nativeApplication.icon.bitmaps = sysDockIconBitmaps;
}
_count = 1;
} else {
if(alteredSysDockIconBitmaps.length){
NativeApplication.nativeApplication.icon.bitmaps = alteredSysDockIconBitmaps;
}
_count = 0;
}
}
}
}
// April 29th, 2008 // No Comments » // Flex积累
<cross-domain-policy>
<allow-access-from domain="*.youtube.com"/>
<allow-access-from domain="*.google.com"/>
</cross-domain-policy>
http://youtube.com/crossdomain.xml
// April 25th, 2008 // No Comments » // AS3知识积累
根据HTML中传递的变量来载入不同的XML文档,
HTML中代码!!
FLASH中代码!