<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5051901789245529609</id><updated>2011-04-22T06:12:20.206+08:00</updated><category term='Flex迷你教程'/><category term='活在AIRIA'/><category term='iComponents'/><category term='博客索引'/><category term='我的事'/><category term='AIR迷你教程'/><category term='关于Flex'/><title type='text'>Flex the world</title><subtitle type='html'>Flex, AIR and Things......</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-3509836530052158851</id><published>2009-01-02T22:30:00.003+08:00</published><updated>2009-01-02T22:33:49.228+08:00</updated><title type='text'>搬家了</title><content type='html'>&lt;p&gt;忙了一天，终于把博客这里搬到了搬到了新家 :)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flextheworld.com"&gt;&lt;span style="font-size:130%;"&gt;www.flextheworld.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-3509836530052158851?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/3509836530052158851/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2009/01/blog-post.html#comment-form' title='4 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/3509836530052158851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/3509836530052158851'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2009/01/blog-post.html' title='搬家了'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-7065391032449614018</id><published>2009-01-01T19:10:00.005+08:00</published><updated>2009-01-01T19:20:55.073+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活在AIRIA'/><title type='text'>写给想学FLEX的新人们</title><content type='html'>&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;strong&gt;前前言&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;新年到了，一切从头开始，学 FLEX就从这里开始&lt;img src="http://www.flexcoders.cn/Images/Emoticons/Default/20.gif" _shortcut="[em:21]" height="24" width="24" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;前言&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;什么是RIA, FLEX, AIR, ActionScript3, FlexBuilder....学FLEX之前有必要了解一下这些名词之间的关系。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div id="fullpost"&gt;&lt;span style="font-size:100%;"&gt;1. RIA -- (Rich Internet Application，富互联网应用系统) 顾名思义就是比传统的 web site 更丰富的web 应用。目前以Abobe Flash 平台以及微软的silverlight技术开发的web 应用为代表。&lt;br /&gt;&lt;br /&gt;2. FLEX -- FLEX是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极具表现力的 Web 应用程序的高效率的开放源码框架。我们常见的FLEX应用有FLEX web应用 (我们常常把这个直接叫Flex) 以及桌面应用AIR。&lt;br /&gt;&lt;br /&gt;3. AIR -- FLEX的桌面应用，所以AIR与FLEX并不是两样东西。千万不要觉得要学的东西很多&lt;img src="http://www.flexcoders.cn/Images/Emoticons/Default/29.gif" _shortcut="[em:30]" height="24" width="24" /&gt;&lt;br /&gt;&lt;br /&gt;4. ActionScript 3 -- FLEX的开发语言&lt;br /&gt;&lt;br /&gt;5. FlexBuilder -- 开发FLEX最好用的工具&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:130%;" &gt;&lt;strong&gt;将学习进行到底:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;怎 样才能进入FLEX的世界呢，FLEX的开发语言Action script 3.0和C#、Java非常的类似，所以不管你有哪个语言的基础，或者你对OO有比较好的认识，那么学习FLEX会很容易。 MXML是FLEX中的标记语言，与Jsp与Aspx相识，它与ActionScript3之间的关系与aspx与c#的关系类似。&lt;br /&gt;&lt;br /&gt;Ascription3可以完全描述任何用MXML写的页面，比如我们新建一个MXML(以HBOX为例，假设文件名MyHBox)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;&amp;lt;mx:hbox mx="http://www.adobe.com/2006/mxml"&amp;gt;&lt;br /&gt;&lt;br /&gt;......&lt;br /&gt;&lt;br /&gt;&amp;lt;/mx:hbox&amp;gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;这与AS3中&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;public class MyHBox extends HBox {&lt;br /&gt;&lt;br /&gt;public function&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:100%;" &gt;MyHBox(){&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;....&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;表示一个意思，区别是在MXML中不能写构造函数。&lt;br /&gt;&lt;br /&gt;开始学一门语言，我认为实践是最好的学习方法。拿着书看一天比不上动手2小时，先实践出结果，再根据结果学习理论，比先学理论，再来实践效果要好很多，不信就试试&lt;img src="http://www.flexcoders.cn/Images/Emoticons/Default/51.gif" _shortcut="[em:52]" height="24" width="24" /&gt;&lt;br /&gt;&lt;br /&gt;最后，可以试试从&lt;a href="http://bbs.airia.cn/Share/thread-2800-1-1.aspx?searchtext=924" target="_blank"&gt;&lt;strong&gt;&lt;strong&gt;我学flex时的 “快速入门指南”&lt;/strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;strong&gt;(Flex中文帮助1－－4章，看完前3章是很有必要的)&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;开始你的Flex学习，之后可以去看看&lt;a href="http://bbs.airia.cn/FLEX/thread-2760-1-1.aspx" target="_blank"&gt;&lt;strong&gt;Flex教程索引贴&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-7065391032449614018?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/7065391032449614018/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2009/01/flex.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/7065391032449614018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/7065391032449614018'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2009/01/flex.html' title='写给想学FLEX的新人们'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-8134744520392523888</id><published>2008-12-26T21:07:00.010+08:00</published><updated>2008-12-27T11:48:46.860+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iComponents'/><title type='text'>iMagnifyingGlass控件 -- 放大镜容器(Magnifying glass panel)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;控件名称 (Component Name)&lt;/span&gt;：iMagnifyingGlass.as&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;作用 (Description)&lt;/span&gt;：控件继承于Panel, 和普通panel使用方法相同，对放入其中的所有Image，当鼠标划过时有放大镜效果。 (iMagnifyingGlass extends from panel that can enlarge all passed in images when mouseover&lt;strong&gt;&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;接口 (apis)&lt;/span&gt;：&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;属性(Attributes)：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;multiple:Number －－ 设置放大倍数，默认2倍 (Default value is 2)&lt;br /&gt;glassHeight:Number -- 设置镜片高度，默认150px (Magnifying glass height, default value is 150px)&lt;br /&gt;glassWidth:Number -- 设置镜片宽度, 默认150px (default value is 150px)&lt;br /&gt;glassStyleName: Number -- 设置镜片样式表 (set the style name of glass)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;方法 (Function):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;setGlassStyle(stylrProp:String,newValue:Object) -- 设置镜片样式 (set styles of glass)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Demo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Demo:&lt;br /&gt;&lt;br /&gt;&amp;lt;component:iMagnifyingGlass hideEffect="" title="放大镜Demo" multiple="4" layout="vertical"  id="mG" &amp;gt;&lt;br /&gt; &amp;lt;mx:HBox&amp;gt;&lt;br /&gt;     &amp;lt;mx:Image source="{pic1}" width="256" height="192" /&amp;gt;&lt;br /&gt;     &amp;lt;mx:Image source="{pic2}" width="256" height="192"  /&amp;gt;&lt;br /&gt; &amp;lt;/mx:HBox&amp;gt;&lt;br /&gt; &amp;lt;mx:HBox&amp;gt;&lt;br /&gt;     &amp;lt;mx:Image source="{pic3}" width="256" height="192" /&amp;gt;&lt;br /&gt;     &amp;lt;mx:Image source="{pic4}" width="256" height="192"  /&amp;gt;&lt;br /&gt; &amp;lt;/mx:HBox&amp;gt;&lt;br /&gt;&amp;lt;/component:iMagnifyingGlass&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SVTd5PC13bI/AAAAAAAAAHI/KKaMe3JFZGg/s1600-h/b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 328px;" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SVTd5PC13bI/AAAAAAAAAHI/KKaMe3JFZGg/s400/b.jpg" alt="" id="BLOGGER_PHOTO_ID_5284092238173167026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/373403/MagnifyingGlass.zip.html"&gt;Demo和源文件下载&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-8134744520392523888?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/8134744520392523888/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/imagnifyingglass-image.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/8134744520392523888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/8134744520392523888'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/imagnifyingglass-image.html' title='iMagnifyingGlass控件 -- 放大镜容器(Magnifying glass panel)'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ewlmUWn6UWQ/SVTd5PC13bI/AAAAAAAAAHI/KKaMe3JFZGg/s72-c/b.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-3900189063480610851</id><published>2008-12-22T20:43:00.005+08:00</published><updated>2008-12-22T22:26:17.689+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活在AIRIA'/><title type='text'>年末活动：参与论坛交流，获赠上市新书！</title><content type='html'>最近在AIRIA的Flex板块进行了一项活动，“&lt;strong&gt;&lt;span style="font-weight: bold;color:purple;" &gt;年末活动：参与论坛交流，获赠上市新书！” &lt;/span&gt;&lt;/strong&gt;目的是鼓励大家多在论坛交流，每星期将送出2本《Flex 3 RIA开发详解与精深实践》。&lt;br /&gt;&lt;br /&gt;在AIRIA已经2个月了，越来越喜欢这个地方，希望在自己和大家的努力下可以把论坛越弄越好。 废话不多说了，有兴趣的朋友去参加活动吧 ：）&lt;br /&gt;&lt;br /&gt;活动连接  &lt;a href="http://www.flexcoders.cn/FLEX/thread-3147-1-1.aspx"&gt;http://www.flexcoders.cn/FLEX/thread-3147-1-1.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;活动说明&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;大家好，为活跃论坛气氛，促进论坛发展，也是为了答谢大家长期对论坛的支持。AIRIA论坛2008年12月18日起开展名为 《参与论坛交流，获赠上市新书！》 主题活动。活动持续1个月，分3批发放。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;活动规则：&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;本次活动人人都有参与和获赠机会。论坛每周将统计出发帖总数最高的&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;2位会员&lt;/strong&gt;&lt;/span&gt;，每人获赠我们精选的FLEX新书《Flex 3 RIA开发详解与精深实践》一本。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;发贴说明：&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- 新发帖内容不满100字不含在计数范围。(“发帖说明”这段话有70余字)&lt;br /&gt;- 新发贴内容杂乱无章不含在计数范围 (转载内容请调整好格式，如有必要加上自己的注释)。&lt;br /&gt;- 与论坛现有内容所重复的内容不包含在计数范围。&lt;br /&gt;- 发表&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;原创&lt;/strong&gt;&lt;/span&gt;教程、案例（含源码，与比较详细的描述）的记为&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;3贴&lt;/strong&gt;&lt;/span&gt;。&lt;br /&gt;- 发表原创源码的记为&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;2贴&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;我会每星期周末公布本周的统计情况，下次统计日期为&lt;strong&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;12月27日&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;特别说明&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;不管你是不是新人，只要是好贴都有机会获得奖品，大家都加油吧！&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;帖子不限于Flex板块。&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;为了让活动更加公平，各板块斑竹的帖子不参加本次活动&lt;/strong&gt;&lt;img src="http://www.flexcoders.cn/Images/Emoticons/Default/0.gif" _shortcut="[em:1]" height="24" width="24" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;奖品展示：&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="border: 1px solid rgb(255, 255, 255); padding: 2px; background: transparent none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" src="http://www.flexcoders.cn/Attachment.aspx?ID=449&amp;amp;mode=image&amp;amp;random=15" alt="" onload="ImageLoaded(this)" onerror="ImageError(this)" height="249" width="198" /&gt;&lt;br /&gt;&lt;br /&gt;书籍详细介绍：&lt;strong&gt;&lt;a href="http://www.airia.cn/AIR_FLEX_EBOOK/Flex3RIA_kaifa_ebook/" target="_blank"&gt;http://www.airia.cn/AIR_FLEX_EBOOK/Flex3RIA_kaifa_ebook/&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;与市面上的Flex书籍相比，本书重点突出了企业级开发实践，通过实际案例中提炼的项目引导读者进行Flex企业级开发。&lt;br /&gt;&lt;br /&gt;同时，用两个章节专门讲述了AIR桌面开发，结合典型实例展示AIR应用。三位作者皆为Java软件工程师出身，并长期从事JavaEE企业级开发，因此在Flex与JavaEE的结合方向上把握的相当到位。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;特别感谢：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;《Flex 3 RIA开发详解与精深实践》一书三位作者杨占坡、杨铭、翁颖提供书籍。&lt;br /&gt;&lt;br /&gt;另外值得高兴的是，这三位主创人员也已加入到AIRIA的大家庭中来，随时与AIRIA网友或购买这本书的朋友进行线上技术交流。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-3900189063480610851?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/3900189063480610851/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/airiaflex-2flex-3-riaairia2-httpwww.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/3900189063480610851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/3900189063480610851'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/airiaflex-2flex-3-riaairia2-httpwww.html' title='年末活动：参与论坛交流，获赠上市新书！'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-356597008722516594</id><published>2008-12-20T19:18:00.003+08:00</published><updated>2008-12-22T21:10:55.058+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 -- DataGrid，搜索数据，搜索结果多页显示</title><content type='html'>有朋友问到这个问题，这个问题主要涉及到dataProvider的操作，比较有针对性，所以写做教程。&lt;br /&gt;&lt;br /&gt;这篇教程的核心是，&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;Grid如果数据并不是操作Grid，而是操作它的dataProvider, Grid只是显示数据的载体&lt;/strong&gt;&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;Demo操作:&lt;br /&gt;&lt;br /&gt;1. 开始显示从A到Z的国家列表。可以前后翻页，每页显示10条&lt;br /&gt;2. 从search框中输入搜索信息，grid将显示含有搜索字母的所有城市.&lt;br /&gt;3. 同样可以对search结果进行翻页。&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;主要方法：&lt;br /&gt;&lt;br /&gt;调用这个方法根据currentPage和searchedData设置Grid显示当前页&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;     private function setCurrentPage():void{&lt;br /&gt;         currentPageData = new XMLListCollection();  &lt;span style="color: rgb(0, 0, 204);"&gt;//清空数据&lt;/span&gt;&lt;br /&gt;         var startIndex:int = currentPage * pageSize - pageSize;  &lt;span style="color: rgb(0, 0, 204);"&gt;//开始位置&lt;/span&gt;&lt;br /&gt;         var endIndex:int = currentPage * pageSize;&lt;span style="color: rgb(0, 0, 204);"&gt;//结束位置&lt;/span&gt;&lt;br /&gt;         if(endIndex &gt;= searchedData.length){  &lt;span style="color: rgb(0, 0, 204);"&gt;//如果结束位置大于search data的长度，结束位置为search data的长度&lt;/span&gt;&lt;br /&gt;             endIndex = searchedData.length;&lt;br /&gt;             this.lastPage = this.currentPage;&lt;br /&gt;         }&lt;br /&gt;         for(var i:int = startIndex; i&lt; style="color: rgb(0, 0, 204);"&gt;/设置当前页数据&lt;/span&gt;&lt;br /&gt;               currentPageData.addItem(searchedData[i]);&lt;br /&gt;         }&lt;br /&gt;     }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;调用此方法查询从 allData中查询数据，并显示第一页&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;          private function doSearch():void{&lt;br /&gt;             this.searchedData = new XMLListCollection()  &lt;span style="color: rgb(0, 0, 153);"&gt;//清空数据&lt;/span&gt;&lt;br /&gt;           for each(var item:XML in allData){          &lt;span style="color: rgb(0, 0, 204);"&gt;//从allData中搜索数据，将搜索到的数据添加到searchData&lt;/span&gt;&lt;br /&gt;               var value:String =item.@name.toString()&lt;br /&gt;               if(value.indexOf(searchValue.text) != -1){&lt;br /&gt;                   this.searchedData.addItem(item);&lt;br /&gt;               }&lt;br /&gt;           }&lt;br /&gt;           this.currentPage = 1;  &lt;span style="color: rgb(0, 0, 204);"&gt;//显示第一页&lt;/span&gt;&lt;br /&gt;           this.setCurrentPage();&lt;br /&gt;     }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SUzUyqvO9uI/AAAAAAAAAHA/jPhY0nmEkno/s1600-h/%25e5%259b%25be%25e7%2589%2587%2B1%287%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 342px; height: 317px;" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SUzUyqvO9uI/AAAAAAAAAHA/jPhY0nmEkno/s400/%25e5%259b%25be%25e7%2589%2587%2B1%287%29.png" alt="" id="BLOGGER_PHOTO_ID_5281830429929699042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/372272/DataGridPageDemo.zip.html"&gt;源文件下载&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-356597008722516594?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/356597008722516594/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/adobe-flex-datagrid_20.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/356597008722516594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/356597008722516594'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/adobe-flex-datagrid_20.html' title='Adobe Flex迷你教程 -- DataGrid，搜索数据，搜索结果多页显示'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ewlmUWn6UWQ/SUzUyqvO9uI/AAAAAAAAAHA/jPhY0nmEkno/s72-c/%25e5%259b%25be%25e7%2589%2587%2B1%287%29.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-6972299501905937200</id><published>2008-12-17T19:39:00.000+08:00</published><updated>2008-12-27T23:23:51.612+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='博客索引'/><title type='text'>Adobe AIR 迷你教程索引</title><content type='html'>&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-size:100%;"&gt;1. &lt;a href="http://bbs.airia.cn/AIR/thread-2727-1-1.aspx"&gt;Adobe AIR迷你教程 -- 在Flex builder3 中创建、发布AIR程序以及 AIR程序的安装运行&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;2. &lt;a href="http://luokevin.blogspot.com/2008/11/air.html"&gt;&lt;span&gt;Adobe AIR迷你教程 -- 使用自定义窗口以及对窗口的移动，缩放，关闭操作&lt;/span&gt;&lt;/a&gt;&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-air.html"&gt;&lt;br /&gt;&lt;/a&gt;3.&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-air.html"&gt; &lt;span&gt;Adobe AIR迷你教程 -- 创建多窗口以及弹出窗口与父窗口的通讯&lt;/span&gt;&lt;/a&gt;&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-air-2.html"&gt;&lt;br /&gt;&lt;/a&gt;4.&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-air-2.html"&gt; &lt;span&gt;Adobe AIR迷你教程 -- 本地文件(XML文件)的操作（1）&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;5.&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-air-2.html"&gt; &lt;span&gt;Adobe AIR迷你教程 -- 本地文件的操作(与文件选择器的结合)（2）&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;6. &lt;/span&gt;&lt;a href="http://luokevin.blogspot.com/2008/11/adboe-air.html"&gt;&lt;strong&gt;Adobe AIR迷你教程 - 监测网络状态，离线/在线应用程序的实现&lt;/strong&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-6972299501905937200?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/6972299501905937200/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/air.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6972299501905937200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6972299501905937200'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/air.html' title='Adobe AIR 迷你教程索引'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-6637425915450160287</id><published>2008-12-17T19:31:00.007+08:00</published><updated>2008-12-27T22:43:41.000+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='博客索引'/><title type='text'>Adobe Flex 迷你教程索引</title><content type='html'>&lt;a href="http://bbs.airia.cn/Share/thread-2742-1-1.aspx" target="_blank"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;1. &lt;/strong&gt;&lt;a href="http://bbs.airia.cn/Share/thread-2742-1-1.aspx" target="_blank"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-flex-super-easymacalert.html"&gt;Adobe Flex迷你教程 - Super easy实现Mac系统下滑式Alert窗口&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;2. &lt;a href="http://luokevin.blogspot.com/2008/11/adobe-flex-super-easyip.html"&gt;Adobe Flex迷你教程 - Super easy获取ip所在城市&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;3. &lt;a href="http://luokevin.blogspot.com/2008/11/adobe-flex-modulemodule.html"&gt;Adobe Flex迷你教程 - 合理使用Module分割项目以及对Module的使用&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;4. &lt;a href="http://luokevin.blogspot.com/2008/11/adobe-flex-share-object.html"&gt;Adobe Flex迷你教程 -使用Share object保存信息到客户端&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;5. &lt;a href="http://luokevin.blogspot.com/2008/12/adobe-flex-datagridcheck-box-itemrender.html"&gt;Adobe Flex迷你教程 -- DataGrid，itemrender以及多行多列值的控制&lt;/a&gt;&lt;br /&gt;6. &lt;/strong&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;a href="http://luokevin.blogspot.com/2008/12/adobe-flex-datagrid.html"&gt;Adobe Flex迷你教程 -- DataGrid，全选，删除选中项&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;strong style="font-weight: bold;"&gt;&lt;/strong&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a style="font-weight: bold;" href="http://luokevin.blogspot.com/2008/12/adobe-flex-datagrid_20.html"&gt;Adobe Flex迷你教程 -- DataGrid，搜索数据，搜索结果多页显示 &lt;/a&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[New]&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-6637425915450160287?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/6637425915450160287/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/flex.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6637425915450160287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6637425915450160287'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/flex.html' title='Adobe Flex 迷你教程索引'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-3217435548163283091</id><published>2008-12-16T21:07:00.005+08:00</published><updated>2009-01-10T17:28:43.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='关于Flex'/><title type='text'>基于Stratus service在flash player10中用RTMFP开发点对点应用程序.（翻译）</title><content type='html'>Edison今天发给我的连接，Abobe 11号发布了 Stratus service beta. 把一片文章翻译跟大家分享下。&lt;br /&gt;&lt;br /&gt;Stratus service for developing end-to-end applications using RTMFP in Flash Player&lt;br /&gt;&lt;br /&gt;Adobe Flash Player 10 和 Adobe AIR 1.5 引入了一个新的通讯协议 -- 实时媒体流协议(RTMF, Real-Time Media Flow Protocol), 它的低延迟，端到端，安全性以及可扩展性让其非常适合开发实时协作的应用程序。它不仅带来卓越的用户体验，同时也降低了运营商的成本。&lt;br /&gt;&lt;br /&gt;较早版本的Flash palyer 通过实时消息协议（RTMP,Real-Time Messaging Protocol）以及FMS（Flash media server）实现有协作功能的应用程序（比如，Adobe Acrobat Connect Pro) 或 音频/视频流。虽然RTMP在流媒体，共享对象等方面是不错的选择，但是它无法很好的满足实时性很高的音频与视频通讯。(题外话：我认为不仅是实时的问题，服务器的压力也是一个重要的方面)&lt;br /&gt;&lt;br /&gt;为了使用RTMFP, flash player终端必须连接到一个支持RTMFP的服务器，比如Adobe Stratus service beta或者未来的FMS。Stratus是一个中转式的服务，它的作用式建立flash player之间的通讯。与FMS不同，Stratus不支持媒体转播，共享对象，脚本等等，你只能开发客户端之间直接联系的应用程序。&lt;br /&gt;&lt;br /&gt;Flash player已经是网络视频播放的领导者。RTMFP以及优秀的媒体压缩技术同样会让Flash player10在实时通讯领域占据有力地位。&lt;br /&gt;&lt;br /&gt;在本文中，我首先强调了通过RTMFP实现实时通讯应用，第二，我描述了AS3对RTMFP的 API。最后，我提供我们的实例 -- VideoPhone&lt;br /&gt;&lt;br /&gt;相关教程:&lt;br /&gt;&lt;br /&gt;  1.&lt;a href="http://www.flextheworld.com/2009/01/flex-stratus-p2p-phone.html" target="_blank"&gt;Flex 迷你教程 — 基于Stratus的P2P网络电话 (1)&lt;/a&gt;&lt;br /&gt;  2.&lt;a href="http://www.flextheworld.com/2009/01/flex-stratus-phone-2.html" target="_blank"&gt;Flex 迷你教程 — 基于Stratus的P2P网络电话 (2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;原文: &lt;a href="http://www.adobe.com/devnet/flashplayer/articles/rtmfp_stratus_app.html"&gt;http://www.adobe.com/devnet/flashplayer/articles/rtmfp_stratus_app.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-3217435548163283091?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/3217435548163283091/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/stratus-serviceflash-player10rtmfp.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/3217435548163283091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/3217435548163283091'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/stratus-serviceflash-player10rtmfp.html' title='基于Stratus service在flash player10中用RTMFP开发点对点应用程序.（翻译）'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-7166872359404566990</id><published>2008-12-14T14:20:00.004+08:00</published><updated>2008-12-22T21:10:55.058+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 -- DataGrid，全选，删除选中项</title><content type='html'>这个demo是对上一个DataGrid demo的修改，目的是为了实现控制checkBox itemrender全选所有项，然后删除所有项。&lt;br /&gt;&lt;br /&gt;在 上一个版本中，我在ICheckBox.as的set data function中根据当前value选中checkbox并且将选中的value push到selectedItems array中，这里有一个问题是grid不会初始化被scrollbar 隐藏的项 (谢谢lianyedie找到问题)，所以会导致一个问题，没有显示部分的选中的item没有被正确加入到selectedItems array中。这个版本中我主要简化了iCheckBox.as, 不在setvlaue中设置选中项（同时也防止了重复插入选中项的问题）。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Demo内容：&lt;br /&gt;&lt;br /&gt;1. 点击check box选中item，或点击全选，选中所有项。&lt;br /&gt;2. 点击删除选中项，选中项的 status将变成 Deleted.&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;iCheckBox.as&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;package&lt;br /&gt;{&lt;br /&gt;import flash.events.Event;&lt;br /&gt;&lt;br /&gt;import mx.controls.CheckBox;&lt;br /&gt;import mx.core.Application;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class iCheckBox extends CheckBox&lt;br /&gt;{&lt;br /&gt;private var currentData:Object; //保存当前一行值的对象&lt;br /&gt;&lt;br /&gt;public function iCheckBox()&lt;br /&gt;{&lt;br /&gt;    super();&lt;br /&gt;    this.addEventListener(Event.CHANGE,changeHandle)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function set data(value:Object):void{&lt;br /&gt;    this.selected = value.action.toString() == "true"?true:false;&lt;br /&gt;    this.currentData = value; //保存整行的引用&lt;br /&gt;}&lt;br /&gt;//点击check box时，根据状况向selectedItems array中添加当前行的引用，或者从array中移除&lt;br /&gt;private function changeHandle(e:Event):void{&lt;br /&gt;    var itemArray:Array = Application.application.selectedItems&lt;br /&gt;    this.currentData.action = this.selected.toString()&lt;br /&gt;    if(this.selected){&lt;br /&gt;        itemArray.push(this.currentData)&lt;br /&gt;    }else{&lt;br /&gt;        for(var i:int = 0; i&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;itemArray.length; i++){&lt;br /&gt;            if(itemArray[i] == this.currentData){&lt;br /&gt;                itemArray.splice(i,1)&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;GridDemo.mxml&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;//从dataProvider中将选中的项放入 selectedItems array&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;private function initSelectedItems():void{&lt;br /&gt;         for(var i:int=0; i &amp;lt;idata.length; i++){&lt;br /&gt;             if(idata[i].action.toString() == "true"){&lt;br /&gt;                 this.selectedItems.push(idata[i])&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SUSnHmViW5I/AAAAAAAAAG4/8JSxGDRFnfI/s1600-h/%E5%9B%BE%E7%89%87+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 326px; height: 225px;" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SUSnHmViW5I/AAAAAAAAAG4/8JSxGDRFnfI/s400/%E5%9B%BE%E7%89%87+1.png" alt="" id="BLOGGER_PHOTO_ID_5279528412176866194" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.fileden.com/files/2008/11/30/2206317/GridDemoForCheckBox.zip"&gt;源文件下载&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-7166872359404566990?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/7166872359404566990/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/adobe-flex-datagrid.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/7166872359404566990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/7166872359404566990'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/adobe-flex-datagrid.html' title='Adobe Flex迷你教程 -- DataGrid，全选，删除选中项'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ewlmUWn6UWQ/SUSnHmViW5I/AAAAAAAAAG4/8JSxGDRFnfI/s72-c/%E5%9B%BE%E7%89%87+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-1286220217228543038</id><published>2008-12-13T13:09:00.006+08:00</published><updated>2008-12-22T21:10:55.058+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 -- DataGrid，checkbox itemrender以及多行多列值的控制</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SUNFyiQZGnI/AAAAAAAAAGw/P3W24WpCe6Q/s1600-h/%25e5%259b%25be%25e7%2589%2587%2B6.png"&gt;&lt;/a&gt;写了一个简单的Demo，目的是帮助大家初步了解itemrender的使用，以及如何对多行数据同时操作。&lt;br /&gt;&lt;br /&gt;Demo操作过程。&lt;br /&gt;&lt;br /&gt;1. DataGrid为3列，第一列是check box.&lt;br /&gt;2. 点击选中多行的check box.&lt;br /&gt;3. 点击删除选中行，所有被选中的行的第三列的值改变为 Deleted.&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;GridDemo.mxml&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;public var selectedItems:Array = new Array(); //保存选中行&lt;br /&gt;&lt;br /&gt;//将数组中的行的status 改为Delete,并且刷新Grid&lt;br /&gt;private function removeSelectedItems():void{&lt;br /&gt;for(var i:int = 0; i&lt;selecteditems.length; status="Deleted"&gt;&lt;/selecteditems.length;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&amp;lt;mx:DataGrid id="grid" dataProvider="{idata}"&amp;gt;&lt;br /&gt;&amp;lt;mx:columns&amp;gt;&lt;br /&gt;&amp;lt;mx:DataGridColumn headerText="删除" dataField="action" itemRenderer="{new ClassFactory(iCheckBox)}" /&amp;gt;&lt;br /&gt;&amp;lt;mx:DataGridColumn headerText="姓名" dataField="name" /&amp;gt;&lt;br /&gt;&amp;lt;mx:DataGridColumn headerText="状态" dataField="status" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&amp;lt;/mx:columns&amp;gt;&lt;br /&gt;&amp;lt;/mx:DataGrid&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;iCheckBox.as (ItemRender)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;override public function set data(value:Object):void{&lt;br /&gt;if(value.action.toString() == "true"){ //如果action为true,选中check box&lt;br /&gt;this.selected = true;&lt;br /&gt;Application.application.selectedItems.push(value) //将选中的数据保存起来&lt;br /&gt;}else{&lt;br /&gt;this.selected = false;&lt;br /&gt;}&lt;br /&gt;this.currentData = value; //保存整行的引用&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//点击check box时，根据状况向selectedItems array中添加当前行的引用，或者从array中移除&lt;br /&gt;private function changeHandle(e:Event):void{&lt;br /&gt; var itemArray:Array = Application.application.selectedItems&lt;br /&gt; this.currentData.action = this.selected.toString()&lt;br /&gt; if(this.selected){&lt;br /&gt;     itemArray.push(this.currentData)&lt;br /&gt; }else{&lt;br /&gt;     for(var i:int = 0; i&amp;lt;itemArray.length; i++){&lt;br /&gt;         if(itemArray[i] == this.currentData){&lt;br /&gt;             itemArray.splice(i,1)&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SUNFyiQZGnI/AAAAAAAAAGw/P3W24WpCe6Q/s400/%25e5%259b%25be%25e7%2589%2587%2B6.png" alt="" id="BLOGGER_PHOTO_ID_5279139922699688562" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 325px; height: 210px;" border="0" /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://www.fileden.com/files/2008/11/30/2206317/GridDemo.zip"&gt;GirdDemo.zip&lt;/a&gt;是上面的例子。&lt;br /&gt;&lt;a href="http://www.fileden.com/files/2008/11/30/2206317/GridDemo1.zip"&gt;GridDemo1.zip&lt;/a&gt;是修改了checkBox为不在dataProvider中的column, tab切换可以Z字跳转。&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-1286220217228543038?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/1286220217228543038/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/adobe-flex-datagridcheck-box-itemrender.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/1286220217228543038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/1286220217228543038'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/adobe-flex-datagridcheck-box-itemrender.html' title='Adobe Flex迷你教程 -- DataGrid，checkbox itemrender以及多行多列值的控制'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ewlmUWn6UWQ/SUNFyiQZGnI/AAAAAAAAAGw/P3W24WpCe6Q/s72-c/%25e5%259b%25be%25e7%2589%2587%2B6.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-1994356662531539580</id><published>2008-12-12T22:31:00.000+08:00</published><updated>2008-12-27T23:24:06.052+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='博客索引'/><title type='text'>iComponents 索引</title><content type='html'>&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;strong&gt;1.&lt;span style="text-decoration: underline; font-weight: bold;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt; &lt;a href="http://luokevin.blogspot.com/2008/12/iscrollbox-iphone.html"&gt;iScrollBox控件-- 对传入控件的iphone式滚动 (iphone scroll panel)&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;strong&gt;&lt;br /&gt;2. &lt;/strong&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;a href="http://luokevin.blogspot.com/2008/12/imagnifyingglass-image.html"&gt;iMagnifyingGlass控件 -- 放大镜容器(Magnifying glass panel)&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-1994356662531539580?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/1994356662531539580/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/icomponents.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/1994356662531539580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/1994356662531539580'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/icomponents.html' title='iComponents 索引'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-2374816195510485460</id><published>2008-12-01T23:06:00.006+08:00</published><updated>2008-12-27T11:51:00.547+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iComponents'/><title type='text'>iScrollBox控件-- 对传入控件的iphone式滚动 (iphone scroll panel)</title><content type='html'>&lt;strong&gt;&lt;strong&gt;控件名称 (Component Name):  iScrollBox&lt;/strong&gt;&lt;/strong&gt;.as&lt;br /&gt;&lt;strong&gt;&lt;strong&gt;作用 (Description):&lt;/strong&gt;&lt;/strong&gt;对放入的控件实现iphone式的滚动条&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;(A panel with iphone scroll style)&lt;br /&gt;&lt;strong&gt;接口 (apis):&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;var iphoneList:&lt;strong&gt;&lt;strong&gt;iScrollBox&lt;/strong&gt;&lt;/strong&gt;= new&lt;strong&gt;&lt;strong&gt;iScrollBox&lt;/strong&gt;&lt;/strong&gt;(displayObject, speed);  //创建iList对象时传入要实现滚动的对象,以及设定滚动速度。&lt;br /&gt;&lt;br /&gt;iList.displayObj; //返回传入的对象&lt;br /&gt;&lt;br /&gt;Demo: List, Image&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;List Demo&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. 以拖拽方式滚动list.(Drag to scroll the list)&lt;br /&gt;2. 快速拖拽后放手，会根据拖拽的速度继续向拖拽方向滚动一段时间。慢慢滚动不会引发额外移动。(The list will scroll like iphone when you draging and release the mouse)&lt;br /&gt;3. 滚动时点击item会停止滚动。(click item to stop scroll immediately)&lt;br /&gt;&lt;br /&gt;Note: 现在有个bug，拖拽滚动时不能将鼠标划出List。(There is a bug that you can not let mouse out of list when dragging)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ewlmUWn6UWQ/STP--uCq6pI/AAAAAAAAAGg/lc5huj27ZtA/s1600-h/%E5%9B%BE%E7%89%87+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 293px; height: 257px;" src="http://2.bp.blogspot.com/_ewlmUWn6UWQ/STP--uCq6pI/AAAAAAAAAGg/lc5huj27ZtA/s400/%E5%9B%BE%E7%89%87+1.png" alt="" id="BLOGGER_PHOTO_ID_5274839942045559442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Image demo&lt;br /&gt;&lt;br /&gt;1. 这个demo模拟地图的移动，试试上下左右拖拽(Just try to drag the "map")&lt;br /&gt;2. 快速拖拽后放手，会根据拖拽的速度继续向拖拽方向滚动一段时间。慢慢滚动不会引发额外移动&lt;br /&gt;3. 滚动时点击item会停止滚动。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/STP--uyLd9I/AAAAAAAAAGo/t5j-U1COZtM/s1600-h/%E5%9B%BE%E7%89%87+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 328px; height: 323px;" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/STP--uyLd9I/AAAAAAAAAGo/t5j-U1COZtM/s400/%E5%9B%BE%E7%89%87+3.png" alt="" id="BLOGGER_PHOTO_ID_5274839942244825042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/369276/iListDemo.zip.html"&gt;附件里面是demo和iScrollBox.as (Attached demo and source codes)                 &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-2374816195510485460?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/2374816195510485460/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/12/iscrollbox-iphone.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/2374816195510485460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/2374816195510485460'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/12/iscrollbox-iphone.html' title='iScrollBox控件-- 对传入控件的iphone式滚动 (iphone scroll panel)'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ewlmUWn6UWQ/STP--uCq6pI/AAAAAAAAAGg/lc5huj27ZtA/s72-c/%E5%9B%BE%E7%89%87+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-6865282085556718405</id><published>2008-11-29T19:04:00.004+08:00</published><updated>2008-12-22T21:11:28.625+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR迷你教程'/><title type='text'>Adobe AIR迷你教程 -- 本地文件的操作(与文件选择器的结合)（2）</title><content type='html'>接上一篇教程，我们来扩展一些内容。&lt;br /&gt;&lt;br /&gt;Demo内容&lt;br /&gt;&lt;br /&gt;1. 保存文本框内容到指定路径，创建名为saveFileDemo.xml的文件。&lt;br /&gt;2. 读取txt与xml类型文件到文本框。&lt;br /&gt;3. 重新以文本框的内容更新打开的文件。&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. 保存文本框内容到指定路径，创建名为saveFileDemo.xml的文件。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;//打开文件选择器&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;private function saveFileTo():void{&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;var file:File = File.documentsDirectory; //默认为文档文件夹&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;   file.browseForDirectory("请选择保存路径");  //打开文件夹选择器&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;   file.addEventListener(Event.SELECT,directoySelectHandle)  //监听文件夹选择事件&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;//用文本框内容创建文件&lt;br /&gt;private function directoySelectHandle(e:Event):void{&lt;br /&gt;var file:File = new File(e.target.nativePath).resolvePath("saveFileDemo.xml"); //创建名为saveFileDemo.xml的文件&lt;br /&gt;fileStream.open(file,FileMode.WRITE); //Write方式打开&lt;br /&gt;var content:XML =&lt;br /&gt;                    {this.content.text}&lt;br /&gt;&lt;br /&gt;fileStream.writeUTFBytes(content.toXMLString());  //将内容写入文件&lt;br /&gt;fileStream.close()&lt;br /&gt;Alert.show("文件创建成功","提示")&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;              &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;2. 读取txt与xml类型文件到文本框。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;//打开类型为txt和xml的文件。&lt;br /&gt;private function openFile():void{&lt;br /&gt;var file:File = File.documentsDirectory;&lt;br /&gt;var openFileFilter:FileFilter = new FileFilter("Text/XML", "*.txt;*.xml");  //过滤文件&lt;br /&gt;file.browseForOpen("请选择要打开的文件",[openFileFilter]); //打开文件选择器&lt;br /&gt;file.addEventListener(Event.SELECT,fileSelectHandle)   //监听文件选择事件&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//将打开文件内容写入文本框&lt;br /&gt;private function fileSelectHandle(e:Event):void{&lt;br /&gt;var file:File = e.target as File;&lt;br /&gt;fileStream.open(file,FileMode.READ);&lt;br /&gt;this.content.text = fileStream.readUTFBytes(fileStream.bytesAvailable) //只读方式打开文件，将内容放到TextArea&lt;br /&gt;this.updateBtn.enabled = true;&lt;br /&gt;this.saveNew.enabled = false;&lt;br /&gt;fileStream.open(file,FileMode.WRITE); //以Write方式重新打开文件，这样我们就可以更新它&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt; &lt;span style="font-weight: bold;"&gt;3. 重新以文本框的内容更新打开的文件。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;//更新打开的文件&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;private function saveOpenFile():void{&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;fileStream.writeUTFBytes(this.content.text); //更新打开的文件&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;   fileStream.close()&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;   Alert.show("文件更新成功","提示")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;   this.updateBtn.enabled = false;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;   this.saveNew.enabled = true;&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK, 下一篇是最后一篇关于文件的操作，讲解Tree控件动态读取文件夹列表，打开选择的文件。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;相关教程：&lt;a href="http://luokevin.blogspot.com/2008/11/adobe-air-xml1.html"&gt;Adobe AIR迷你教程 - 本地文件(XML文件)的操作（1）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/STEil3qxBaI/AAAAAAAAAGY/Gv8dpFwq1Rk/s1600-h/%E5%9B%BE%E7%89%87+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 279px;" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/STEil3qxBaI/AAAAAAAAAGY/Gv8dpFwq1Rk/s400/%E5%9B%BE%E7%89%87+2.png" alt="" id="BLOGGER_PHOTO_ID_5274034672621389218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/369004/AIRFileDemo.zip.html"&gt;源文件下载&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-6865282085556718405?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/6865282085556718405/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-air-2.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6865282085556718405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6865282085556718405'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-air-2.html' title='Adobe AIR迷你教程 -- 本地文件的操作(与文件选择器的结合)（2）'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ewlmUWn6UWQ/STEil3qxBaI/AAAAAAAAAGY/Gv8dpFwq1Rk/s72-c/%E5%9B%BE%E7%89%87+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-8174653278770245259</id><published>2008-11-27T13:40:00.003+08:00</published><updated>2008-12-22T21:10:55.059+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 --使用Share object保存信息到客户端</title><content type='html'>Share object一般用来保存前来访问的用户的个人信息到用户的机器上。比如用户登陆过后保存他的名字，下次访问时自动显示，或者保存用户的个性化设置等等。 每个网站对应100K的默认大小，如果尝试写入超过100K的数据到客户端硬盘，flash player会有提示。这篇教程没有什么特别 之处，网上也有很多关于Share objecy的介绍，Share object很简单，我这里主要提供一个demo给大家。&lt;br /&gt;&lt;br /&gt;Demo操作过程&lt;br /&gt;1. 第一次运行后你可以看倒提示说您第一次来。&lt;br /&gt;2. 填写用户名和爱好，点击记住我，你会看到你填写信息的显示。&lt;br /&gt;3. 重新运行demo, 你的信息会被读出。&lt;br /&gt;4. 点击忘记我，清空share object.&lt;br /&gt;5. 填写新信息，点记住我，老信息会被替换。&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;下面是demo中使用的方法。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;private var shData:SharedObject;&lt;br /&gt;&lt;br /&gt;private function init():void{&lt;br /&gt;           shData = SharedObject.getLocal("demoData") //获取名称为demoData的 share object&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;this.showLocalData()&lt;br /&gt;}&lt;br /&gt;private function saveToLocal():void{&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;shData.data.userName = userName.text; //保存用户名&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;shData.data.like = like.text; //保存爱好&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;shData.flush(); //写入local&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;this.showLocalData();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function showLocalData():void{&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;if(shData.data.userName == undefined || shData.data.userName == "" ||         shData.data.like ==""){&lt;br /&gt;          &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;this.info.text = "您第一次来，请填写你的信息并点击记住我"&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;}else{&lt;br /&gt;          &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;this.info.text = "您好，爱好" shData.data.like "的" shData.data.userName&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;                &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SS4z64jchzI/AAAAAAAAAGQ/sAlqRmBMDKc/s1600-h/%E5%9B%BE%E7%89%87+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 397px; height: 400px;" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SS4z64jchzI/AAAAAAAAAGQ/sAlqRmBMDKc/s400/%E5%9B%BE%E7%89%87+1.png" alt="" id="BLOGGER_PHOTO_ID_5273209300403914546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/368646/ShareObjectDemo.zip.html"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;源代码下载&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-8174653278770245259?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/8174653278770245259/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-share-object.html#comment-form' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/8174653278770245259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/8174653278770245259'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-share-object.html' title='Adobe Flex迷你教程 --使用Share object保存信息到客户端'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ewlmUWn6UWQ/SS4z64jchzI/AAAAAAAAAGQ/sAlqRmBMDKc/s72-c/%E5%9B%BE%E7%89%87+1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-6652596830581203561</id><published>2008-11-22T22:46:00.011+08:00</published><updated>2008-12-22T21:11:28.625+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR迷你教程'/><title type='text'>Adobe AIR迷你教程 -- 本地文件(XML文件)的操作（1）</title><content type='html'>买了战争机器2，写完教程准备杀到睡觉，现在先做第一步，写教程。AIR的文件操作不难，看完教程应该可以满足你对文件的所有基本操作。这篇教程主要以实际操作中遇到的情况来讲解&lt;br /&gt;&lt;br /&gt;我们想想文件操作都会有什么内容，无非是&lt;span style="color: rgb(153, 0, 51);"&gt;创建，修改，删除，移动，拷贝&lt;/span&gt;。在这个过程中我们会涉及到一些周边的操作，比如文件夹，文件选择器，文件列表，文件信息获取等。 我就围绕&lt;span style="color: rgb(153, 0, 51);"&gt;创建，修改，删除，移动，拷贝&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;来展开我们的教程。因为内容比较多，基于迷你教程每篇都短小，易读的原则。我分为两篇，今天先讲第一篇，基本的操作，下一篇我再加入上面所说周边的操作相对深一步的讲解。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Air的文件操做主要涉及两个类，FIle和FileStream。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;一般来说我们不会直接以文本形式保存文件，那样的内容不易于修改，所以这里我以xml 文件为例。&lt;br /&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Note: 下面所有的function可以直接复制到你的代码中运行&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;1.创建新文件。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;public function createFileDemo():void{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;var file:File = File.desktopDirectory.resolvePath("test.xml")  //尝试从系统桌面获取test.xml文件。&lt;br /&gt;var fileStream:FileStream = new FileStream(); // 创建FileStream 对象，用于读写文件&lt;br /&gt;fileStream.open(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;file&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;,FileMode.WRITE);  //以WRITE方式打开&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;file, 如果file中对应的文件不存在，创建新文件&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;//准备文件的内容&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;var content:XML = &lt;root&gt;&lt;/root&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;                          &lt;content&gt; 我们的第一个文件创建完毕&lt;/content&gt;        &lt;br /&gt;                       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;fileStream.writeUTFBytes(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;content.toXMLString()&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;); //像文件中写入内容。&lt;br /&gt;fileStream.close(); //完成写入，这时我们打开桌面的test.txt可以看到内容。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;上面五句代码让我在我的桌面创建了名为&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;test.xml的文件，并且写入了content&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;这里有三个地方我们要注意&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1. File.desktopDirectory -- 因为AIR可以在Mac和Windows下运行，所以我们最好不要指定固定的地址，这里&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;File.desktopDirectory的意思就是指向我系统的桌面，因为我是mac，所以实际返回的是 /kevinluo/Desktop. 除此之外我们还可以得到如下面这些地址&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:Blue;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 165, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;File.documentsDirectory;   //指向用户文档文件夹&lt;br /&gt;File.applicationDirectory;  //应用程序安装目录&lt;br /&gt;File.getRootDirectories();  //文件系统根目录&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;等等，我就不一一列举了，具体的大家可以看File帮助中描述。&lt;br /&gt;&lt;br /&gt;2.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;File.desktopDirectory.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;resolvePath("test.xml") -- 获取桌面下的test.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;。这里我们还可以这样写&lt;br /&gt;&lt;span style="color: rgb(0, 0, 204);"&gt;&lt;br /&gt;var file:File = File.desktopDirectory&lt;br /&gt;file = file.resolvePath("test.xml")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;不过我建议还是直接写在一排，如果像这样分开写的话，当fileStream.open(file,FileMode.WRITE) 打开文件时，如果文件不存在就会报错而不会像上面那样创建新的文件。&lt;br /&gt;&lt;br /&gt;3. fileStream.open(file,FileMode.WRITE) --&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;FileMode.WRITE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 51);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;是打开文件的方法，打开文件的方法一共有如下四种&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;FileMode.READ         // 只读方式打开文件&lt;br /&gt;FileMode.WRITE        // 写方式打开文件，文件的原有内容会被清除。文件不存在的话创建新文件&lt;br /&gt;FileMode.APPEND   //追加方式打开文件，写入的内容总是会添加到文件的末尾。文件不存在的话创建新文件&lt;br /&gt;FileMode.UPDATE    //直接打开文件，可以根据需要在指定位置插入数据。文件不存在的话创建新文件&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这里我们以WRITE方式创建了新文件，并写入了“我们的第一个文件创建完毕”。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;2. 读取已有的文件，修改内容，再更新文件。&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;publuc function modifyFileDemo():void{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;var file2:File = File.desktopDirectory.resolvePath("test.xml");  //读取刚才创建的test.xml&lt;br /&gt;var fs:FileStream = new FileStream();        &lt;br /&gt;fs.open(file2,FileMode.READ);  //以只读方式打开&lt;br /&gt;var ct:XML = new XML(fs.readUTFBytes(fs.bytesAvailable));  //获取xml内容&lt;br /&gt;ct.content = "我们的第一个文件修改完毕"     //修改content节点下的内容&lt;br /&gt;fs.open(file2,FileMode.WRITE);   //重新以写方式打开文件，目的在于清除原有的内容&lt;br /&gt;fs.writeUTFBytes(ct.toXMLString())   //写入修改过后的XML&lt;br /&gt;fs.close()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这里我用了READ和WRITE的组合。在实际的使用中我们可以判断一个xml文件的大小来限制单个文件写入过大。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;3.删除文件。&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;删除文件是最简单的。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;public function deleteFIleDemo():void{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;var file2:File = File.desktopDirectory.resolvePath("test.xml");&lt;br /&gt;if(file2.exists){   //判断文件是否存在&lt;br /&gt;   file2.deleteFile()   //删除文件&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;如果使用file2.moveToTrash()则将文件移到垃圾箱&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;4.拷贝文件/移动文件&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;public function copyFileDemo():void{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;var sourceFile:File = File.desktopDirectory.resolvePath("test.xml")    //获取源文件&lt;br /&gt;var newFile:File = File.desktopDirectory.resolvePath("test2.xml")      //创建目标文件&lt;br /&gt;sourceFile.copyTo(newFile,true) //执行拷贝，如果是移动的话sourceFile.moveTo(newFile,true)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;5. 异步与同步&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;AIR对文件的操作分为异步与同步两种方式。上面1--4介绍的是同步方式，其中的一些方法有另一个异步方式，看下面的列表&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;File.copyTo() -- File.copyToAsync()&lt;br /&gt;File.moveTo() -- File.moveToAsync()&lt;br /&gt;File.deleteDirectory() -- File.deleteDirectoryAsync()&lt;br /&gt;File.deleteFile()  -- File.deleteFileAsync()&lt;br /&gt;File.getDirectoryListing()  - File.getDirectoryListingAsync()&lt;br /&gt;File.moveToTrash() -- File.moveToTrashAsync()&lt;br /&gt;&lt;br /&gt;FileStream.open -- FileStream.openAsync()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;使用异步方式时我们需要监听EVENT.COMPLETE和IOErrorEvent.IO_ERROR事件来获取file的操作结果。我拿上面的拷贝做个例子&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;pirvate funnction copyFile(sourceFIlePath:String, targetFIlePath:String):void{&lt;br /&gt;&lt;br /&gt;var sourceFile:File = File.desktopDirectory.resolvePath(sourceFIlePath)    //获取源文件&lt;br /&gt;var newFile:File = File.desktopDirectory.resolvePath(targetFIlePath) //创建目标文件&lt;br /&gt;sourceFile.addEventListener(Event.COMPLETE,completeHandle) //监听文件操作complete事件&lt;br /&gt;sourceFile.copyToAsync(newFile,true) ;  //开始拷贝，异步方式&lt;br /&gt;this. showLoadingBar() //打开loading图标&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function completeHandle():void{&lt;br /&gt;&lt;br /&gt;Alert.show("拷贝文件完成")&lt;br /&gt;this.closeLoadingBar() //关闭loading图标&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;异步方式的好处是我们可以从中实行一些别的操作，比如出现一个loading的提示之类。&lt;br /&gt;&lt;br /&gt;OK, 休息了&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-6652596830581203561?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/6652596830581203561/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-air-xml1.html#comment-form' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6652596830581203561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6652596830581203561'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-air-xml1.html' title='Adobe AIR迷你教程 -- 本地文件(XML文件)的操作（1）'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-591241346375234089</id><published>2008-11-20T12:37:00.005+08:00</published><updated>2008-12-22T21:10:55.060+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用</title><content type='html'>现在说说Module，这篇教程代码不是最重要的，怎么样合理的使用Module以及注意的问题才是关键，所以建议大家注意下面&lt;span style="color: rgb(204, 0, 0);"&gt;红色&lt;/span&gt;语句。Module，可以将我们的项目按需划分为N个模块，在编译时将项目编译为主文件以及N个module的swf。Module基本上可以分为两种：&lt;br /&gt;&lt;br /&gt;1. 完整的Module,可以被外部app所使用 -- 会将所有涉及到的引用编译到module中，主文件的体积得到缩减，但是Module本身的体积可能会很大，比如Module和主程序都应用了对象C，那对象C会被编译到主程序以及Module中，这样Module的体积就会很大。&lt;br /&gt;&lt;br /&gt;2. 关联到主程序的Module -- 比如Module和主程序都应用了对象C，那对象C会只编译在主程序中，从而减小Module的体积。我今天主要讲这一种Module,也是我们最常用到的。&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;了解了Module的种类，再简单说说使用Module要注意的地方。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;1. 绝对不能在Module以外的地方直接引用Module中的对象。这样Module会被编译到引用它的模块中去，如果从主程序中引用，那么Module就实际上没有效果了。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2. 既然不能引用，那么建议对Module对象的使用用接口实现。在Module中实现接口方法，在外部使用这个接口不会导致Module被误编译。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; 3. Module可以引用主程序中的东西，但是不要引用其他Module中的东西。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Module可以做什么呢？我主要将Module用于以下下两种情况&lt;br /&gt;&lt;br /&gt;1. 缩减主程序的体积，点击Module功能块时加载Module.&lt;br /&gt;2. 再入主程序后在用户感觉不到的情况下预加载剩下的Module.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;现在讲正题，在demo中我这样表现Module的使用。(为了体现Module的意义，主程序生成的大小是原始flex大小248K, module内嵌了两张图片是674K)&lt;br /&gt;&lt;br /&gt;1. 如何创建Module.&lt;br /&gt;2. 主程序中点击按钮加载Module PictureWindow.&lt;br /&gt;3. 加载完毕后将模块添加到Box中，并通过接口调用PictureWindow中的方法setSelectIndex()设置显示的图片。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. 如何创建Module.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;可以通过New --&gt; MXML Module --&gt;Optmize for applicaiton --&gt; OK 或者修改任意的已经创建好的Container组建(比如Canvas, panel)标签为Module，再或者继承Module的As class。&lt;br /&gt;&lt;br /&gt;之后确保“鼠标右键项目”--&gt; Property --&gt; Flex Module  中有这个Module,没有的话点Add --&gt; 选择Module的mxml或as文件 --&gt;Optmize for applicaiton -- &gt; OK&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;2. 主程序中点击按钮加载模块PictureWindow.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这里我使用了ModuleManager来动态加载需要的Module。这比ModuleLoder要灵活的多。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;private function loadModule():void{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;        m = ModuleManager.getModule("PictureWindow.swf"); //设置Module地址，地址是编译后swf在bin中的位置&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;        //设置事件监听&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;        m.addEventListener(ModuleEvent.READY,loadReady);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;m.addEventListener(ModuleEvent.PROGRESS,loadReady);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;m.addEventListener(ModuleEvent.ERROR,loadError);&lt;/span&gt; &lt;span style="color: rgb(153, 0, 0);"&gt;        m.load(); //加载Module&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3. 加载完毕后将模块添加到Box中，并通过接口调用PictureWindow中的方法setSelectIndex()设置显示的图片。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PictureWindow实现了PictureWindowInterface接口，其中暴露了setSelectIndex方法。&lt;span style="color: rgb(204, 0, 0);"&gt;再次强调不要直接使用Module对象，如果我们不注意写成&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;var window:PictureWindow = e.module.factory.create() as PictureWindow，那整个Module就前功尽弃了&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;//Module加载完成&lt;br /&gt;private function loadReady(e:ModuleEvent):void{&lt;br /&gt; //将Module对象转换为PictureWindowInterface&lt;br /&gt; var window:PictureWindowInterface = e.module.factory.create() as PictureWindowInterface&lt;br /&gt; this.box.addChild(window as DisplayObject);&lt;br /&gt; window.setSelectIndex(1); //通过Interface调用Module中的方法&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;好了，Module的使用就写这么多，看到这里你应该也可以创建自己的Module了，对于ModuleManager和IModuleInfo 中详细的内容，大家可以查阅Flex帮助。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SSTp8l7rHhI/AAAAAAAAAGA/3amNZaUAZo8/s1600-h/%E5%9B%BE%E7%89%87-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 278px;" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SSTp8l7rHhI/AAAAAAAAAGA/3amNZaUAZo8/s400/%E5%9B%BE%E7%89%87-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5270594691114147346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/367526/FlexModuleDemo.zip.html"&gt;源文件下载&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-591241346375234089?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/591241346375234089/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-modulemodule.html#comment-form' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/591241346375234089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/591241346375234089'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-modulemodule.html' title='Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ewlmUWn6UWQ/SSTp8l7rHhI/AAAAAAAAAGA/3amNZaUAZo8/s72-c/%E5%9B%BE%E7%89%87-1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-6324751345051434788</id><published>2008-11-18T21:17:00.012+08:00</published><updated>2008-12-22T21:10:55.061+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 --Super easy获取ip所在城市</title><content type='html'>看了Moon和Grubby两场比赛。看的很爽，写点有意思的，用javascript可以获取本地ip,这个我就先不说了，我说说怎么能通过ip获取城市，能获取城市的话用处就比较大了，比如......&lt;br /&gt;&lt;br /&gt;现在说正题。获取城市最大的问题是ip对应城市数据库，我们自己建这个数据库的话太麻烦。杂办呢，网上有很多可以根据ip查城市的网站，我们就用他们。首先找一个速度比较快的ip地址查询网站。我找的是 www.ipxxx.com（大家在源代码看吧，写出来成做广告了）。接下来确定三步&lt;br /&gt;&lt;br /&gt;1. 看网站的结果是怎么得到的，经过观察发现上述网站是通过get查询，那就好办了。&lt;br /&gt;2. 看看结果页面，因为网站不会给我们提供数据源的，所以我们要从结果页面找到我们想要的东西。上述网站的结果页面很干净，过滤很方便。&lt;br /&gt;3. 确定它的首页没有版权信息说不准从外部直接访问某某页面。&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;OK,接下来就可以开始通过这个网站获取城市了，非常简单，不到10行代码。&lt;/span&gt;  &lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;&lt;br /&gt;1.创建一个到目标网站的HTTPService。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&amp;lt;mx:HTTPService method="GET" resultFormat="text"  useProxy="false"  id="ipGetter" url="http://www.XXXX.com/ips.asp" result="resultHandle(event)" fault="faultHandle(event)" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;2.处理结果页面。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;private function resultHandle(e:ResultEvent):void{&lt;br /&gt;var contnet:String = e.result.toString()&lt;br /&gt;var begIndex:int = contnet.indexOf("省")&lt;br /&gt;var endIndex:int = contnet.indexOf(" ",begIndex)&lt;br /&gt;if(begIndex &amp;lt;0){&lt;br /&gt;begIndex = contnet.indexOf("主数据：")&lt;br /&gt;endIndex = contnet.indexOf(" ",begIndex)&lt;br /&gt;contnet = contnet.substring(begIndex+4,endIndex)&lt;br /&gt;}else{&lt;br /&gt;contnet = contnet.substring(begIndex+1,endIndex)&lt;br /&gt;}&lt;br /&gt;this.result.text ="结果是："+contnet;&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;OK,这样很节约我们的资源吧，不过这种方法有可能会涉及到版权问题，大家在尝试别的网站的时候要注意&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;。&lt;br /&gt;&lt;br /&gt;不过因为受到安全沙箱的限制我们不能直接这么用，我们可以在我们的服务器端用相同的方法取得ip, flex直接获取数据就好&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:130%;"  &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-family:arial;" &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SSLBxWNrqzI/AAAAAAAAAF4/UGfikViO8iE/s1600-h/address.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 252px;" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SSLBxWNrqzI/AAAAAAAAAF4/UGfikViO8iE/s400/address.png" alt="" id="BLOGGER_PHOTO_ID_5269987567497620274" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;a href="http://www.live-share.com/files/367187/IPGetAddressDemo.zip.html"&gt;源文件下载&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-6324751345051434788?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/6324751345051434788/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-super-easyip.html#comment-form' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6324751345051434788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6324751345051434788'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-super-easyip.html' title='Adobe Flex迷你教程 --Super easy获取ip所在城市'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ewlmUWn6UWQ/SSLBxWNrqzI/AAAAAAAAAF4/UGfikViO8iE/s72-c/address.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-6516261634631641262</id><published>2008-11-15T23:16:00.006+08:00</published><updated>2008-12-22T21:11:28.625+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR迷你教程'/><title type='text'>Adobe AIR迷你教程 -- 创建多窗口以及弹出窗口与父窗口的通讯</title><content type='html'>今天说一下AIR中的window, 作为桌面应用，免不了会有多窗口存在的可能。所以这也是AIR于Flex web的另一区别。flex web应用的“窗口”都是内部窗口，不管你怎么拖拽它也不会超出flash player的范围。而我们今天说的air中的窗口，是没有范围限制的，任一窗口都可以说是一个“独立”的存在，不受主程序窗口的限制。&lt;br /&gt;&lt;br /&gt;Demo主要有以下功能。&lt;br /&gt;&lt;br /&gt;1. 简单继承window类创建MyWindow。加入parentWindow属性以及advOpen()方法, 设置MyWindow默认样式。&lt;br /&gt;2. 从主程序中弹出窗口1，从窗口1中弹出窗口2。每个窗口里有image和button&lt;br /&gt;3. 窗口1可以关闭主程序窗口，窗口2可以关闭窗口1。（关闭父窗口）&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;1. 简单继承window类创建MyWindow。加入parentWindow属性以及advOpen()方法, 设置MyWindow默认样式。&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;下面是我继承于WIndow的MyWindow，构造方法中设置了默认样式，parentWindow用于在打开窗口时保存父窗口对象。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;public class MyWindow extends Window&lt;br /&gt;{&lt;br /&gt;public var parentWindow:Object;&lt;br /&gt;&lt;br /&gt;public function MyWindow()&lt;br /&gt;{&lt;br /&gt;this.systemChrome = "none"; //不显示系统窗口&lt;br /&gt;this.showStatusBar = false; //不显示底部状态栏&lt;br /&gt;this.showGripper = false;   //不显示底部大小控制按钮&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* 自定义open()打开窗口并且保存调用此方法的对象&lt;br /&gt;*/&lt;br /&gt;public function advOpen(parentWindow:Object,openWindowActive:Boolean = true):void{&lt;br /&gt;this.parentWindow = parentWindow;&lt;br /&gt;this.open(true)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;strong style="font-weight: bold;"&gt;2. 从主程序中弹出窗口1，从窗口1中弹出窗口2。每个窗口里有image和button&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;strong&gt;3. 窗口1可以关闭主程序窗口，窗口2可以关闭窗口1。（关闭父窗口）&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;下 面是窗口1类，继承于MyWindow。在主程序中用了与下面相同的openWin打开窗口1，可以看倒在调用winX.advOpen时传入了当前对象 作为被打开窗口的parentWindow. 下面的closeParent()中利用保存的 parentWindow关闭父窗口。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:85%;" &gt;&amp;lt;local:MyWindow  xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="435" height="320" xmlns:local="*"&amp;gt;&lt;br /&gt;&amp;lt;mx:Script&amp;gt;&lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt;import mx.core.Window;&lt;br /&gt;&lt;br /&gt;//打开窗口2&lt;br /&gt;private function openWin():void{&lt;br /&gt;var win2:PicTwo = new PicTwo();&lt;br /&gt;win2.advOpen(this);&lt;br /&gt;win2.move(500,50)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//关闭父窗口&lt;br /&gt;private function closeParent():void{&lt;br /&gt;if(this.parentWindow.hasOwnProperty("close")){ //检查父窗口中是否有close方法。&lt;br /&gt;  this.parentWindow.close(); //调用父窗口的close方法&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;]]&amp;gt;&lt;br /&gt;&amp;lt;/mx:Script&amp;gt;&lt;br /&gt;&amp;lt;mx:Canvas&amp;gt;&lt;br /&gt;&amp;lt;mx:Image source="@Embed('images/2.png')" /&amp;gt;&lt;br /&gt;&amp;lt;mx:Button label="打开我的表情2" click="openWin()"  x="325" y="174"/&amp;gt;&lt;br /&gt;&amp;lt;mx:Button label="关闭父窗口" click="closeParent()" x="342" y="204"/&amp;gt;&lt;br /&gt;&amp;lt;/mx:Canvas&amp;gt;&lt;br /&gt;&amp;lt;/local:MyWindow&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;主程序&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);font-size:85%;" &gt;&amp;lt;mx:WindowedApplication showStatusBar="false" showGripper="false" xmlns:mx="http://www.adobe.com/2006/mxml" width="430" height="328" layout="absolute"&amp;gt;&lt;br /&gt;&amp;lt;mx:Script&amp;gt;&lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt;import mx.core.Window;&lt;br /&gt;private function openWin():void{&lt;br /&gt;//新建window对象&lt;br /&gt;var win:PicOne = new  PicOne();&lt;br /&gt;win.advOpen(this); //弹出窗口&lt;br /&gt;win.move(50,50);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;]]&amp;gt;&lt;br /&gt;&amp;lt;/mx:Script&amp;gt;&lt;br /&gt;&amp;lt;mx:Canvas&amp;gt;&lt;br /&gt;&amp;lt;mx:Image source="@Embed('images/1.png')" /&amp;gt;&lt;br /&gt;&amp;lt;mx:Button label="打开我的表情1" click="openWin()"  x="325" y="174"/&amp;gt;&lt;br /&gt;&amp;lt;/mx:Canvas&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/mx:WindowedApplication&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SR7rl7rrnfI/AAAAAAAAAFw/0or0qoXsVwA/s1600-h/popupwindow.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 282px;" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SR7rl7rrnfI/AAAAAAAAAFw/0or0qoXsVwA/s400/popupwindow.png" alt="" id="BLOGGER_PHOTO_ID_5268907650978651634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/366603/AIRPopupWindowDemo.zip.html"&gt;源文件下载&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/366604/AIRPopupWindowDemo.air.html"&gt;Demo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-6516261634631641262?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/6516261634631641262/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-air.html#comment-form' title='3 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6516261634631641262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/6516261634631641262'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-air.html' title='Adobe AIR迷你教程 -- 创建多窗口以及弹出窗口与父窗口的通讯'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ewlmUWn6UWQ/SR7rl7rrnfI/AAAAAAAAAFw/0or0qoXsVwA/s72-c/popupwindow.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-2393598764392461884</id><published>2008-11-14T09:01:00.010+08:00</published><updated>2008-12-22T21:10:55.061+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex迷你教程'/><title type='text'>Adobe Flex迷你教程 -- Super easy实现Mac系统下滑式Alert窗口</title><content type='html'>睡前没事突然想起有次在哪见过一个苹果样式的弹出窗口demo. 因为当时没有源码，也没有注意是怎么实现的。今天用一个简单的方式做一个试试。&lt;br /&gt;&lt;br /&gt;我们知道Flex中内置了很多默认的Effect，其实只要我们稍加组合，可以实现很多很有意思的效果，这次的下滑菜单就用了其中两个效果,wipeUp和Move,然后用Parallel把他们组合起来用。我现在来详解。&lt;br /&gt;&lt;br /&gt;Demo中我创建了一个KAlert类，用它弹出的信息框就是下滑样式了，这其中我只添加了一个静态的show()方法，重点就是我在其中调用的 setAppleStyle(alert)和setOpenEffect(alert)。&lt;br /&gt;分别用来设置样式和设置弹出动画。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;public static function show(text:String,modal:Boolean = false):void{&lt;br /&gt;    var alert:Alert = new Alert();&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;setAppleStyle(alert);&lt;br /&gt;    setOpenEffect(alert);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    alert.text = text;&lt;br /&gt;    var parent:Sprite = Sprite(Application.application);&lt;br /&gt;    PopUpManager.addPopUp(alert, parent, modal);&lt;br /&gt;    alert.x = Application.application.width/2-100;&lt;br /&gt;    alert.setActualSize(alert.getExplicitOrMeasuredWidth(), alert.getExplicitOrMeasuredHeight());&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;样式设置就是让弹出框看上去更像mac的样式。我们主要来看&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;下面的setOpenEffect(alert);，看其中的注释既可，demo就靠这个方法实现下滑弹出窗口。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:85%;"&gt;//设置弹出动画&lt;br /&gt;private static function setOpenEffect(alert:Alert):void{&lt;br /&gt;    var wipeUp:WipeUp = new WipeUp(); //Wipe效果，方向向上&lt;br /&gt;    var move:Move = new  Move(); //移定效果&lt;br /&gt;    var parallel:Parallel = new  Parallel(); //加入其中的效果会被并发执行&lt;br /&gt;    parallel.addChild(move);&lt;br /&gt;    parallel.addChild(wipeUp);&lt;br /&gt;&lt;br /&gt;    //设置弹出框在正中央&lt;br /&gt;    move.xFrom = Application.application.width/2-100;&lt;br /&gt;    move.xTo = Application.application.width/2-100;&lt;br /&gt;&lt;br /&gt;    //弹出时从－100移动到100，同时wipeUp&lt;br /&gt;    move.yFrom = -100;&lt;br /&gt;    move.yTo = -1;&lt;br /&gt;    //动画执行时间为300毫秒&lt;br /&gt;    wipeUp.duration = 300;&lt;br /&gt;    move.duration=300;&lt;br /&gt;    //在当前控件被加入舞台时执行&lt;br /&gt;    alert.setStyle("addedEffect",parallel)&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRzOY4N_x2I/AAAAAAAAAFg/eZ9x4W81REY/s1600-h/applealert.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 525px; height: 265px;" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRzOY4N_x2I/AAAAAAAAAFg/eZ9x4W81REY/s400/applealert.jpg" alt="" id="BLOGGER_PHOTO_ID_5268312590919911266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.live-share.com/files/366254/AppleAlertDemo.zip.html"&gt;&lt;span style="font-weight: bold;"&gt;源文件下载&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-2393598764392461884?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/2393598764392461884/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-super-easymacalert.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/2393598764392461884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/2393598764392461884'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adobe-flex-super-easymacalert.html' title='Adobe Flex迷你教程 -- Super easy实现Mac系统下滑式Alert窗口'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRzOY4N_x2I/AAAAAAAAAFg/eZ9x4W81REY/s72-c/applealert.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-219626129646519197</id><published>2008-11-09T17:00:00.010+08:00</published><updated>2008-12-22T21:16:30.279+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR迷你教程'/><title type='text'>Adobe AIR 迷你教程 -- 监测网络状态，离线/在线应用程序的实现</title><content type='html'>AIR与Flex web应用的另一区别在于可以动态监测网络状态，可以让开发者在网络连通或断线时用不同的方式处理程序，在Demo中我将用以下情况来表现AIR的离线与在线应用。&lt;br /&gt;&lt;br /&gt;1. 用户在文本框中输入内容。文本框下方的保存按钮会动态显示当前网络状态: (在线)保存与(离线)保存.&lt;br /&gt;2. 在用户点击保存按钮时如果网络在线，将对话框内容保存在服务器。&lt;br /&gt;3. 如果保存时处于断线状态，将内容保存在本地文件中。&lt;br /&gt;4. 当网络恢复时检查本地文件，如果有已经保存的内容，将内容传入服务器。&lt;br /&gt;&lt;br /&gt;源代码很简单，不到100行，大家可以在最下方下载。现在我开始讲解&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. 启动应用程序后监控网络状态。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;我们在 App的CreationComplete()中调用netWorkSyc来监控网络状态。&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;private function networkSyc():void{&lt;br /&gt;//创建一个联接，使用HEAD表示不需要加载玩全部的页面。&lt;br /&gt;var request:URLRequest = new URLRequest( "http://www.google.com");&lt;br /&gt;request.method = "HEAD";&lt;br /&gt;&lt;br /&gt;//用url创建监测对象，每3秒检查一次网络状态，如果网络状态发生变化，将结果返回到netWorkStatusHandle()&lt;br /&gt;urlMonitor = new URLMonitor(request);&lt;br /&gt;urlMonitor.pollInterval = 3000;&lt;br /&gt;urlMonitor.addEventListener(StatusEvent.STATUS,netWorkStatusHandle);&lt;br /&gt;urlMonitor.start();&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;           //网络状态改变时响应该事件&lt;br /&gt;private function netWorkStatusHandle(e:StatusEvent):void{&lt;br /&gt;if(urlMonitor.available){&lt;br /&gt;   //如果有本地文件，假装上传服务器&lt;br /&gt;   if(this.checkLoaclFile()){&lt;br /&gt;       //Kevin TODO 上传服务骑&lt;br /&gt;       this.showAlert("缓存内容已上传服务器");&lt;br /&gt;   }&lt;br /&gt;   saveBtn.label = "（在线）保存"&lt;br /&gt;}else{&lt;br /&gt;   saveBtn.label = "（离线）保存"&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;        上面的networkSyc()方法中我使用了两个类的对象来实现网络监控，URLRequest 和 URLMonitor。   我用URLRequest来建立一个连接对象request， 连接的地址是www.google.com。然后已request作为构造参数创建URLMonitor对象。我就是靠它来完成对网络状态的监控。&lt;br /&gt;&lt;br /&gt;监控原理很简单，当第一次执行networkSyc()时，urlMonitor会尝试连接www.google.com，然后将连接的结果发回到netWorkStatusHandle(), 如果连接成功，urlMonitor.available会为true,反之为false。接下来每3秒检查一次网络状态，如果发生改变(连接成功变为连接失败或者连接失败变为连接成功)，那么将再度触发&lt;/span&gt;&lt;span style="font-size:100%;"&gt;StatusEvent.STATUS事件，调用netWorkStatusHandle()返回网络状态。&lt;br /&gt;&lt;br /&gt;以上就是AIR监控网络的方式，大家如果感兴趣想知道更多URLMonitor的内容，可以在Help中搜索ServiceMonitor,它的sub class就是URLMonitor和SockterMonitor。&lt;br /&gt;&lt;br /&gt;Demo中并没有真正在本地保存文件，保存与读取文件的方法我会在下一篇教程--“AIR的文件操作”中教给大家。&lt;br /&gt;&lt;br /&gt;PS: demo操作方法&lt;br /&gt;&lt;br /&gt;1. 按装运行demo，如果网络连接正常，你会看到文本框下的按钮为 (在线) 保存。&lt;br /&gt;2. 输入任意信息，点击 （在线）保存 。你会看倒信息 “内容已上传服务器”。&lt;br /&gt;3. 切断网络。大概3－5秒后你会看到文本框下方按钮变为（离线）保存。&lt;br /&gt;4. 点击保存，你会看倒信息“内容已经在本地保存，会在下次连线时自动上传到服务器”。&lt;br /&gt;5. 接痛网络,大概3－－5秒后你会看倒信息 “缓存内容已上传服务器”。&lt;br /&gt;6. Demo结束。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRjd38URHZI/AAAAAAAAAEc/g4scfqbsLxg/s1600-h/%E5%9B%BE%E7%89%87+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 270px;" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRjd38URHZI/AAAAAAAAAEc/g4scfqbsLxg/s400/%E5%9B%BE%E7%89%87+1.png" alt="" id="BLOGGER_PHOTO_ID_5267203717363473810" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.live-share.com/files/365260/AIR_demos.zip.html"&gt;源文件下载&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/365261/NetworkMonitor.air.html"&gt;Demo&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-219626129646519197?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/219626129646519197/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/adboe-air.html#comment-form' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/219626129646519197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/219626129646519197'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/adboe-air.html' title='Adobe AIR 迷你教程 -- 监测网络状态，离线/在线应用程序的实现'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRjd38URHZI/AAAAAAAAAEc/g4scfqbsLxg/s72-c/%E5%9B%BE%E7%89%87+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-1023252814691698980</id><published>2008-11-06T21:40:00.006+08:00</published><updated>2008-11-06T22:37:32.908+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='我的事'/><title type='text'>小白，小白，小白的桌子</title><content type='html'>搬来这里后一直没有一张书桌，周末和&lt;a href="http://megwu.blogspot.com/2008/11/blog-post.html"&gt;Meg&lt;/a&gt;, Jabco去宜家买了桌面和四个腿，白色的桌面和黑色的腿，为了拼桌子还弄伤了手－－掌。 哎，不过为了我的小白，忍痛了。 下面就看看小白和它的桌子吧。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRL1ZgwxYMI/AAAAAAAAAEM/A_oIduYh51o/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRL1ZgwxYMI/AAAAAAAAAEM/A_oIduYh51o/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5265540732989563074" border="0" /&gt;&lt;/a&gt;桌面和桌腿一共199块，桌面有黑色跟白色，桌腿有白、黑、红、灰等各种颜色，我选的白面黑腿，组合起来还是蛮不错的。作为一个工作台大小高度刚刚好，确是物美价廉。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRL1ZnwsfEI/AAAAAAAAAEU/6qmll2kD2hU/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRL1ZnwsfEI/AAAAAAAAAEU/6qmll2kD2hU/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5265540734868290626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;最后感谢&lt;a href="http://megwu.blogspot.com/2008/11/blog-post.html"&gt;Meg&lt;/a&gt;送的仙人掌，可以延长我的寿命。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-1023252814691698980?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/1023252814691698980/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/blog-post.html#comment-form' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/1023252814691698980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/1023252814691698980'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/blog-post.html' title='小白，小白，小白的桌子'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRL1ZgwxYMI/AAAAAAAAAEM/A_oIduYh51o/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-5062088051122026334</id><published>2008-11-05T21:36:00.001+08:00</published><updated>2008-12-22T21:11:28.625+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR迷你教程'/><title type='text'>Adobe AIR迷你教程 -- 在Flex builder3 中创建、发布AIR程序以及 AIR程序的安装运行</title><content type='html'>这篇教程应该算是AIR的 Hello world，写给那些知道一点AIR，想要开始AIR开发的人。读这篇教程你可以没有任何Flex的基础，我会告诉你如何创建你的第一个项目，并且发布一个HelloWorld程序。&lt;br /&gt;&lt;br /&gt;为什么要叫迷你教程，因为我想要每个demo的源程序都尽量简短，易懂。我觉得这样的教程看来比较容易吸收东西，也不会让大家花费太多时间在一个问题上。&lt;br /&gt;&lt;br /&gt;下面我们开始讲解以下的内容。&lt;br /&gt;&lt;br /&gt;1. 准备工作。&lt;br /&gt;2. 第一个 AIR程序（编写、运行、调试）&lt;br /&gt;3. 发布AIR程序。&lt;br /&gt;4. 安装已发布的AIR安装包。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;1.准备工作。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;AIR的开发环境非常简单，你唯一需要的就是FlexBuilder3,下载地址我就不提供了，只需要在google中搜索"Flex builder3 下载"，你会得到一大把地址。 Flexbuilder的安装也很简单，直接运行安装程序，然后一路按照导航菜单下去既可。&lt;br /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;2. 第一个 AIR程序（编写、运行、调试）（图片点击可以放大）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;现在我们打开刚安装好的FlexBuilder3,见下图,选择 打开File -- New -- Flex project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGnsZo27AI/AAAAAAAAACM/M7bgRllbu-k/s1600-h/1"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265173820611161090" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 235px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGnsZo27AI/AAAAAAAAACM/M7bgRllbu-k/s400/1" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;接下来是输入程序名，我写的是My first air app, 在Applicaiton Type那选择Desktop application(runs in Adobe AIR),接这直接点Finish,项目将创建在安装FlexBuilder时设置的work space里，这个文件夹没什么特别（你以后可以把你的项目放在任意的文件夹中，使用File -- Import -- Flex project导入）&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVNiakGI/AAAAAAAAACU/QNUFTo4l-aU/s1600-h/2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265174521737547874" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 202px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVNiakGI/AAAAAAAAACU/QNUFTo4l-aU/s400/2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;现在你可以在左侧的导航中看见你的项目My first air app。你可以看倒项目主程序main.mxml和配制文件main-app.xml（在AIR迷你教程--使用自定义窗口...,中我们有用到这个文件，现在不需要管他）。右边的主窗口区域就是已经打开的main.mxml的内容。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVD7KdtI/AAAAAAAAACc/dJPVOD02MTQ/s1600-h/3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265174519156995794" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 235px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVD7KdtI/AAAAAAAAACc/dJPVOD02MTQ/s400/3.jpg" border="0" /&gt;&lt;/a&gt;按照下图的内容写我们的第一个air程序，也可以算我们第一个flex程序(Flex和AIR开发完全一样，只是在 AIR中多了一些包的支持使我们的程序成为桌面程序)。程序中有一个按钮，点击触发click事件，接着trace(trace是flex中用来在控制面版输出信息的命令，在Debug模式中我们经常会使用它来帮助我们调试程序)出 event 的内容，并且执行弹出窗口现在一段文字。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVTLfJGI/AAAAAAAAACk/g5Q0-rIWqMk/s1600-h/4.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265174523251991650" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 169px; text-align: center;" alt="" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVTLfJGI/AAAAAAAAACk/g5Q0-rIWqMk/s400/4.jpg" border="0" /&gt;&lt;/a&gt;下面我们运行程序，按照下图，右键点击main.mxml -- Run As -- Adobe AIR Application.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVbg2GFI/AAAAAAAAACs/f3rKOv4k7Mk/s1600-h/5.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265174525489059922" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 225px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVbg2GFI/AAAAAAAAACs/f3rKOv4k7Mk/s400/5.jpg" border="0" /&gt;&lt;/a&gt;运行后我们点击按钮，完成我们整个demo的内容。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGoV2KhvZI/AAAAAAAAAC0/ycYfCnVa8xs/s1600-h/6.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265174532643208594" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 175px; text-align: center;" alt="" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGoV2KhvZI/AAAAAAAAAC0/ycYfCnVa8xs/s400/6.jpg" border="0" /&gt;&lt;/a&gt;好，现在我们已经结束从编写到运行的过程。下面我们来调试(Debug)。如图，我们在第9行代码左边蓝色小点的位置，左键单击，这样你应该可以看倒和图上一样的蓝色小点了，这就是我们设置的程序断点，在调试模式中，程序会在这样的位置停下来。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVTLfJGI/AAAAAAAAACk/g5Q0-rIWqMk/s1600-h/4.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265174523251991650" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 169px; text-align: center;" alt="" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGoVTLfJGI/AAAAAAAAACk/g5Q0-rIWqMk/s400/4.jpg" border="0" /&gt;&lt;/a&gt;我们开始调试，右键点击main.mxml -- Debug As -- Adobe AIR Application.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGsrF6ZrpI/AAAAAAAAAC8/gRACN2r1Elk/s1600-h/7.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265179295694302866" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 225px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGsrF6ZrpI/AAAAAAAAAC8/gRACN2r1Elk/s400/7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;然后你可能会看倒这样的提示，这是问你是否要将我们的主窗口切换到调试模式。你可以看见图片右上角有显示“Flex” 旁边有一个flex的图标，你可以点开那个菜单看见里面有三种视图Debugging, Development和Profiling。 我们已经用了其中2个，Development就是我们上面写程序的视图，Debugging是我们即将要切换到的视图，Profiling是用来帮助我们检查程序的性能的工具，可以帮助我们解决Memory leak等等的问题，这个不需要知道，以后有机会用到的时候再研究也不迟。 现在点Yes继续。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGsrcJ1EaI/AAAAAAAAADE/kqh_8u3kqXU/s1600-h/8.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265179301664592290" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 222px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGsrcJ1EaI/AAAAAAAAADE/kqh_8u3kqXU/s400/8.jpg" border="0" /&gt;&lt;/a&gt;程序运行后，点击按钮，你会发现程序停在了下面的位置，一个绿色的横杠标示出程序现在停在了短点的位置，这个时候我们就可以查看这一时刻当前对象的各种我们感兴趣的信息了，你可以试着切换屏幕右上窗口的 Variables选像卡，会看到当前活动的对象，这里我们也不多说，尝试多调试下程序后你自然就明白Variables里面的内容了，都是很直观的信息。 接下来如果我们点上面绿色的箭头，程序会继续执行直到遇到下一个断点，如果按F6，会单步执行。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGsrUWbaxI/AAAAAAAAADM/9zF2XkDHERU/s1600-h/9.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265179299569953554" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 217px; text-align: center;" alt="" src="http://4.bp.blogspot.com/_ewlmUWn6UWQ/SRGsrUWbaxI/AAAAAAAAADM/9zF2XkDHERU/s400/9.jpg" border="0" /&gt;&lt;/a&gt;以上就是全部第2点的内容。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3. 发布AIR程序。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;既然 AIR是桌面应用程序，那它自然也需要按装，现在我们就来看怎么把我们写好的程序发布成按装包。点击图上红色圆圈的按钮，弹出如图所示窗口。在Export file中填上你想要的按装包的名字，点击Next&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGyS_DKp-I/AAAAAAAAADU/1xsDAEXQk0Q/s1600-h/10.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185478604924898" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 185px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGyS_DKp-I/AAAAAAAAADU/1xsDAEXQk0Q/s400/10.jpg" border="0" /&gt;&lt;/a&gt;这里我们发布程序需要有一个Key,那是你程序的证书。因为第一次发布，所以点Create。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGyV4wgmTI/AAAAAAAAAD0/tbT2HvUOvps/s1600-h/14.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185528455665970" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 206px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGyV4wgmTI/AAAAAAAAAD0/tbT2HvUOvps/s400/14.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;打开如图所示窗口，填上名字，密码，点击Browser选择保存位置。我的是Mac击所以界面有些不一样，但是操作和windows是一样的。我保存了名叫MyKey的证书。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGyThZULpI/AAAAAAAAADc/nJr9tq9dgak/s1600-h/11.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185487824629394" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 195px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_ewlmUWn6UWQ/SRGyThZULpI/AAAAAAAAADc/nJr9tq9dgak/s400/11.jpg" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGygbioyVI/AAAAAAAAAD8/jq-H1H7PGjM/s1600-h/15.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185709591415122" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 192px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGygbioyVI/AAAAAAAAAD8/jq-H1H7PGjM/s400/15.jpg" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGyU2wE-zI/AAAAAAAAADk/kiB5w9HFXwA/s1600-h/12.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185510737115954" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 202px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGyU2wE-zI/AAAAAAAAADk/kiB5w9HFXwA/s400/12.jpg" border="0" /&gt;&lt;/a&gt;上图点击OK后你可以看倒证书已经选择完毕。填上你的密码，点击Finish.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGyVVFKpTI/AAAAAAAAADs/7knH3VYHH10/s1600-h/13.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185518878631218" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 197px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGyVVFKpTI/AAAAAAAAADs/7knH3VYHH10/s400/13.jpg" border="0" /&gt;&lt;/a&gt;如下红色圆圈所示，在你的项目文件夹里出现一个main.air的文件，那就是我们发布的AIR程序安装包了。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGygZrcGbI/AAAAAAAAAEE/IM06Zs88FpE/s1600-h/16.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5265185709091461554" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 176px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SRGygZrcGbI/AAAAAAAAAEE/IM06Zs88FpE/s400/16.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;4. 安装已发布的AIR安装包。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;使用AIR程序的人当然不需要flexbuilder这样的东西，他们只需要按装已下air程序的运行环境。就像run java app需要java runtime, 运行 air需要 air runtime,这里是下载地址 http://labs.adobe.com/downloads/air.html. 下载 windows版或者mac版。 下载后安装既可。&lt;br /&gt;&lt;br /&gt;按装完runtime之后，双击main.air就可以开始将air程序，安装过程和普通应用程序无异。&lt;br /&gt;&lt;br /&gt;好了，看完以上内容，相信你已经可以开始自己的AIR程序。至于更深入的内容大家可以继续看以后的AIR教程。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-5062088051122026334?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/5062088051122026334/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/air-flex-builder3-air-air.html#comment-form' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/5062088051122026334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/5062088051122026334'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/air-flex-builder3-air-air.html' title='Adobe AIR迷你教程 -- 在Flex builder3 中创建、发布AIR程序以及 AIR程序的安装运行'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ewlmUWn6UWQ/SRGnsZo27AI/AAAAAAAAACM/M7bgRllbu-k/s72-c/1' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-4400177497632206405</id><published>2008-11-02T12:38:00.002+08:00</published><updated>2008-12-22T21:11:28.626+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR迷你教程'/><title type='text'>Adobe AIR迷你教程 -- 使用自定义窗口以及对窗口的移动，缩放，关闭操作</title><content type='html'>这个教程主要针对对flex有一定基础，准备开始AIR开发的朋友。由于AIR是针对桌面应用程序，所以相对于flex的web应用，自然就多出了对应用程序窗口的控制。而 AIR的一大特点就是允许开发者使用自定义的窗口代替系统窗口从而使开发者对程序UI的设计更加随心所欲，设计出独具个性风格的跨平台的桌面应用程序。&lt;br /&gt;&lt;br /&gt;罗嗦的话到次为止，下面正式开始主题，本教程主要实现了以下功能。&lt;br /&gt;&lt;br /&gt;1. 屏蔽系统窗口、 flash窗口、窗口底部状态栏。使用自定义窗口。&lt;br /&gt;2. 对自定义窗口的缩放、移动、关闭。&lt;br /&gt;&lt;br /&gt;在实现以上操作的过程中，我加入了一些额外的操作来丰富我们的demo，都是很简单，很实用的东西。&lt;br /&gt;&lt;br /&gt;3. 移动窗口时实现半透明效果，移动结束时还原。&lt;br /&gt;4. 关闭窗口动画。&lt;br /&gt;5. 窗口背景填充。&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;1. 屏蔽系统窗口， flash窗口，窗口底部状态栏。使用自定义窗口。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;当一个AIR项目创建成功后，你会发现相对与 web项目，你的工程目录下多了一个名为 XXX-app.xml的文件，这是我们项目的配制文件，实现自定义窗口就是靠它。打开它，修改如下代码:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. --&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;!--&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;systemChrome&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;/systemChrome&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt; --&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;去掉对systemChrome的注释，改为&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. --&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;systemChrome&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;none&lt;span style="font-weight: bold;"&gt;&lt;&lt;/span&gt;/systemChrome&lt;span style="font-weight: bold;"&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;这样我们就去掉了系统窗口，转而使用了flash的自带窗口，下面我们把flash窗口也去掉。在你的主mxml文件中设置WindowedApplication 的这些属性&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;mx:WindowedApplication&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; showTitleBar&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;="false" &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;borderThickness&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;="0" &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;showStatusBar&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;="false" &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;showGripper&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;="false" ..... /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;这样就完全去掉了所有的窗口，程序运行后只显现应用程序的内容。大家可以参考帮助手册来了解以上属性的意思。说到这里就引出了下一个问题，屏蔽了所有窗口以后如何对窗口进行基本的，放大，缩放，关闭操作呢。我们看下面。&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;2. 对自定义窗口的缩放，移动，关闭。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;AIR比flex web应用多了一个类叫NativeWindow,我们就是靠这个类对窗口就行操作。在demo中，我用了以下几个方法来移定窗口，他们都在鼠标MouseDown event中被触发。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;this.nativeWindow.startResize("L");&lt;br /&gt;this.nativeWindow.startResize("R");&lt;br /&gt;this.nativeWindow.startResize("T");&lt;br /&gt;this.nativeWindow.startResize("B");&lt;br /&gt;this.nativeWindow.startResize("TL");&lt;br /&gt;this.nativeWindow.startResize("RB");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;很容易可以看出，L R B T代表 Left, Right, Bottom 和 Top, 所以在调用startResize时设置适当的参数我们就可以轻易的实现对窗口各个方向的缩放。对于窗口的移定，在mouseDown event中使用&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;this.nativeWindow.startMove();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;而对窗口的关闭，则很简单的在按钮click事件调用this.close()。&lt;br /&gt;&lt;br /&gt;好了，以上就是对自定义窗口的操作。下面的东西我是用来完善我的demo，使它cool一点。相信大家在自己的应用程序中也会需要类似的东西，一个应用程序除了功能，细节上的处理也是很重要的。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3. 移动窗口时实现半透明效果，移动结束时还原。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;要实现这个效果我们需要重新打开我们的XXX-app.xml文件，设置以下内容。&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;!--&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt; Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;--&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;transparent&gt;&lt;/transparent&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;transparent&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;true&lt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;/transparent&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;这个可以允许我们让应用程序的背景透明，这个很有用，比方说QQ宠物就是一个背景透明的应用程序，利用背景透明，我们可以开发出很独特的应用程序。接下来要做的就简单了。&lt;br /&gt;&lt;br /&gt;在上面移动窗口的mouseDown事件中加入 this.alpha = 0.x; 下面是demo中的代码。我将透明度设为0.6,this. alpha只针对应用程序的背景设置透明，如果你想让更多的东西透明，只需要对相应的控件设置alpha既可。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;private function moveMe():void{&lt;br /&gt;this.nativeWindow.startMove();&lt;br /&gt;this.alpha = 0.6;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;让透明还原我在mouseUp事件中设置alpha =1;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;private function mouseUpHandle():void{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;this.alpha = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这样简单的设置也许就会使你的应用程序看起来不一样，怎么不试试呢：）&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;4. 关闭窗口动画。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;我使用了下面的Iris效果对在窗口关闭时使用。有什么效果呢，大家关闭一下就知道了。 flex中内置了很多效果给我们使用，很多时候我们只需要适当的组合，就能得到意想不到的效果，比如 Move与 WipeDown一起可以实现Mac系统，菜单向下滑出的效果。诸如此类，只要有想像力，我们可以用很简单的代码，实现很有用的功能。 在demo 中，如下设置得到关闭动画&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;mx:WindowedApplication&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; closeEffect&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;="irisIn" &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;..... /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;mx:&lt;span style="font-size:0;"&gt;Iris id="irisIn" duration="500" showTarget="false"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;5. 窗口背景填充。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这个功能其实在开发程序的时候用的不多，我是不想让demo看起来太单调所以加了背景，我们知道flex是不能像Html那样轻易的让背景重复显示的，所以我们的用一些特殊方法处理以下，demo中的 setBackground方法用于设置整个背景。这里面涉及到的 Bitmap, BitmapData, Graphics类的具体作用，大家感兴趣的话可以看帮助手册，我的观点是当里用到的时候查帮助也不迟，只要知道有这么些个类可以为你干什么活就好。&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;private function setBackground():void{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;var backgroundImage :Bitmap;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;var backgroundBitmapData :BitmapData;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;backgroundImage = new bg();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;backgroundBitmapData = new BitmapData( backgroundImage.width, backgroundImage.height );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;backgroundBitmapData.draw( backgroundImage );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;workarea.graphics.beginBitmapFill( backgroundBitmapData, null,true );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;workarea.graphics.drawRect(0,0, 2000, 2000);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;workarea.graphics.endFill();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;以上就是demo的全部内容，下面有源文件和Demo给大家下载。 因为AIR是跨平台的应用程序，所以不管在Mac或者Window上开发过程都是一样的。Demo是在 Leopard下开发。&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SQ1MO9uGulI/AAAAAAAAABo/tXPfrm93Pro/s1600-h/%C3%83%C2%A5%C3%A2%E2%82%AC%C2%BA%C3%82%C2%BE%C3%83%C2%A7%C3%A2%E2%82%AC%C2%B0%C3%A2%E2%82%AC%C2%A1+1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5263947359435799122" style="margin: 0px auto 10px; display: block; width: 400px; cursor: pointer; height: 344px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_ewlmUWn6UWQ/SQ1MO9uGulI/AAAAAAAAABo/tXPfrm93Pro/s400/%E5%9B%BE%E7%89%87+1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/363500/AIRWindow_demo.zip.html"&gt;源文件下载&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.live-share.com/files/363502/AIRWindowDemo.air.html"&gt;Demo&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-4400177497632206405?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/4400177497632206405/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/11/air.html#comment-form' title='5 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/4400177497632206405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/4400177497632206405'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/11/air.html' title='Adobe AIR迷你教程 -- 使用自定义窗口以及对窗口的移动，缩放，关闭操作'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ewlmUWn6UWQ/SQ1MO9uGulI/AAAAAAAAABo/tXPfrm93Pro/s72-c/%E5%9B%BE%E7%89%87+1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5051901789245529609.post-2912198054095349183</id><published>2008-10-26T23:10:00.000+08:00</published><updated>2008-11-06T00:13:58.652+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='我的事'/><title type='text'>第一篇</title><content type='html'>弄了一晚上，看了50个摸板最后选了这一个。 喜欢这种简单的颜色。淡淡的，可以把人的注意力集中在文字上，但又不会因为看得太久感觉眼累。 以后博客的内容大概会以技术与生活为主。会写一些简单实用的教程，一些自己开发的小程序（比如博客插件，小的工具等等）以及其他任何事。关于小程序，会以我比较熟悉的flex作为开发语言，另外加上php作为server端支持，如果程序需要的话。&lt;br /&gt;&lt;br /&gt;作为一个apple fan, 对apple的每一个app都有盲目的欣赏。 有朋友说apple的东西很多都扼杀自由主义思想，但也是他说的，自由主义思想已经死了。 apple的东西总是没有多余的成分，在我看来拥有完美的设计和不错的Usability。 非常喜欢iphone中的Notebook。所以决定做一个和他她一样的桌面版和博客插件。&lt;br /&gt;会先开始做桌面版，用AIR开发。我会将在开发过程中发现的小技巧或者有用的东西写做教程，希望可以帮到有需要的人。&lt;br /&gt;&lt;br /&gt;预告一下下一篇博文是一简单教程，关于AIR的窗口基本操作。实现以下功能：&lt;br /&gt;&lt;br /&gt;1. 显示自定义窗口。&lt;br /&gt;2. 最小化，最大化，移动窗口。&lt;br /&gt;3. 移动窗口时实现程序半透明，移动结束时恢复。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5051901789245529609-2912198054095349183?l=luokevin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://luokevin.blogspot.com/feeds/2912198054095349183/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://luokevin.blogspot.com/2008/10/blog-post.html#comment-form' title='4 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/2912198054095349183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5051901789245529609/posts/default/2912198054095349183'/><link rel='alternate' type='text/html' href='http://luokevin.blogspot.com/2008/10/blog-post.html' title='第一篇'/><author><name>Kevin LUo</name><uri>http://www.blogger.com/profile/01694908038325989160</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_ewlmUWn6UWQ/SQ2zhLbGjDI/AAAAAAAAAB0/LvhNMB7p0N0/S220/1.jpg'/></author><thr:total>4</thr:total></entry></feed>
