<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_我只是小能</title><subtitle type="text">    ------专注于GIS技术及富客户端（flex）技术！新浪微博：http://weibo.com/gisxiaoneng</subtitle><id>http://feed.cnblogs.com/blog/u/32420/rss</id><updated>2012-01-12T03:18:18Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/32420/rss"/><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2012/01/08/2316683.html</id><title type="text">利用Simplify进行ArcGIS Server多面合并查询</title><summary type="text">原始需求： 最近开发一个功能，看来似乎很简单，即在系统中需要利用ArcGIS Server的REST接口进行空间查询，其主要分为两个步骤： （1）根据属性或者空间条件先查询，如下图所示，先查询面图层中符合条件的面，例如有n个面； （2）在符合条件的面的地理范围内查询符合条件的空间点，其空间点图层可能有多个（m），如下图所示： 初次解决方案： 此需求是在既有代码上进行改造，既有代码的思路为： （1） 先查出图1中的所有面，然后选定某个面； （2） 根据第1步中的选定的面去查询点图层；保存查询结果后，如果图1中的面已经遍历完，则继续遍历查询2；否则转至3； （3） 如果有多...</summary><published>2012-01-08T14:49:00Z</published><updated>2012-01-08T14:49:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2012/01/08/2316683.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2012/01/08/2316683.html"/><content type="html">&lt;p&gt;&lt;strong&gt;原始需求：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;最近开发一个功能，看来似乎很简单，即在系统中需要利用ArcGIS Server的REST接口进行空间查询，其主要分为两个步骤：&lt;/p&gt;  &lt;p&gt;（1）根据属性或者空间条件先查询，如下图所示，先查询面图层中符合条件的面，例如有n个面；&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249142001.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249147508.jpg" width="520" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;（2）在符合条件的面的地理范围内查询符合条件的空间点，其空间点图层可能有多个（m），如下图所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249164868.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249167867.jpg" width="527" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;初次解决方案：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;此需求是在既有代码上进行改造，既有代码的思路为：&lt;/p&gt;  &lt;p&gt;（1） 先查出图1中的所有面，然后选定某个面；&lt;/p&gt;  &lt;p&gt;（2） 根据第1步中的选定的面去查询点图层；保存查询结果后，如果图1中的面已经遍历完，则继续遍历查询2；否则转至3；&lt;/p&gt;  &lt;p&gt;（3） 如果有多个目标面，则再次遍历1和2步;&lt;/p&gt;  &lt;p&gt;（4） 最后保存所有查询结果，发送至服务端进行保存。&lt;/p&gt;  &lt;p&gt;此代码的弊端显而易见，其发出的web请求数是：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;请求数 = 1 +&lt;/strong&gt;&lt;strong&gt; n&lt;/strong&gt;&lt;strong&gt;个面*m&lt;/strong&gt;&lt;strong&gt;的点图层数量&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;显然只适合原有的n和m都很小的情况。因此需要改造，其中m是无法减少的，唯一只能减少的只有n，其思路就是将不再遍历面，而是将面合并成后再进行请求。&lt;/p&gt;  &lt;p&gt;ArcGIS Server 通常其返回的单个地理面描述字段为：&lt;/p&gt;  &lt;p&gt;{"rings" : [ &lt;em&gt;[ [&amp;lt;x11&amp;gt;, &amp;lt;y11&amp;gt;], [&amp;lt;x12&amp;gt;, &amp;lt;y12&amp;gt;], ..., [&amp;lt;x11&amp;gt;, &amp;lt;y11&amp;gt;]&lt;/em&gt; ]],"spatialReference" : {&amp;lt;spatialReference&amp;gt;}}&lt;/p&gt;  &lt;p&gt;多个面的地理面描述字段为：&lt;/p&gt;  &lt;p&gt;{"rings" : [ &lt;em&gt;[ [&amp;lt;x11&amp;gt;, &amp;lt;y11&amp;gt;], [&amp;lt;x12&amp;gt;, &amp;lt;y12&amp;gt;], ..., [&amp;lt;x11&amp;gt;, &amp;lt;y11&amp;gt;] ], [ [&amp;lt;x21&amp;gt;, &amp;lt;y21&amp;gt;], [&amp;lt;x22&amp;gt;, &amp;lt;y22&amp;gt;], ..., [&amp;lt;x21&amp;gt;, &amp;lt;y21&amp;gt;] ]&lt;/em&gt;],"spatialReference" : {&amp;lt;spatialReference&amp;gt;}}&lt;/p&gt;  &lt;p&gt;因此事情似乎就变得简单了，那按照这种格式将图１中的所有的面组合成多面的地理描述字段即可，这样的话，无须再去遍历查询，&lt;/p&gt;  &lt;p&gt;其整体过程为：&lt;/p&gt;  &lt;p&gt;（1） 先查出图1中的所有面，再&lt;strong&gt;整合格式&lt;/strong&gt;；&lt;/p&gt;  &lt;p&gt;（2） 根据目标图层的个数以及第1步中的整合面进行目标图层的查询；&lt;/p&gt;  &lt;p&gt;（3） 保存所有查询结果，发送至服务端进行保存。&lt;/p&gt;  &lt;p&gt;请求数也将变成：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;请求数 = 1 +&lt;/strong&gt;&lt;strong&gt; m&lt;/strong&gt;&lt;strong&gt;的点图层数量&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;新的问题：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;看上去思路似乎并没有问题，做法也没有问题，然而在测试过程中却发现这种组合效率却如六脉神剑&amp;#8212;&amp;#8212;时灵时不灵，有时候查询没有问题，但也有很多时候会报出：&lt;/p&gt;  &lt;p&gt;Unable to perform query. Please check your parameters&lt;/p&gt;  &lt;p&gt;通过伟大的谷歌以及系统日志也没有看出问题，在反复测试后，可能是数据方面的问题，也就是 ArcGIS在认为面状数据出现自相交（如八字形、多部分、镂空等情况）时，就会报出此种错误，而不在执行此类查询。例如以下两段：&lt;/p&gt;  &lt;p&gt;{'rings' : [[[506415,305702],[506415,305698],[506426,305683],[506388,305703],[506393,305704],[506393,305708],[506407,305710],[506415,305711],[506415,305702]]]}&lt;/p&gt;  &lt;p&gt;{'rings' : [[[506415,305702],[506415,305698],[506426,305690],[506426,305691],[506426,305683],[506388,305703],[506393,305704],[506393,305708],[506407,305710],[506415,305711],[506415,305702]]]}&lt;/p&gt;  &lt;p&gt;第二段在查询的时候则会报出如上所示的错误。&lt;/p&gt;  &lt;p&gt;注：arcgis 体系下，polygon是由多个ring组成的，默认情况下polygon都是一个ring。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;最终解决方案：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;终极解决办法是利用&lt;strong&gt;Simplify&lt;/strong&gt;&lt;strong&gt;方法&lt;/strong&gt;用于简化几何对象，并使几何对象的拓扑正确。&lt;/p&gt;  &lt;p&gt;如下图所示：在开发对几何对象空间分析时，所操作的几何对象必须是简化的几何对象，以下代码片段演示了如何使一个几何对象在拓扑上一致，例如在一个PointCollection对象中移除所有的重合点；对于segmentCollection移除所有重合线段，而相交的线段会变成非相交线段(即在相交处产生一个顶点)；对于Polygon所有相交的环将被移除，未封闭的环将被封闭。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/20120108224917243.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249229748.png" width="442" height="327" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;（图片来源网络）&lt;/p&gt;  &lt;p&gt;因此，问题的最终解决办法是在整合格式后，对我们所整合的格式再次进行校准：&lt;/p&gt;  &lt;p&gt;（1） 先查出图1中的所有面，再整合格式；&lt;/p&gt;  &lt;p&gt;（2） 利用&lt;strong&gt;Simplify&lt;/strong&gt;方法得到最终的整合面格式，有可能会将各个面的拓扑情况将多个面合并成一个面；&lt;/p&gt;  &lt;p&gt;（3） 根据目标图层的个数以及第2步中的整合面进行目标图层的查询；&lt;/p&gt;  &lt;p&gt;（4） 保存所有查询结果，发送至服务端进行保存。&lt;/p&gt;  &lt;p&gt;其查询请求数为：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;请求数 = 1 + 1 +&lt;/strong&gt;&lt;strong&gt; m&lt;/strong&gt;&lt;strong&gt;的点图层数量&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249247598.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201201/201201082249247565.jpg" width="449" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;扩展问题：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;通常，在进行面状编辑时，也会产生此类的问题，即用户在操作一个面时，可能面状数据出现自相交（如八字形、多部分、镂空等情况），因此，需要对图形进行拓扑验证，有可能处理后的图形就会由于一个ring变成实际上的多个ring，如果不进行拓扑验证的话，可能就会出现保存编辑图形时报错。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/2316683.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2012/01/08/2316683.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2011/11/01/2231094.html</id><title type="text">关于Flex Ant的相关注意事项</title><summary type="text">1、代码方面： 如果是Embed的方法，务必按以下方式写，注意反斜杠的位置。 在mxml文件中： &lt;mx:Image source="@Embed('/cn/com/1.png')"/&gt; 在CSS文件中：backgroundImage:Embed(source="/cn/com/1.png");在AS文件中：[Embed(source="/cn/com/1.png")] p...</summary><published>2011-11-01T02:10:00Z</published><updated>2011-11-01T02:10:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2011/11/01/2231094.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2011/11/01/2231094.html"/><content type="html">&lt;p&gt;1、&lt;strong&gt;代码方面：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;如果是Embed的方法，务必按以下方式写，注意反斜杠的位置。&lt;/p&gt;  &lt;p&gt;在mxml文件中：&lt;/p&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mx:Image&lt;/span&gt;  &lt;span class="attr"&gt;source&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@Embed('/cn/com/1.png')&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;  &lt;p&gt;在CSS文件中：&lt;/p&gt;backgroundImage:Embed(source=&amp;quot;/cn/com/1.png&amp;quot;);&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt;在AS文件中：&lt;/p&gt;[Embed(source=&lt;span class="str"&gt;&amp;quot;/cn/com/1.png&amp;quot;&lt;/span&gt;)]&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; var zmouse : Class;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt;2、&lt;strong&gt;图片以及附件的处理方面：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果是Embed进去的，这些就不需要处理了，那未打包的资源就是一个比较麻烦的地方，偶也没有找到比较好的方法，似乎只能一个个写，参考其提供的样例：&lt;/p&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;compc&lt;/span&gt; &lt;span class="attr"&gt;fork&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;br/&gt;               &lt;span class="attr"&gt;output&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${basedir}/${THEME_NAME}.swc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;&amp;lt;!-- If you change this, update ${local.playerglobal.version} above. --&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;target-player&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;target-player&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;jvmarg&lt;/span&gt; &lt;span class="attr"&gt;line&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${compc.jvm.args}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include-classes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ArcadeClasses&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;include-classes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;source-path&lt;/span&gt; &lt;span class="attr"&gt;path-element&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${basedir}/src&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;library-path&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;external-library-path&lt;/span&gt; &lt;span class="attr"&gt;dir&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${FLEX_HOME}/frameworks/libs&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;player/${local.playerglobal.version}/playerglobal.swc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;framework.swc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;spark.swc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;textLayout.swc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;osmf.swc&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;external-library-path&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include-file&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;defaults.css&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${basedir}/src/defaults.css&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include-file&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;assets/flex_skins.swf&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${basedir}/src/assets/flex_skins.swf&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include-file&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;preview.jpg&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${basedir}/src/preview.jpg&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;include-file&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;metadata.xml&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${basedir}/src/metadata.xml&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;locale&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;accessible&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;true&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;accessible&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;compc&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt;3、样式的处理：&lt;/p&gt;&lt;p&gt;如果采用的动态加载样式 ，那么尽量将相关的库打包至样式的SWF中，否则可能会出现部分样式加载延迟的问题,关于&lt;span class="html"&gt;static-link-runtime-shared-libraries&lt;/span&gt;的使用可以Google一下！&lt;/p&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;target&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;buildcss&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;depends&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;init&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mxmlc&lt;/span&gt; &lt;span class="attr"&gt;file&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${SRC_DIR}/cn/com/egova/umgis/common/style/CustomStyle.css&amp;quot;&lt;/span&gt; &lt;br/&gt;                &lt;span class="attr"&gt;output&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;${DEPLOY_DIR}/cn/com/egova/umgis/common/style/CustomStyle.swf&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;static-link-runtime-shared-libraries&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;true&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;static-link-runtime-shared-libraries&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;br/&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;mxmlc&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt; 4、关于文件大小 &lt;/p&gt;&lt;p&gt;采用Ant打包的文件相比使用Flash Builder自动编绎生成的文件大概要小一半左右，这是因为其自动编译的文件为了避免出错，会将一些共享库打包至SWF中，因此会造成SWF庞大，但至于使用Ant打包后的是不是会有其他问题，暂时还没有验证。&lt;/p&gt;&lt;p&gt;参考资源：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.petersheim.org/wiki/index.php/Flex_Ant_Task"&gt;http://www.petersheim.org/wiki/index.php/Flex_Ant_Task&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.ityao.com/archives/751"&gt;http://blog.ityao.com/archives/751&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://mxcode.com/2010/11/flex-ant-file-sample/"&gt;http://mxcode.com/2010/11/flex-ant-file-sample/&lt;/a&gt;&lt;/p&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/2231094.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2011/11/01/2231094.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2011/10/18/2216122.html</id><title type="text">ArcGIS KeyGen注册机,五步操作实现ArcGIS9.X与ArcGIS10全模块无时限破解(转载：我是一只牛)</title><summary type="text">重要声明:本注册机收集于互连网.由ygdx1986推荐给xqiushi,并未测试与使用.若出现一切不良后果请自负。 友情提示: 1.License Server Administrator、ArcGIS Administrator是两个不同的东西; 2.这些操作基于官方原版，若XXX过的，请行恢复到官方原版； 3.对于ArcGIS Engine，用注册机最后一项server，选100，点右...</summary><published>2011-10-18T01:50:00Z</published><updated>2011-10-18T01:50:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2011/10/18/2216122.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2011/10/18/2216122.html"/><content type="html">&lt;p&gt;&lt;strong&gt;重要声明:本注册机收集于互连网.由ygdx1986推荐给&lt;a href="http://arcgis.me/"&gt;xqiushi&lt;/a&gt;,并未测试与使用.若出现一切不良后果请自负。&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;友情提示:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1.License Server Administrator、&lt;a href="http://arcgis.me/archives/tag/arcgis"&gt;ArcGIS&lt;/a&gt; Administrator是两个不同的东西;&lt;/p&gt;  &lt;p&gt;2.这些操作基于官方原版，若XXX过的，请行恢复到官方原版；&lt;/p&gt;  &lt;p&gt;3.对于&lt;a href="http://arcgis.me/archives/tag/arcgis"&gt;ArcGIS&lt;/a&gt; Engine，用注册机最后一项server，选100，点右下角的”所有”。将内容复制存成.ecp文件，双击使用或者参考这里：&lt;a href="http://arcgis.me/archives/77823.html"&gt;ArcGIS 10 License最新全套内容&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;使用说明：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;0、安装&lt;a href="http://arcgis.me/archives/tag/arcgis"&gt;ArcGIS&lt;/a&gt;Desktop10程序及许可设置LicenseManager程序（均可更新至sp1）；&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;打开注册机，注意：主机编号可以不改，选择好过期时间和版本号（与你所安装的版本一致）；如图示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201110/201110180949172339.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201110/201110180949266365.png" width="239" height="244" /&gt;&lt;/a&gt;     &lt;br /&gt;补充说明：如果你只想授权几个功能就选择相应的功能按添加，每添加一个就增加一个功能的授权按移除可以移除上一个授权，按清除可清除所有已添加的授权，如果你想授权所有功能，按所有即可。    &lt;br /&gt;&lt;strong&gt;2&lt;/strong&gt;生成了许可文件内容后，复制框内START_LICENSE到END_LICENSE之间的内容（PS:有些文章中说要全部复制，&lt;a href="http://arcgis.me/"&gt;xqiushi&lt;/a&gt;认为只复制“START_LICENSE”与“END_LICENSE”之间的内容，未测试），新建一个文本文档，粘贴这些文字，另存文件为service.txt（没明白？&lt;a href="http://yunfile.com/file/xqiushi/cce2aad8/"&gt;点击下载ArcGIS 10桌面版service.txt&lt;/a&gt;）；    &lt;br /&gt;&lt;strong&gt;3&lt;/strong&gt;把生成的service.txt复制到License Manager的安装目录（默认为：C:\ProgramFiles\ArcGIS\License10.0\bin\）下，替换同名文件即可；    &lt;br /&gt;&lt;strong&gt;4&lt;/strong&gt;开始”菜单打开License Server Administrator程序，点击启动\停止许可服务，再点击“停止”以停止服务，然后再点击“启动”以启动服务，    &lt;br /&gt;&lt;strong&gt;5&lt;/strong&gt;打开ArcGIS Administrator,选择ArcInfo（浮动使用）将licensemanager改成localhost,如图片所示操作顺序。    &lt;br /&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201110/201110180949285610.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/201110/201110180949307048.png" width="438" height="333" /&gt;&lt;/a&gt;     &lt;br /&gt;就这么简单！&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;下载地址： &lt;/strong&gt;&lt;a href="http://yunfile.com/file/xqiushi/1c94638d/"&gt;ArcGIS注册机.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/2216122.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2011/10/18/2216122.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2011/08/02/2125588.html</id><title type="text">Flex开发必知（1）</title><summary type="text">如何设定Flash的大小 ？答：（1）通过ActionScript编译器参数添加-default-size width height(2) 第二种方法就是通过类文件种的 metadata 来改变设定。 Metadata 中包含的语句不会立即被解释，但是在编译的时候编译会去检测。[SWF(width="800", height="600", backgroundColor="#ffffff", frameRate="31")]处理数值型时，需要在头部或者尾部加0或者其他字符？答: 用 NumberFormat 对象更</summary><published>2011-08-02T14:45:00Z</published><updated>2011-08-02T14:45:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2011/08/02/2125588.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2011/08/02/2125588.html"/><content type="html">&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;如何设定&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Flash&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的大小&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;？&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答：（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;）通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;ActionScript&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;编译器参数添加&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;-default-size width height&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;(2) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;第二种方法就是通过类文件种的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; metadata &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;来改变设定。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; Metadata &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中包含的语句不会立即被解释，但是在编译的时候编译会去检测。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;[SWF(width="800", height="600", backgroundColor="#ffffff", frameRate="31")]&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;处理数值型时，需要在头部或者尾部加&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;或者其他字符？&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;: &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; NumberFormat &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;对象更简单更灵活。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;NumberFormat &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;类是个自定义类，可到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; http://www.rightactionscript.com/ascb &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;下载。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;如何生成随机数？&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答：使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; Math.random( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;方法生成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; 0 &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;999999 &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;的随机数。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;但有时候需要唯一随机数，唯一随机数经常在产生唯一的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; URL &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;时用到。就是在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; URL &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;后加上个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;URL &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;，因此浏览器总是会去调用远程服务器而不是访问缓存，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;NumberUtilities.getUnique( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;返回基于毫秒的数字&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;如何计算两点间距离&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;var c:Number = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;在数组首部和尾部添加和删除元素&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Push&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;是在数组尾部添加元素，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;unshift&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;方法是在数组头部添加元素&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;splice( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;方法删除指定位置的元素，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; pop( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;删除尾部元素，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; shift( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;删除首部元素&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;数组如何转换成字符串&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答：使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;join&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;方法&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;var letters:Array = ["a", "b", "c"];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;trace(letters.join("|")); // &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;显示&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; : a|b|c&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Flash&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;内部是如何工作的？&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;答：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Flash Player &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;现在把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; ActionScript &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;虚拟机&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; (AVM) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;和渲染引擎两块功能集成在一起了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; AVM &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;完成&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;执行&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; ActionScript &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;代码，而渲染引擎负责在屏幕上绘制对象，绘制对象需要两步骤：&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; ActionScript &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;引擎创建可视化对象。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;渲染引擎把可视化对象绘制在屏幕上。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;第一步用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; new &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;操作符创建可视化对象实例，任何直接或间接继承自&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; DisplayObject &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;类的实例都可以添加到可视化对象列表中。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;用下列代码创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;TextField &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;var hello:TextField = new TextField( );&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;上面的代码在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; AVM &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;中创建了一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; TextField display &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;对象，但是该对象没有绘制在屏幕上，因为&lt;/span&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;它还不存在于渲染引擎里，要把它放到渲染引擎里需要添加该对象到可视化对象列表，通过调用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;DisplayObjectContainer &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;实例的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; addChild( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt; addChildAt( ) &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin"&gt;方法添加。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/2125588.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2011/08/02/2125588.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2010/11/30/1892368.html</id><title type="text">ArcGIS Server 10 问题汇总</title><summary type="text">最近一直在用ArcGIS Server 来做项目，但由于底层并不是使用flex api，而是使用自己研发的框架，所以使用过程中碰到的问题也是很多，问题先放这里，慢慢汇总。 1、查询结果乱码？查询图层相关信息无法查询等问题？ 答：凡是涉及到中文的，可以将以下几步都做了，免得影响相关操作。 （1）设置AGS内部中间件的编码为UTF，ArcGIS Server内部中间件为tomcat ，一般设置其下C...</summary><published>2010-11-30T12:16:00Z</published><updated>2010-11-30T12:16:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/30/1892368.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/30/1892368.html"/><content type="html">&lt;p&gt;最近一直在用ArcGIS Server 来做项目，但由于底层并不是使用flex api，而是使用自己研发的框架，所以使用过程中碰到的问题也是很多，问题先放这里，慢慢汇总。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1、查询结果乱码？查询图层相关信息无法查询等问题？&lt;/strong&gt; &lt;p&gt;答：凡是涉及到中文的，可以将以下几步都做了，免得影响相关操作。 &lt;p&gt;（1）设置AGS内部中间件的编码为UTF，ArcGIS Server内部中间件为tomcat ，一般设置其下C:\Program Files (x86)\ArcGIS\Server10.0\java\manager\service\managerserver\conf&amp;nbsp; &lt;p&gt;下Server.xml文件中 conector标签属性，添加URIEncoding="utf-8"，防止乱码 &lt;p&gt;&amp;lt;Connector port="8399" maxHttpHeaderSize="8392" maxThreads="150" minSpareThreads="25" &lt;br&gt;maxSpareThreads="75" enableLookups="false" redirectPort="8343" acceptCount="100" c &lt;br&gt;disableUploadTimeout="true" &lt;strong&gt;URIEncoding="UTF-8" /&lt;/strong&gt;&amp;gt; &lt;p&gt;（2）mxd所有中文字符必须为偶数个字，如果不足，用全角空格补充。注意是全角，这一条很是变态。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;2、Features Service发布服务后无法启动？&lt;/strong&gt; &lt;p&gt;请检查所有数据来源必须来自于SDE中 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;3、在使用Features Server时（arcgis server 10 + sde 9.3）后，中文字段无法更新&lt;/strong&gt; &lt;p&gt;有可能出现这种情况 ，但我在使用arcsde 10后问题解决 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;4、Arcsde10 无法安装？&lt;/strong&gt; &lt;p&gt;Arcsde 10并不支持XP的操作系统 &lt;a href="http://support.esrichina-bj.cn/2010/0727/330.html"&gt;http://support.esrichina-bj.cn/2010/0727/330.html&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;５&lt;strong&gt;、export map方法不能使用？使用了show:图层编号没有作用？&lt;/strong&gt; &lt;p&gt;在使用了tile cache的情况下，export map方法不能再使用，必须重新发布服务，也就是说tile cache和Export map是两种不同的出图路径 &lt;p&gt;&amp;nbsp; &lt;p&gt;６、&lt;strong&gt;新建立REST服务不能使用&lt;/strong&gt; &lt;p&gt;请清除缓存&lt;a title="http://lpclub:8399/arcgis/rest/admin" href="http://lpclub:8399/arcgis/rest/admin"&gt;http://lpclub:8399/arcgis/rest/admin&lt;/a&gt;进去以后，手动清除缓存 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;7、WMS 、WFS 中文图层查询请求失败&lt;/strong&gt; &lt;p&gt;ArcGIS Server 对标准的OGC支持并不好，建议不要使用这些服务，采用AGS 自带的REST服务，像我在调用 WFS服务的时候就报 &lt;p&gt; &amp;lt;ows:ExceptionReport version="1.1.0" language="en" xmlns:ows="&lt;a href="http://www.opengis.net/ows&amp;quot;"&gt;http://www.opengis.net/ows"&lt;/a&gt;&amp;gt;&lt;br&gt;- &amp;lt;ows:Exception exceptionCode="InvalidParameterValue"&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;ows:ExceptionText&amp;gt;Table called &amp;#233;&amp;#229;&amp;#186;&amp;#230;&amp;#229;&amp;#167;&amp;#228;&amp;#188; wasn't found.&amp;lt;/ows:ExceptionText&amp;gt; &lt;br&gt;&amp;nbsp; &amp;lt;/ows:Exception&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/ows:ExceptionReport&amp;gt; &lt;p&gt;查询字符串：&lt;br&gt;&lt;a href="http://192.168.3.247:8399/arcgis/services/sq/MapServer/WFSServer?request=getfeature&amp;amp;typename=%E9%83%91%E5%BA%84%E6%9D%91%E5%A7%94%E4%BC%9A&amp;amp;version=1.0.0&amp;amp;service"&gt;http://192.168.3.247:8399/arcgis/services/sq/MapServer/WFSServer?request=getfeature&amp;amp;typename=%E9%83%91%E5%BA%84%E6%9D%91%E5%A7%94%E4%BC%9A&amp;amp;version=1.0.0&amp;amp;service&lt;/a&gt;= &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;8、在IE6下避免以 PNG 24 格式缓存地图服务&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Internet Explorer 6 在显示 PNG 24 影像的透明度方面具有局限性。按照以下步骤操作可避免这种情况：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;如果必须使用 Internet Explorer 6，则以 PNG 8、PNG 32 或 JPEG 格式缓存地图服务。  &lt;li&gt;使用 Internet Explorer 6 以外的其他浏览器来查看以 PNG 24 格式缓存的叠加地图服务。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;PNG(Portable Network Graphics)是W3C推荐的网页图片通用格式，但是Microsoft的IE6以下(IE7已经支持)没有把PNG的Alpha 通道打开，造成透明PNG图片的效果出不来。&lt;/p&gt; &lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/1892368.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/30/1892368.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2010/11/29/1891550.html</id><title type="text">ArcGIS Server 10 许可文件 Ecp</title><summary type="text">网络收集，仅供学习参考使用，本人不负任何责任哈！ 3dengine,100,ecp.arcgis.server,none,KGE784S1MGRMMBKYZ1613dserver,100,ecp.arcgis.server,none,VPH4ENBJ3Y831R1DF089arcgisserver,100,ecp.arcgis.server,none,D7MFFAZ8THZTPJR67072bin...</summary><published>2010-11-29T14:17:00Z</published><updated>2010-11-29T14:17:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/29/1891550.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/29/1891550.html"/><content type="html">&lt;p&gt;网络收集，仅供学习参考使用，本人不负任何责任哈！ &lt;p&gt;3dengine,100,ecp.arcgis.server,none,KGE784S1MGRMMBKYZ161&lt;br&gt;3dserver,100,ecp.arcgis.server,none,VPH4ENBJ3Y831R1DF089&lt;br&gt;arcgisserver,100,ecp.arcgis.server,none,D7MFFAZ8THZTPJR67072&lt;br&gt;bingmapseng,100,ecp.arcgis.server,none,QH1N8J6BZM7PGTJ89232&lt;br&gt;bingmapssvr,100,ecp.arcgis.server,none,OLPF80PYJCNJJ7GPE158&lt;br&gt;businessvr,100,ecp.arcgis.server,none,UTE4AE2CXR2XYNEBB205&lt;br&gt;defenseintleng,100,ecp.arcgis.server,none,TRCZY4S1MGRMMBKYZ067&lt;br&gt;defenseintlsvr,100,ecp.arcgis.server,none,LHH9HK9J5ZA46EDPN164&lt;br&gt;defenseuseng,100,ecp.arcgis.server,none,UTF457E50KE00FH23148&lt;br&gt;defenseussvr,100,ecp.arcgis.server,none,LHH30H4CE00LTJT46024&lt;br&gt;designer,100,ecp.arcgis.server,none,TRBZMD18RMLSPF002054&lt;br&gt;gdbedit,100,ecp.arcgis.server,none,WEJFRRF0C6JCE3MXE079&lt;br&gt;geostatserver,100,ecp.arcgis.server,none,UTF654S1MGRMMBKYZ201&lt;br&gt;imageextserver,100,ecp.arcgis.server,none,HC4RTXLPE9JEE3CPR167&lt;br&gt;interopengine,100,ecp.arcgis.server,none,MJJAFH5G1E612RZFF118&lt;br&gt;interopserver,100,ecp.arcgis.server,none,VPF0TRFN61B75E5HJ074&lt;br&gt;jtxserver,100,ecp.arcgis.server,none,JFB157E50KE00FH23053&lt;br&gt;maplexengine,100,ecp.arcgis.server,none,LHH40XLPE9JEE3CPR159&lt;br&gt;networkengine,100,ecp.arcgis.server,none,YYPMSNCN82E8AZJTR206&lt;br&gt;networkserver,100,ecp.arcgis.server,none,PMYHHAY5RHHMF5KHT131&lt;br&gt;schematicengine,100,ecp.arcgis.server,none,YYPDCAZ8THZTPJR67200&lt;br&gt;schematicsvr,100,ecp.arcgis.server,none,PM0L8NAF20BTKXNCD158&lt;br&gt;spatialengine,100,ecp.arcgis.server,none,B5JA84S1MGRMMBKYZ159&lt;br&gt;spatialserver,100,ecp.arcgis.server,none,JFBXLD18RMLSPF002237&lt;br&gt;standardengine,100,ecp.arcgis.server,none,UTF750PYJCNJJ7GPE061&lt;br&gt;svradvanced,100,ecp.arcgis.server,none,UTE0RNBJ3Y831R1DF145&lt;br&gt;svrenterprise,100,ecp.arcgis.server,none,TRB6A7E50KE00FH23206&lt;br&gt;svrstandard,100,ecp.arcgis.server,none,A3C0LPJ0A5FBAZ8LN139&lt;br&gt;trackingengine,100,ecp.arcgis.server,none,VPF1RK8GZP4ZXNX8A052&lt;br&gt;virtualearthsvr,100,ecp.arcgis.server,none,FA0N5C04SE0H9KB10133&lt;/p&gt; &lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/1891550.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/29/1891550.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2010/11/02/1867450.html</id><title type="text">基于flex及SVG技术打造交互式地图（数据篇）</title><summary type="text">通常在日常众多需要应用地图的过程中，很大程度并不需要使用到实际的地理坐标，而仅仅是作为一个普通显示方案来进行，因此，此时，通常来说会采用flash来进行实现，但flash也有天生的短板，也就是与后台数据交互会比较差点，前一阵子基于SVG以及Flex技术做了一个简单的销售地图，偶尔也在网上看到有人求助这方面，因此本着共享的精神，先回出来分享一下。</summary><published>2010-11-02T10:54:00Z</published><updated>2010-11-02T10:54:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/02/1867450.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/02/1867450.html"/><content type="html">&lt;p&gt;&lt;u&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;本文部分取自网络,其他文字版权归小能所有,转载麻烦标明出处,谢谢! 写作过程中也参阅了大量其他网络文档，如果您觉得侵犯版权，请和我联系：&lt;/font&gt;&lt;/u&gt;&lt;a href="mailto:chinazhousheng@gmail.com"&gt;&lt;font color="#ff0000"&gt;chinazhousheng#gmail.com&lt;/font&gt;&lt;/a&gt; &lt;/u&gt; &lt;p&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;前记：从某种意义上来说，这篇文章并不属于GIS专业方面的文章，但贴出来，仅作抛砖引玉作用，以期对GIS从业者对地图的应用有所启发。&lt;/font&gt;&lt;/u&gt;  &lt;p&gt;通常在日常众多需要应用地图的过程中，很大程度并不需要使用到实际的地理坐标，而仅仅是作为一个普通显示方案来进行，因此，此时，通常来说会采用flash来进行实现，但flash也有天生的短板，也就是与后台数据交互会比较差点，前一阵子基于SVG以及Flex技术做了一个简单的销售地图，偶尔也在网上看到有人求助这方面，因此本着共享的精神，先回出来分享一下。  &lt;p&gt;先上图再说。  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="402" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image002_thumb.jpg" width="639" border="0"&gt;&lt;/a&gt;  &lt;p&gt;基本功能及原理：销售地图可以与分别与饼图以及柱状图进行交互显示，以体现不同的业务功能，地图可根据不同的指标显示由浅至深的不同颜色。其整体基于flex技术来实现，其核心在于地图的显示，而地图的显示则是采用开源控件Degrafa来实现，而在degrafa中，各个面的形状则是借助于SVG技术来实现。  &lt;p&gt;&lt;b&gt;Degrafa&lt;/b&gt;是一套很强大的图形算法类库，并且开源，对各种曲线、面以及其他形状绘制提供了很好的支持。  &lt;p&gt;&lt;b&gt;SVG&lt;/b&gt;是基于可扩展标记语言（&lt;a href="http://zh.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;），用于描述二维&lt;a href="http://zh.wikipedia.org/wiki/%E7%9F%A2%E9%87%8F%E5%9B%BE%E5%BD%A2"&gt;矢量图形&lt;/a&gt;的一种图形格式。  &lt;p&gt;从上面的描述可以看出，整体功能基本上依赖于SVG的数据，因此，首先讲的是如何来根据一幅普通图片来获取SVG数据。  &lt;p&gt;地图数据制作的最终目的是将采集的数据应用至销售地图上，下面以中国地图的制作为例，详细的说明制作过程。  &lt;p&gt;&lt;b&gt;相关软件&lt;/b&gt;：svgDeveloper 1.0（仅试用期一个月）  &lt;p&gt;Photoshop  &lt;p&gt;&lt;b&gt;具体步骤&lt;/b&gt;：  &lt;p&gt;寻取合适的地图图片，可以网络上寻找相关的地图数据，而我们的中国地图如下所示：  &lt;p&gt;1、为了符合一致大小，请将图片的大小在photoshop或者其他图像处理软件中进行处理，将其大小修改成740宽、480宽。（注：单位都为像素）  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image004_2.jpg"&gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="267" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image004_thumb.jpg" width="409" border="0"&gt;&lt;/a&gt;  &lt;p&gt;2、打开svgDeveloper，新建一个Svg文件  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image006_2.jpg"&gt;&lt;img title="clip_image006" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="271" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image006_thumb.jpg" width="431" border="0"&gt;&lt;/a&gt;  &lt;p&gt;3、在以下代码中，修改宽度和长度为740、480  &lt;p&gt;&amp;lt;svg width="640" height="480" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"&amp;gt;  &lt;p&gt;4、下面准备将图片插入至svgDeveloper中，点击工具栏中的Image按钮  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image008_2.jpg"&gt;&lt;img title="clip_image008" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="97" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image008_thumb.jpg" width="410" border="0"&gt;&lt;/a&gt;  &lt;p&gt;鼠标呈十字状，在操作界面上进行拉框，一般拉满整个屏幕，结束后，会提示选择图片，此时，选择处理后的图片，点确定即可  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image010_2.jpg"&gt;&lt;img title="clip_image010" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="222" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image010_thumb.jpg" width="413" border="0"&gt;&lt;/a&gt;  &lt;p&gt;5、下面进行数据采集，适当放大图片后，点击钢笔工具  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image012_2.jpg"&gt;&lt;img title="clip_image012" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="81" alt="clip_image012" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image012_thumb.jpg" width="298" border="0"&gt;&lt;/a&gt;  &lt;p&gt;此时鼠标呈钢笔形状，此时依次在地图上沿着边界线进行点选择，注意的是，最好选择好合适的填充颜色 ，尤其注意透明度的选择，这样可以在选面时，避免纯色而无法看清边界线。  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image014_2.jpg"&gt;&lt;img title="clip_image014" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="255" alt="clip_image014" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/flexSVG_109CB/clip_image014_thumb.jpg" width="431" border="0"&gt;&lt;/a&gt;  &lt;p&gt;依次在地图上进行点选择，并最终形成一个闭合的圈，此时，可以在代码区域找到以下代码：  &lt;p&gt;&amp;lt;path d="M355 304L355.25 303.75L362 310L364 310L371 304L374 296L376 290C376 290 376 288 378 288C379 288 383 288 383 288L388 290L390 292C390 292 394 293 394 294C396 294 399 298 399 298L401 301L399 304L394 307L391 308L384 309L384 313L384 316L386 320L388 323L391 328L392 335L392 339L389 338L384 331L383 327L378 326L375 328L371 333L367 335L362 334L358 333L359 328L354 322L354 315L355 310Z" fill="#000000" fill-opacity="0.2" stroke="none" stroke-opacity="0" /&amp;gt;  &lt;p&gt;而相应的path 中的d信息即为我们所用，须注意的是，有时候可能线圈并没有闭合，此时，最后结束的字符可能没有Z，此时，可以人工给添加上&amp;#8220;Z&amp;#8221;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;数据篇暂告一段，如果大家还是有兴趣，我将在后面贴上代码及开发过程。&lt;/font&gt;&lt;/strong&gt;  &lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/1867450.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/02/1867450.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866375.html</id><title type="text">将应用程序从Flex 3迁移至Flex 4(转载)</title><summary type="text">在本指南中，我将介绍如何将一个实际应用程序从 Flex 3 迁移至 Flex 4。文中提供的示例涵盖了 Flex 应用程序开发的所有重要领域，包括 CSS、Spark 组件、自定义外观、嵌入字体等。 在您自己动手之转换之前，这看起来好像是一项艰巨的任务。如果您阅读了本指南之后，您就会发现Flex 4在组件架构、CSS改进、新状态机制和新图形标记语言FXG等各方面的优势。MX组件的向后兼容性和Fla...</summary><published>2010-11-01T08:43:00Z</published><updated>2010-11-01T08:43:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866375.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866375.html"/><content type="html">&lt;p&gt;在本指南中，我将介绍如何将一个实际应用程序从 Flex 3 迁移至 Flex 4。文中提供的示例涵盖了 Flex 应用程序开发的所有重要领域，包括 CSS、Spark 组件、自定义外观、嵌入字体等。 &lt;p&gt;在您自己动手之转换之前，这看起来好像是一项艰巨的任务。如果您阅读了本指南之后，您就会发现Flex 4在组件架构、CSS改进、新状态机制和新图形标记语言FXG等各方面的优势。MX组件的向后兼容性和Flash Builder 4的优化都让这个转化过程变的简单易行 &lt;p&gt;本指南中使用的示例文件包括原始 Flex 3 应用程序及转换后的 Flex 4 应用程序的源代码。完成指南中所述步骤后，您就可以使用完成后的 Flex 4 应用程序源代码进行引用了。 &lt;p&gt;本文包含以下内容： &lt;ul&gt;&lt;li&gt;打开项目&lt;/li&gt;&lt;li&gt;命名空间更改&lt;/li&gt;&lt;li&gt;警告清除&lt;/li&gt;&lt;li&gt;更新应用程序及其背景&lt;/li&gt;&lt;li&gt;布局和样式&lt;/li&gt;&lt;li&gt;从 ViewStack 到 Flex 4 States&lt;/li&gt;&lt;li&gt;添加渐变效果&lt;/li&gt;&lt;li&gt;转换 SampleMicPanel 自定义视图&lt;/li&gt;&lt;li&gt;转换 PitchDetection 自定义视图&lt;/li&gt;&lt;li&gt;转换 InformationPanel 自定义视图&lt;/li&gt;&lt;li&gt;转换 InputDeviceSelector 自定义视图 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;打开项目&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;首先，打开 Flex 3 项目，将设置更改为指向 Flex 4.1 SDK。我将简要介绍重新对其进行编译所需改变，以及不使用MX兼容模式时Flex4的视觉效果。 &lt;ol&gt;&lt;li&gt;将 flex3_to_flex4_transitioning.zip 内的 MicrophoneExamplesFlex3.zip 示例文件解压至您选择的文件夹。&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;在 Flash Builder 4 中选择 File -&amp;gt; Import -&amp;gt; Flash Builder Project。&lt;/li&gt;&lt;li&gt;选择 Project Folder。&lt;/li&gt;&lt;li&gt;单击 Browse，导航至刚才解压的 MicrophoneExamplesFlex3 文件夹，并单击 OK。&lt;/li&gt;&lt;li&gt;单击 Finish。 &lt;p&gt;原始项目使用 Flex 3.2 SDK（AIR 2.0 beta 将其覆盖）。如果要构建项目，您将会在 Problems 面板中看到一个错误提示信息&amp;#8220;Unknown Flex SDK: &amp;#8230;&amp;#8221;。要解决这一问题，您需要更改该项目使用的 SDK 版本。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;下载和安装包含 AIR 2.0 的 &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4"&gt;Flex 4.1 SDK&lt;/a&gt;。（请参阅安装说明中的发布说明。）&lt;/li&gt;&lt;li&gt;右键单击项目并选择属性以打开属性对话框。&lt;/li&gt;&lt;li&gt;选择左边的 Flex Compiler 类别。&lt;/li&gt;&lt;li&gt;在 Flex SDK Version 部分，选择 Flex 4.1 SDK。&lt;/li&gt;&lt;li&gt;单击 OK。 &lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt;如果您使用不同的 Flex 4 和 AIR 2.0 SDK 或 Flex 4.1 版本，请使用 Configure Flex SDKs 并选择合适的 SDK。 &lt;p&gt;因为原始应用程序使用 AIR 2.0 beta 版本，您需要更新应用程序描述符文件中的命名空间。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;打开 src 文件夹中的 MicrophoneExamples-app.xml 文件并找到下列代码行： &amp;lt;application xmlns="http://ns.adobe.com/air/application/2.0beta2"&amp;gt; &lt;/li&gt;&lt;li&gt;删除&amp;#8220;beta2&amp;#8221;，代码行显示如下：&lt;/li&gt;&lt;li&gt;保存更改并构建项目。 &lt;p&gt;应用程序将进行无错误编译（尽管可能会出现一些警告）。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;选择 Run &amp;gt; Run &amp;gt; MicrophoneExamples并运行&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;图1和图2显示出Flex3版本和Flex4版本的应用程序的不同： &lt;p&gt;&lt;img title="clip_image003" src="http://www.adobe.com/content/dam/Adobe/en/devnet/flex/articles/flex3_to_flex4_transitioning/fig01.jpg" border="0"  alt="" /&gt; &lt;p&gt;&lt;strong&gt;图 1. 用 Flex 3 SDK 构建的原始应用程序。&lt;/strong&gt; &lt;p&gt;&lt;img title="clip_image005" src="http://www.adobe.com/content/dam/Adobe/en/devnet/flex/articles/flex3_to_flex4_transitioning/fig02.jpg" border="0"  alt="" /&gt; &lt;p&gt;&lt;strong&gt;图 2. 使用 Flex 4 SDK 构建的应用程序，无任何代码更改。 &lt;/strong&gt;&lt;p&gt;新旧应用程序的差异是由于新 Flex 4 默认 CSS 和主题值产生的。如果您希望 Flex 4 编译器可以严格兼容旧的 MX 组件，可以在 Flex 项目的 Flex Compiler 对话框中选择&amp;#8220;Use Flex 3 compatibility mode&amp;#8221;选项。 &lt;p&gt;另外请注意：Flex 4.1 SDK 要求的最低版本播放器是 Flash Player 10。 &lt;p&gt;&lt;strong&gt;命名空间更改&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;迁移过程的第二步是进行命名空间的更改。新命名空间将 MXML 2006 命名空间分为三个部分：fx、s 和 mx。这三个部分分别是 MXML 2009 语言和构造（fx）、Spark 组件（s）和 MX 组件（mx）。 &lt;p&gt;更改命名空间的步骤如下： &lt;ol&gt;&lt;li&gt;打开主 MicrophoneExamples.mxml 应用程序文件。&lt;/li&gt;&lt;li&gt;删除旧命名空间声明： xmlns:mx="http://www.adobe.com/2006/mxml" &lt;/li&gt;&lt;li&gt;插入新命名空间声明： xmlns:fx="http://ns.adobe.com/mxml/2009" &lt;br/&gt;xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;xmlns:mx="library://ns.adobe.com/flex/mx" &lt;/li&gt;&lt;li&gt;保存更改并构建项目。 &lt;p&gt;更改命名空间产生两个错误。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;定位错误（文件第 24 行和第 25 行附近）并分别将 mx:Style 和 mx:Script 更改为 fx:Style 和 fx:Script。 &lt;p&gt;现在命名空间可以覆盖不同的组件集，两个组件可能名称相同，如 s:Button 和 mx:Button。命名空间的目的是清晰定义不同的组件包；这对于 MXML 及 CSS 文件和样式都很重要。Flex 4 包含对 CSS 的多命名空间支持。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;打开 embed_assets/stylesheet_common.css 文件，并将 Spark 和 MX 命名空间添加到文件的顶部，如下所示： @namespace s "library://ns.adobe.com/flex/spark"; &lt;br/&gt;@namespace mx "library://ns.adobe.com/flex/mx";  &lt;p&gt;您需要将 MX 命名空间添加到 MX 组件。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;在 WindowedApplication、Application、Window、ComboBox、Hslider、RadioButton 和 ToolTip 前添加 mx|。 &lt;p&gt;剩余样式是特定样式名称。 &lt;p&gt;这时，您也可以利用时机处理主题颜色编译器警告。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;将主题颜色更改为 chrome 颜色。 &lt;p&gt;请注意：chrome 颜色并非主题颜色的真实替代，而是为了本文中应用程序之目的。新 Spark 组件默认样式集与 Halo 主题不同。 &lt;p&gt;文件的前几行显示如下： /** &lt;br/&gt; * Common CSS definitions for the Adobe Directory&lt;br/&gt; */&lt;br/&gt;@namespace s "library://ns.adobe.com/flex/spark";&lt;br/&gt;@namespace mx "library://ns.adobe.com/flex/mx";&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;mx|WindowedApplication,&lt;br/&gt;mx|Application,&lt;br/&gt;mx|Window&lt;br/&gt;{&lt;br/&gt;    /* make app window transparent */&lt;br/&gt;   font-family: "Myriad Web";&lt;br/&gt;   font-size: 12;&lt;br/&gt;   font-anti-alias-type:advanced;&lt;br/&gt;   disabled-overlay-alpha: 0;&lt;br/&gt;   chrome-color: #444444;&lt;br/&gt;   color: #AAAAAA;&lt;br/&gt;   text-roll-over-color: #AAAAAA;&lt;br/&gt;   text-selected-color: #AAAAAA;&lt;br/&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;警告清除&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这时，在进行下一步操作之前，您还需要处理一个编译器警告。您将会看到一个警告显示不赞成使用 Application.application 并建议使用 FlexGlobals.topLevelApplication。您无法绑定 FlexGlobals，但是可以采用一种不同的办法，在 InformationPanel.mxml 中创建一个公共的可绑定属性并在 MicrophoneExamples.mxml 中对其进行引用。 &lt;ol&gt;&lt;li&gt;在 InformationPanel.mxml 中定位下列代码： &amp;lt;mx:Script&amp;gt;&lt;br/&gt;   &amp;lt;![CDATA[&lt;br/&gt;      import mx.core.Application;&lt;br/&gt;   ]]&amp;gt;&lt;br/&gt;&amp;lt;/mx:Script&amp;gt;&lt;br/&gt;&amp;lt;mx:Label styleName="titleText" text="CREDITS {Application.application.applicationVersion}" /&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;将上述代码更改为如下新的代码： &amp;lt;mx:Script&amp;gt;&lt;br/&gt;     &amp;lt;![CDATA[&lt;br/&gt;         [Bindable]&lt;br/&gt;         public var applicationVersion:String = "";&lt;br/&gt;     ]]&amp;gt;&lt;br/&gt;&amp;lt;/mx:Script&amp;gt;&lt;br/&gt;&amp;lt;mx:Label styleName="titleText" text="CREDITS {applicationVersion}" /&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;在 MicrophoneExamples.mxml 中定位下列代码： &amp;lt;view:InformationPanel id="pnlInfo" width="100%" height="100%" styleName="mainPaddedBox" /&amp;gt;&lt;/li&gt;&lt;li&gt;添加 applicationVersion 属性： &amp;lt;view:InformationPanel id="pnlInfo" width="100%" height="100%" styleName="mainPaddedBox"&lt;br/&gt;                applicationVersion="{applicationVersion}" /&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;更新应用程序及其背景&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;主应用程序文件包含组成应用程序的几个组件。在这一部分和下一部分，您将将旧的 MX 组件更改为其 Spark 等效组件并探索对应用程序进行布局和设计样式的新方法。 &lt;p&gt;首先要更改的是主 WindowedApplication 类，其中您将将 mx:WindowedApplication 更新为 s:WindowedApplication。 &lt;p&gt;您还需要更改其他一些属性。需要将布局、showFlexChrome、horizontalScrollPolicy 和 verticalScrollPolicy 等 4 个属性删除。布局属性是 Spark 中的 LayoutBase 类（而不是 String 类），且通常在 MXML 中定义。一个 Spark WindowedApplication 组件的默认布局相当于旧的绝对布局属性。 &lt;p&gt;对于 showFlexChrome，您将希望设置 showStatusBar="false"，以删除 Flex 状态栏 chrome（默认情况下，Flex 状态栏 chrome 在 Spark WindowedApplication 组件中是打开的）。 &lt;p&gt;在 Spark 中进行滚动通常是在 Skin 中进行处理的，且对于其组件也同样如此。默认情况下，Spark WindowedApplication 不为应用程序绘制任何 chrome；如果需要，应该开发人员来绘制 chrome。 &lt;p&gt;在原始代码中，使用 VBox 和 mainBox CSS 样式创建一个自定义背景。mainBox 样式仅沿应用程序的宽度和高度提供一个灰色背景。在新应用程序中，它可以从主应用程序中删除 Vbox 组件并从 CSS 文件中删除 mainBox 样式。然后您可以将 backgroundColor="0x666666" 添加到主应用程序类中，以达到同样的效果。 &lt;p&gt;实现上述更改的步骤如下： &lt;ol&gt;&lt;li&gt;在 MicrophoneExamples.mxml 中定位下列代码： &amp;lt;mx:WindowedApplication &lt;br/&gt;   xmlns:fx="http://ns.adobe.com/mxml/2009" &lt;br/&gt;   xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;   xmlns:mx="library://ns.adobe.com/flex/mx"&lt;br/&gt;&lt;br/&gt;   showEffect="Fade" hideEffect="Fade"&lt;br/&gt;   width="460" height="210" showFlexChrome="false"&lt;br/&gt;   creationComplete="showMain();"&lt;br/&gt;   horizontalScrollPolicy="off" verticalScrollPolicy="off"&lt;br/&gt;   layout="absolute" &lt;br/&gt;   xmlns:view="view.*" &lt;br/&gt;   viewSourceURL="srcview/index.html"&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;用如下代码更新WindowedApplication组件： &amp;lt;s:WindowedApplication &lt;br/&gt;   xmlns:fx="http://ns.adobe.com/mxml/2009" &lt;br/&gt;   xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;   xmlns:mx="library://ns.adobe.com/flex/mx"&lt;br/&gt;   xmlns:view="view.*"&lt;br/&gt;   showEffect="Fade" hideEffect="Fade"&lt;br/&gt;   width="460" height="210"&lt;br/&gt;   creationComplete="showMain();"&lt;br/&gt;   showStatusBar="false"&lt;br/&gt;   backgroundColor="0x666666"&lt;br/&gt;    viewSourceURL="srcview/index.html"&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;通过删除下列行删除 Vbox： &amp;lt;mx:VBox id="bgBox" width="460" height="210" styleName="mainBox" /&amp;gt; &lt;/li&gt;&lt;li&gt;将结束标记从 &amp;lt;/mx:WindowedApplication&amp;gt; 更改为 &amp;lt;/s:WindowedApplication&amp;gt;。&lt;/li&gt;&lt;li&gt;从 stylesheet_common.css 中删除 mainBox 定义。 &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;布局和样式&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在 Flex 3 中，布局和设置样式的能力（填充、背景颜色等）被混合到一个组件中。将麦克风应用程序（或其他任何应用程序）从 Flex 3 迁移至 Flex 4 时，您会注意到可以独立处理布局和样式的区域。 &lt;p&gt;例如，在 MicrophoneExamples.mxml 中检查首个 Hbox。Hbox 在 Spark 中没有直接的一对一组件匹配，尤其是 titleBox 样式类定义 CSS 文件中的填充、边框和背景值后。在 Spark 中，Group 类被设计为轻量级布局和容器类，但是它们不提供任何外观自定义功能。对于外观自定义功能或任何展示组件，您需要使用一个可以扩展 SkinnableComponent 的类。您可以使用 SkinnableContainer 在容器中展示可视内容和布局元素。这将打开很多选项，并导致些许混乱。 &lt;p&gt;因为 Hbox 提供可视内容和布局，使用 SkinnableContainer 类是个好主意。 &lt;p&gt;以下是所有更改都完成后的 SkinnableContainer；具体步骤见下文。 &amp;lt;s:SkinnableContainer &lt;br/&gt;      skinClass="controls.skins.TopBarSkin" width="100%"&amp;gt;&lt;br/&gt;      &amp;lt;s:Group y="8" mouseDown="startMove(event)" mouseUp="movingReferenceEvent = null"&amp;gt;&lt;br/&gt;         &amp;lt;s:BitmapImage source="@Embed('embed_assets/mic16.png')" /&amp;gt;&lt;br/&gt;         &amp;lt;s:Label text="MICROPHONE" styleName="titleText" x="18" y="3" backgroundAlpha="0" /&amp;gt;&lt;br/&gt;         &amp;lt;s:Label id="txtExample" text="{viewName}" x="100" y="3" styleName="titleTextGrey" backgroundAlpha="0" /&amp;gt;&lt;br/&gt;      &amp;lt;/s:Group&amp;gt;&lt;br/&gt;&lt;br/&gt;      &amp;lt;s:HGroup mouseDown="startMove(event)" mouseUp="movingReferenceEvent = null"&lt;br/&gt;         verticalAlign="bottom" width="100%" horizontalAlign="right" gap="10"&amp;gt;&lt;br/&gt;         &amp;lt;s:Button styleName="leftArrowButton" click="changeView('left')" /&amp;gt;&lt;br/&gt;         &amp;lt;s:Button styleName="rightArrowButton" click="changeView('right')" /&amp;gt;&lt;br/&gt;         &amp;lt;s:ToggleButton id="btnInfo" styleName="helpButton" click="changeView('info')"&lt;br/&gt;            tabEnabled="false" toolTip="Information" /&amp;gt;&lt;br/&gt;         &amp;lt;s:Button styleName="appCloseButton" click="stage.nativeWindow.close()" tabEnabled="false" toolTip="Close" /&amp;gt;&lt;br/&gt;      &amp;lt;/s:HGroup&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;/s:SkinnableContainer&amp;gt;&lt;br/&gt;&lt;ol&gt;&lt;li&gt;首先在 MicrophoneExamples.mxml 中用 s:SkinnableContainer 代替 mx:Hbox。&lt;/li&gt;&lt;li&gt;在名为 controls.skins 的项目中创建一个新包。&lt;/li&gt;&lt;li&gt;在该包中，使用一个 spark.components.SkinnableContainer 主机组件创建一个名为 TopBarSkin.mxml 的新 MXML 外观。&lt;/li&gt;&lt;li&gt;将下列代码复制到 TopBarSkin.mxml，覆盖其默认内容。 &amp;gt; &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br/&gt;&amp;lt;s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled="0.5"&amp;gt; &lt;br/&gt;    &amp;lt;fx:Metadata&amp;gt;&lt;br/&gt;    &amp;lt;![CDATA[ &lt;br/&gt;        [HostComponent("spark.components.SkinnableContainer")]&lt;br/&gt;    ]]&amp;gt;&lt;br/&gt;    &amp;lt;/fx:Metadata&amp;gt; &lt;br/&gt;    &lt;br/&gt;    &amp;lt;s:states&amp;gt;&lt;br/&gt;        &amp;lt;s:State name="normal" /&amp;gt;&lt;br/&gt;&lt;br/&gt;        &amp;lt;s:State name="disabled" /&amp;gt;&lt;br/&gt;    &amp;lt;/s:states&amp;gt;&lt;br/&gt;    &amp;lt;s:Rect id="background" width="100%" height="35"&amp;gt;&lt;br/&gt;        &amp;lt;s:fill&amp;gt;&lt;br/&gt;            &amp;lt;s:SolidColor color="0x212121" /&amp;gt;&lt;br/&gt;        &amp;lt;/s:fill&amp;gt;&lt;br/&gt;&lt;br/&gt;    &amp;lt;/s:Rect&amp;gt;&lt;br/&gt;    &amp;lt;s:Line width="100%" y="34"&amp;gt;&lt;br/&gt;        &amp;lt;s:stroke&amp;gt;&lt;br/&gt;            &amp;lt;s:SolidColorStroke  color="0x121212" /&amp;gt;&lt;br/&gt;        &amp;lt;/s:stroke&amp;gt;&lt;br/&gt;    &amp;lt;/s:Line&amp;gt;&lt;br/&gt;&lt;br/&gt;    &lt;br/&gt;    &amp;lt;s:HGroup id="contentGroup" &lt;br/&gt;        paddingLeft="10" paddingTop="6" paddingRight="10" paddingBottom="6"&lt;br/&gt;        horizontalAlign="left" verticalAlign="middle"&lt;br/&gt;        width="100%" /&amp;gt;&lt;br/&gt;&amp;lt;/s:Skin&amp;gt;&lt;br/&gt;&lt;p&gt;该外观通过使用 titleBox CSS 样式表中的值绘制一个 Rect 和 Line 来创建背景和底部边框。SkinnableContainer 寻找一个名为 contentGroup 的外观部件，在该外观中是一个 Hgroup，其值是通过 titleBox 样式在原始 Hbox 上使用的填充值和布局值。 &lt;p&gt;在原始 Hbox 内，首个容器是一个包含应用程序麦克风图标和部分标签的 Canvas 组件。其目的仅仅是使用部分特定值部署组件。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;将 mx:Canvas 更改为 s:Group。 &lt;p&gt;在 Canvas 内，有一个 Image 组件： &amp;lt;mx:Image source="embed_assets/mic16.png" y="3" /&amp;gt; &lt;p&gt;mx:Image 类支持动态和静态图像加载，但是使用 s:BitmapImage 将更加快速，且使用的类也更小。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;将 mx:Image 行更改为： &amp;lt;s:BitmapImage source="@Embed('embed_assets/mic16.png')" /&amp;gt; &lt;/li&gt;&lt;li&gt;将 mx:Label 组件更改为 s:Label 组件。 &lt;p&gt;此更改还要求对 CSS 文件进行部分更改。Flex 4 Spark 控件使用新的 Flash Player 10 文本布局框架（TLF）展示文本；它更加新&lt;em&gt;(&lt;/em&gt;&lt;em&gt;先进)&lt;/em&gt;且可以提供几种新功能，包括双向文本。它与嵌入字体的工作方式也不同。在使用 @font-face 嵌入不同字体的 CSS 文件中，您需要添加 embedAsCFF: true;。您还需要为希望使用嵌入字体的特定样式类添加 fontLookup: embeddedCFF;。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;在 stylesheet_common.css 文件中进行下列更改： @font-face &lt;br/&gt;{&lt;br/&gt;   src:url("/embed_assets/fonts/MYRIAD.TTF");&lt;br/&gt;   font-family: "Myriad Web";&lt;br/&gt;   advanced-anti-aliasing: true;&lt;br/&gt;   embedAsCFF: true; &lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;@font-face &lt;br/&gt;{&lt;br/&gt;   src:url("/embed_assets/fonts/MYRIADB_0.TTF");&lt;br/&gt;   font-family: "Myriad Web";&lt;br/&gt;   font-weight: bold;&lt;br/&gt;   advanced-anti-aliasing: true;&lt;br/&gt;   embedAsCFF: true; &lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;@font-face &lt;br/&gt;{&lt;br/&gt;    src:url("/embed_assets/fonts/MyriadPro-Black.otf");&lt;br/&gt;    font-family: "Myriad Pro Black";&lt;br/&gt;    embedAsCFF: true; &lt;br/&gt;}&lt;br/&gt;.titleText, .titleTextGrey, .titleTextBlack&lt;br/&gt;{&lt;br/&gt;    font-size: 12;&lt;br/&gt;    color: #FFFFFF;&lt;br/&gt;    font-family: "Myriad Pro Black";&lt;br/&gt;    fontLookup: embeddedCFF;&lt;br/&gt;}&lt;br/&gt;&lt;p&gt;默认情况下，s:Label 有一个背景颜色，因此您会希望通过用 CSS 文件中的 background-alpha: 0; 添加一个 s|Label CSS 样式使背景颜色不可见。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;将下列代码添加到 stylesheet_common.css： s|Label &lt;br/&gt;{&lt;br/&gt;   background-alpha: 0;&lt;br/&gt;   font-size: 12;&lt;br/&gt;}&lt;br/&gt;&lt;/li&gt;&lt;li&gt;同样，在 Label 组件上添加 y="3" 并将两个像素添加到标签组件的 x 值，以使文本重新排行，因为 TLF 的默认定位： &amp;lt;s:Label text="MICROPHONE" styleName="titleText" x="18" y="3" backgroundAlpha="0" /&amp;gt;&lt;br/&gt;&amp;lt;s:Label id="txtExample" text="{viewName}" x="100" y="3" styleName="titleTextGrey&lt;br/&gt;&lt;p&gt;原始 Hbox 的第二组组件包含右边的 4 个按钮：左导航、右导航、帮助和关闭。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;容器类 mx:Hbox 不包含任何可视内容，因此将其更改为 s:Hgroup，保留水平布局。同样，将 horizontalGap 属性更改为 gap。 &lt;p&gt;您需要记住 Spark 按钮上的一些更改。您将看到原始 btnInfo 按钮的 toggle 为&amp;#8220;真&amp;#8221;。默认情况下，Spark 按钮不实现 toggle 功能。有一个选择状态的按钮有一个 Spark ToggleButton。下一个大问题是，在默认情况下，Spark 按钮的风格不支持通过样式进行向上、向下、over 和禁用外观操作。幸运的是这不难处理。您基本想要为按钮状态使用图像，并弃用普通按钮外观的所有绘画，这就是 Flex 4 外观自定义功能中的所有内容。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;将 mx:Button 组件更改为 s:Button 组件&amp;#8212;&amp;#8212;如果是 btnInfo，则更改为 s:ToggleButton。&lt;/li&gt;&lt;li&gt;在 controls.skins 包中创建一个名为 IconButtonSkin 的新 MXML Skin。&lt;/li&gt;&lt;li&gt;将下列代码复制到 IconButtonSkin.mxml： &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br/&gt;&amp;lt;s:SparkSkin xmlns:fx=http://ns.adobe.com/mxml/2009&lt;br/&gt;xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;           xmlns:fb="http://ns.adobe.com/flashbuilder/2009"&lt;br/&gt;      currentStateChanging="onCurrentStateChanging(event)"&amp;gt;&lt;br/&gt;    &amp;lt;fx:Metadata&amp;gt;[HostComponent("spark.components.supportClasses.ButtonBase")]&amp;lt;/fx:Metadata&amp;gt;&lt;br/&gt;    &lt;br/&gt;    &amp;lt;!-- host component --&amp;gt;&lt;br/&gt;    &amp;lt;fx:Script fb:purpose="styling"&amp;gt;&lt;br/&gt;        &amp;lt;![CDATA[         &lt;br/&gt;             &lt;br/&gt;         import mx.events.StateChangeEvent;&lt;br/&gt;         &lt;br/&gt;         private function onCurrentStateChanging(event:StateChangeEvent):void&lt;br/&gt;         {&lt;br/&gt;            switch (event.newState)&lt;br/&gt;            {&lt;br/&gt;               case "up":&lt;br/&gt;                  setIcon("upSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "over":&lt;br/&gt;                  setIcon("overSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "down":&lt;br/&gt;                  setIcon("downSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "disabled":&lt;br/&gt;                  setIcon("disabledSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "upAndSelected":&lt;br/&gt;                  setIcon("selectedUpSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "overAndSelected":&lt;br/&gt;                  setIcon("selectedOverSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "downAndSelected":&lt;br/&gt;                  setIcon("selectedDownSkin");&lt;br/&gt;                  break;&lt;br/&gt;               case "disabledAndSelected":&lt;br/&gt;                  setIcon("selectedDisabledSkin");&lt;br/&gt;                  break;&lt;br/&gt;            }&lt;br/&gt;         }&lt;br/&gt;         private function setIcon(type:String):void&lt;br/&gt;         {&lt;br/&gt;            if (hostComponent.getStyle(type) != null)&lt;br/&gt;            {&lt;br/&gt;               icon.source = hostComponent.getStyle(type);&lt;br/&gt;            }&lt;br/&gt;         }&lt;br/&gt;&lt;br/&gt;        ]]&amp;gt;        &lt;br/&gt;    &amp;lt;/fx:Script&amp;gt;&lt;br/&gt;&lt;br/&gt;    &lt;br/&gt;    &amp;lt;!-- states --&amp;gt;&lt;br/&gt;    &amp;lt;s:states&amp;gt;&lt;br/&gt;        &amp;lt;s:State name="up" /&amp;gt;&lt;br/&gt;        &amp;lt;s:State name="over" /&amp;gt;&lt;br/&gt;        &amp;lt;s:State name="down" /&amp;gt;&lt;br/&gt;        &amp;lt;s:State name="disabled" /&amp;gt;&lt;br/&gt;&lt;br/&gt;      &amp;lt;s:State name="upAndSelected" /&amp;gt;&lt;br/&gt;      &amp;lt;s:State name="overAndSelected" /&amp;gt;&lt;br/&gt;      &amp;lt;s:State name="downAndSelected" /&amp;gt;&lt;br/&gt;      &amp;lt;s:State name="disabledAndSelected" /&amp;gt;&lt;br/&gt;    &amp;lt;/s:states&amp;gt;&lt;br/&gt;    &lt;br/&gt;   &amp;lt;s:BitmapImage id="icon"&lt;br/&gt;               source="{hostComponent.getStyle('upSkin')}"&lt;br/&gt;               left="0" right="0" top="0" bottom="0" /&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;/s:SparkSkin&amp;gt;&lt;br/&gt;&lt;p&gt;该 Skin 文件中的代码侦听状态更改，然后使用状态值根据样式查找设置图标。样式是旧版的 mx:Button 的样式，因此无须更改 CSS 代码。请注意：代码还将检查样式是否存在以确认它没有试图设置一个无效的图像源。IconButtonSkin 不包含任何绘画代码或标签，仅包含一个单独的 s:BitmapImage。该组件的源属性被设置成 CSS 样式中设置的值。 &lt;p&gt;因为该应用程序没有其他按钮，您可以在 CSS 文件中为 s|Button 和 s|ToggleButton 设置默认外观，以新建 IconButtonSkin。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;将下列代码添加到 stylesheet_common.css： s|Button, s|ToggleButton&lt;br/&gt;{&lt;br/&gt;    skin-class: ClassReference("controls.skins.IconButtonSkin");&lt;br/&gt;}&lt;br/&gt; &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;现在所有向上、over 和其他状态的特定按钮 CSS 类样式将与新的 s|Button 和 s|ToggleButton 外观文件一起工作。 &lt;p&gt;&lt;strong&gt;从 ViewStack 到 Flex 4 states &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Flex 4 对 MXML 中状态工作的方式进行了彻底革新，新版方法比旧版方法（使用旧版方法时，所有状态逻辑都在状态 MXML 块中）更加简易。您可以使用 Flex 4 状态机制代替 mx|ViewStack 功能的大部分简单案例。 &lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt;无 Spark ViewStack 直接组件替代，但是如果您需要旧版 selectedChild 属性和相似的语法，您可以从网上找到第三方 ViewStack Flex 4 Spark 组件。 &lt;ol&gt;&lt;li&gt;&lt;p&gt;要使用新状态方法，请打开 MicrophoneExamples.mxml 并添加三种状态，分别用于 ViewStack 中声明的三种视图： &amp;lt;s:states&amp;gt;&lt;br/&gt;   &amp;lt;s:State name="sampleMic" /&amp;gt;&lt;br/&gt;   &amp;lt;s:State name="pitchDetection" /&amp;gt;&lt;br/&gt;   &amp;lt;s:State name="info" /&amp;gt;&lt;br/&gt;&amp;lt;/s:states&amp;gt;&lt;br/&gt;&lt;p&gt;注：&amp;lt;s:states&amp;gt; 块必须放置于任何内容组件之前，否则您将收到下列编译器错误提示：&amp;#8220;Child elements of 'WindowedApplication' serving as the default property value for 'mxmlContentFactory' must be contiguous. MicrophoneExamples.mxml /microphone/src line 57 Flex Problem&amp;#8221;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;接下来，删除 mx:ViewStack 并使用各自的状态名称为 mx:ViewStack 中每个自定义组件添加 includedIn 属性：   &amp;lt;view:SampleMicPanel id="pnlMic" left="0" top="40" right="0" bottom="0" &lt;br/&gt;                         includeIn="sampleMic"&lt;br/&gt;                         micSelector="{micSelector}"/&amp;gt;&lt;br/&gt;    &amp;lt;view: PitchDetection id="pnlTuner" left="0" top="40" right="0" bottom="0" &lt;br/&gt;                         includeIn="pitchDetection"&lt;br/&gt;                         micSelector="{micSelector}" /&amp;gt;&lt;br/&gt;    &amp;lt;view:InformationPanel id="pnlInfo" left="0" top="40" right="0" bottom="0"&lt;br/&gt;                           paddingLeft="10" paddingTop="8" paddingRight="10"&lt;br/&gt;                           includeIn="info"&lt;br/&gt;            applicationVersion="{applicationVersion}" /&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;构建项目。 &lt;p&gt;在 Problems 面板中，您将在 MicrophoneExamplesSource.as 中看到三个错误，分别在下列三行中： vsMain.selectedChild = pnlInfo;&lt;br/&gt;&lt;br/&gt;vsMain.selectedChild = pnlMic;&lt;br/&gt;&lt;br/&gt;vsMain.selectedChild = pnlTuner;&lt;br/&gt;&lt;p&gt;您需要更改这些行上的 currentState，而不是更改 selectedChild。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;在 MicrophoneExamplesSource.as 中编辑上述所有行，并将这些行更改为： currentState = "info";&lt;br/&gt;&lt;br/&gt;currentState = "sampleMic";&lt;br/&gt;&lt;br/&gt;currentState = "pitchDetection";&lt;br/&gt;&lt;p&gt;当 currentState 属性值更改时，触发事件，用于状态转换。以下是 MicrophoneExamplesSource.as 代码更改：if (view != "info")&lt;br/&gt;   {&lt;br/&gt;      btnInfo.selected = false;&lt;br/&gt;   }&lt;br/&gt;   else&lt;br/&gt;   {&lt;br/&gt;      viewName = "(Application Info)";&lt;br/&gt;      currentState = "info";&lt;br/&gt;   }&lt;br/&gt;   if (view == "mic")&lt;br/&gt;   {&lt;br/&gt;      viewName = "(Record &amp;amp; Playback)";&lt;br/&gt;      currentState = "sampleMic";&lt;br/&gt;   }&lt;br/&gt;   if (view == "tuner")&lt;br/&gt;   {&lt;br/&gt;      viewName = "(Pitch Detection)";&lt;br/&gt;      currentState = "pitchDetection";&lt;br/&gt;   }&lt;br/&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;添加渐变效果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Flex 4 方法支持状态转换。它们允许您轻松应用状态转换效果。以麦克风为例，您可以为每次状态更改添加一个渐变状态转换。 &lt;ol&gt;&lt;li&gt;将下列代码添加到 &amp;lt;s:states&amp;gt; 块下的 MicrophoneExamples.mxml： &amp;lt;s:transitions&amp;gt;&lt;br/&gt;        &amp;lt;s:Transition toState="pitchDetection"&amp;gt;    &lt;br/&gt;            &amp;lt;s:Fade alphaFrom="0.0" alphaTo="1.0" duration="600" &lt;br/&gt;                        targets="{[pnlTuner,txtExample]}"/&amp;gt;                &lt;br/&gt;        &amp;lt;/s:Transition&amp;gt;    &lt;br/&gt;        &amp;lt;s:Transition toState="sampleMic"&amp;gt;    &lt;br/&gt;            &amp;lt;s:Fade alphaFrom="0.0" alphaTo="1.0" duration="600" &lt;br/&gt;                    targets="{[pnlMic,txtExample]}"/&amp;gt;                &lt;br/&gt;        &amp;lt;/s:Transition&amp;gt;    &lt;br/&gt;        &lt;br/&gt;        &amp;lt;s:Transition toState="info"&amp;gt;    &lt;br/&gt;            &amp;lt;s:Fade alphaFrom="0.0" alphaTo="1.0" duration="600" &lt;br/&gt;                    targets="{[pnlInfo,txtExample]}"/&amp;gt;                &lt;br/&gt;        &amp;lt;/s:Transition&amp;gt; &lt;br/&gt;    &amp;lt;/s:transitions&amp;gt;&lt;br/&gt;&lt;p&gt;每个自定义视图中的 txtExample 引用与每个视图一起更改的顶部栏内的标签。在应用程序的 Flex 3 版本中，标签无 id，因此您需要添加一个。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;使用 text="{viewName}" 将 id="txtExample" 添加到应用程序中的 Label： &amp;lt;s:Label id="txtExample" text="{viewName}" x="100" y="3" styleName="titleTextGrey" backgroundAlpha="0" /&amp;gt; &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;转换 SampleMicPanel 自定义视图&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;迁移至 Flex 4 的应用程序的最后部分是两个麦克风示例的自定义组件视图和信息面板。每个组件迁移使用相同的基本方法和技巧，且可能看似之前步骤的重复，这将演示代码和外观的部分重用。 &lt;p&gt;以示例 mic 视图开始。 &lt;ol&gt;&lt;li&gt;打开 SampleMicPanel.mxml 并将主组件从 mx:Canvas 更改为 s:Group，因为在 mx:Canvas 上无样式设计功能。 &amp;lt;s:Group &lt;br/&gt;   xmlns:fx="http://ns.adobe.com/mxml/2009"  &lt;br/&gt;   xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;   xmlns:mx="library://ns.adobe.com/flex/mx"&lt;br/&gt;   xmlns:view="view.*"&lt;br/&gt;   creationComplete="init();" hide="stop()"&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;添加三个新的命名空间：&lt;/li&gt;&lt;li&gt;因为新的命名空间更改，将 mx:Script 块更改为 fx:Script。 &lt;p&gt;首个子 mx:Canvas 组件的 styleName 为&amp;#8220;controlsBox&amp;#8221;。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;从 CSS 文件中删除 controlsBox 样式。&lt;/li&gt;&lt;li&gt;将 Canvas 组件更改为 SkinnableComponent： &amp;lt;s:SkinnableComponent left="9" right="9" top="50" height="60" &lt;br/&gt;              skinClass="controls.skins.ControlsBoxSkin" /&amp;gt;&lt;br/&gt;&lt;/li&gt;&lt;li&gt;在 controls.skins 包中创建一个名为 ControlsBoxSkin.mxml 的新 MXML Skin，并将下列代码复制到其中： &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br/&gt;&amp;lt;s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" &lt;br/&gt;        xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;        xmlns:mx="library://ns.adobe.com/flex/mx"&amp;gt;&lt;br/&gt;    &amp;lt;!-- host component --&amp;gt;&lt;br/&gt;    &amp;lt;fx:Metadata&amp;gt;&lt;br/&gt;        [HostComponent("spark.components.supportClasses.SkinnableComponent")]&lt;br/&gt;    &amp;lt;/fx:Metadata&amp;gt;&lt;br/&gt;    &amp;lt;s:states&amp;gt;&lt;br/&gt;&lt;br/&gt;        &amp;lt;s:State name="normal" /&amp;gt;&lt;br/&gt;        &amp;lt;s:State name="disabled" /&amp;gt;&lt;br/&gt;    &amp;lt;/s:states&amp;gt;&lt;br/&gt;    &lt;br/&gt;    &amp;lt;s:Rect width="100%" height="100%"&amp;gt;&lt;br/&gt;        &amp;lt;s:stroke&amp;gt;&lt;br/&gt;            &amp;lt;s:SolidColorStroke color="0x3A3A3A" /&amp;gt;&lt;br/&gt;&lt;br/&gt;        &amp;lt;/s:stroke&amp;gt;&lt;br/&gt;        &amp;lt;s:fill&amp;gt;&lt;br/&gt;            &amp;lt;s:SolidColor color="0x565656" /&amp;gt;&lt;br/&gt;        &amp;lt;/s:fill&amp;gt;&lt;br/&gt;    &amp;lt;/s:Rect&amp;gt; &lt;br/&gt;    &amp;lt;s:Group id="contentGroup" left="5" right="5" top="4" bottom="4" /&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;/s:Skin&amp;gt;&lt;br/&gt;&lt;p&gt;该外观以后将在其他自定义组件中重用。 &lt;p&gt;第二个 mx:Canvas 有一个 id="spectrum"，是一个可以动态绘制波形图的占位符。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;将 mx:Canvas 更改为 s:Group。Group 类扩展了可以按程序绘制的 Sprite。&lt;/li&gt;&lt;li&gt;更改代码的 TOP CONTROLS 部分，如下所示： &amp;lt;!-- TOP CONTROLS --&amp;gt;&lt;br/&gt;    &amp;lt;s:HGroup id="topControls" left="10" right="10" top="0"&amp;gt;&lt;br/&gt;        &amp;lt;s:ToggleButton id="btnRecord" click="recordSound()"&lt;br/&gt;            styleName="recordButton" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Label styleName="footerPTText" text="{micSelector.micName}" &lt;br/&gt;                 click="micSelector.visible = !micSelector.visible" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Group width="100%" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Button id="btnSave" click="savePrompt()" enabled="false"&lt;br/&gt;            toolTip="Save and Open in Default OS WAV Player"&lt;br/&gt;            styleName="saveOpenButton" /&amp;gt;&lt;br/&gt;&lt;br/&gt;    &amp;lt;/s:HGroup&amp;gt;&lt;br/&gt;&lt;p&gt;在上述代码中，mx:HBox 被更改为 s:Hgroup，mx:Button 被更改为 s:Button 和 s:ToggleButton（删除 toggle 属性），mx:Label 被更改为 s:Label。mx:Spacer 被更改为 s:Group，其中 width="100%"。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;s:Label 填充与 mx:Label 不同，因此编辑 CSS 文件并为 footerPTText 将 padding-top: 2px 更改为 padding-top: 6px。&lt;/li&gt;&lt;li&gt;更改代码的 TIMING UI 部分，如下所示： &amp;lt;!&amp;#8212; TIMING UI --&amp;gt;&lt;br/&gt;&amp;lt;s:HGroup id="timings" left="10" right="10" top="31" gap="0"&amp;gt;&lt;br/&gt;        &amp;lt;s:Label styleName="titleTextBlack" text="Last Data Event:" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Label styleName="footerText" text="{micStats}" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Group width="100%" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Label styleName="titleTextBlack" text="Recording Time:" /&amp;gt;&lt;br/&gt;&lt;br/&gt;        &amp;lt;s:Label styleName="footerText" text="{micTimer}" textAlign="right" /&amp;gt;&lt;br/&gt;    &amp;lt;/s:HGroup&amp;gt;&lt;br/&gt;&lt;p&gt;在上述代码中，mx:HBox 被更改为 s:HGroup 且属性 horizontalGap 被更改为 gap。同样，mx:Spacer 被更改为 s:Group，其中 width="100%"。因为填充的不同 s:Hgroup 被降低了五个像素。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;更改代码的 PLAY CONTROLS 部分，如下所示： &amp;lt;!-- PLAY CONTROLS --&amp;gt;&lt;br/&gt;    &amp;lt;s:HGroup id="playControls" left="10" right="10" bottom="30" verticalAlign="middle"&lt;br/&gt;        gap="2"&amp;gt;&lt;br/&gt;        &amp;lt;s:ToggleButton styleName="playButton"&lt;br/&gt;            id="btnPlay" click="isPlayingFlag = true;playRecordedData()" /&amp;gt;&lt;br/&gt;        &amp;lt;s:Group id="playHeadCanvas" height="16" y="5" width="100%"&amp;gt;&lt;br/&gt;            &amp;lt;s:Rect width="100%" height="100%"&amp;gt;&lt;br/&gt;                &amp;lt;s:stroke&amp;gt;&lt;br/&gt;&lt;br/&gt;                    &amp;lt;s:SolidColorStroke color="0x3A3A3A" /&amp;gt;&lt;br/&gt;                &amp;lt;/s:stroke&amp;gt;&lt;br/&gt;                &amp;lt;s:fill&amp;gt;&lt;br/&gt;                    &amp;lt;s:SolidColor color="0xAAAAAA" /&amp;gt;&lt;br/&gt;                &amp;lt;/s:fill&amp;gt;&lt;br/&gt;            &amp;lt;/s:Rect&amp;gt;&lt;br/&gt;&lt;br/&gt;            &amp;lt;s:Group id="playHead" width="8" height="15" y="0" x="0"&amp;gt;&lt;br/&gt;                &amp;lt;s:Rect width="100%" height="100%"&amp;gt;&lt;br/&gt;                    &amp;lt;s:fill&amp;gt;&lt;br/&gt;                        &amp;lt;s:SolidColor color="0x333333" /&amp;gt;&lt;br/&gt;                    &amp;lt;/s:fill&amp;gt;&lt;br/&gt;                &amp;lt;/s:Rect&amp;gt;&lt;br/&gt;&lt;br/&gt;            &amp;lt;/s:Group&amp;gt;&lt;br/&gt;        &amp;lt;/s:Group&amp;gt;&lt;br/&gt;        &amp;lt;s:Group height="100%"&amp;gt;&lt;br/&gt;            &amp;lt;s:HSlider width="64" dataTipFormatFunction="volumeDataTipFunction" toolTip="Volume"&lt;br/&gt;                       y="7" skinClass="controls.skins.MyHSliderSkin"&lt;br/&gt;                       id="vsVol" minimum="0" maximum="100" value="60" /&amp;gt;   &lt;br/&gt;        &amp;lt;/s:Group&amp;gt;&lt;br/&gt;    &amp;lt;/s:HGroup&amp;gt;&lt;br/&gt;&lt;p&gt;在代码的 PLAY CONTROLS 部分，mx:HBox 被更改为 s:Hgroup，mx:Button 被更改为 s:ToggleButton（删除 toggle 属性），所有 mx:Canvas 被更改为 s:Group，mx:HSlider 被更改为 s:Hslider。playHeadCanvas 和 playHead 组件在 mx:Canvas 上设置有背景颜色；它们被删除并用 Rect 组件直接拉入 Group 组件。 &lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt;直接拉至 Spark Group 组件与常规外观自定义操作不同。我在此介绍这种方法主要是为了提供另一种不同的方法。这种方法功能略逊，但是不一定效果差。 &lt;p&gt;s:HSlider 通过外观而非像以前一样通过样式处理 DataTip 样式设置。因此您需要创建一个自定义外观。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;在 controls.skins 包中创建一个名为 MyHSliderSkin.mxml 的新 MXML Skin，并将代码从完整的 Flex 4 示例文件复制到其中。 &lt;p&gt;为了制作该外观，我创建了一个 Spark Hslider 外观，并将 DataTip 部分微调成圆角深色矩形和淡灰色文本。在 CSS 文件中无等效物，但是 mx:Hslider 将在设置 DataTip 样式时使用通用样式，因此需要在 s:Hslider 的外观中手动进行更改。以下是 MyHSliderSkin.mxml 外观中 DataTip 部分的代码：&amp;lt;fx:Declarations&amp;gt;&lt;br/&gt;        &amp;lt;!--- The tooltip used in the mx.controls.Slider control. &lt;br/&gt;               To customize the DataTip's appearance, create a custom HSliderSkin class.--&amp;gt;&lt;br/&gt;        &amp;lt;fx:Component id="dataTip"&amp;gt;     &lt;br/&gt;           &amp;lt;s:DataRenderer minHeight="24" minWidth="40" y="-34"&amp;gt;  &lt;br/&gt;              &amp;lt;s:Rect top="0" left="0" right="0" bottom="0" radiusX="2" radiusY="2"&amp;gt;&lt;br/&gt;                    &amp;lt;s:fill&amp;gt;&lt;br/&gt;                        &amp;lt;s:SolidColor color="0x353535" alpha=".9"/&amp;gt;&lt;br/&gt;&lt;br/&gt;                    &amp;lt;/s:fill&amp;gt;&lt;br/&gt;                    &amp;lt;s:filters&amp;gt;&lt;br/&gt;                        &amp;lt;s:DropShadowFilter angle="90" color="0x000000" distance="2"/&amp;gt;&lt;br/&gt;                    &amp;lt;/s:filters&amp;gt;&lt;br/&gt;                &amp;lt;/s:Rect&amp;gt;&lt;br/&gt;                &amp;lt;s:Label id="labelDisplay" text="{data}"&lt;br/&gt;                         horizontalCenter="0" verticalCenter="1"&lt;br/&gt;                         left="5" right="5" top="5" bottom="5" color="0xdddddd"&lt;br/&gt;                         textAlign="center" verticalAlign="middle"&lt;br/&gt;                         fontWeight="normal" fontSize="11"&amp;gt;&lt;br/&gt;&lt;br/&gt;                &amp;lt;/s:Label&amp;gt;&lt;br/&gt;            &amp;lt;/s:DataRenderer&amp;gt;&lt;br/&gt;       &amp;lt;/fx:Component&amp;gt;&lt;br/&gt;    &amp;lt;/fx:Declarations&amp;gt;&lt;br/&gt;&lt;p&gt;注：Hslider、RadioButton 和 ComboBox CSS 样式值使用自定义图像作为图标样式值。对于我之前讨论的 s:Button，我必须通过外观而非样式（或者一个可以读取样式的自定义外观）做到这一点。上述 Spark 组件的默认外观提供我正在寻找的外观和感觉，但是略有不同，因此我没有为那些组件创建自定义外观。方法类似 controls.skins.IconButtonSkin 的方法，但是由于嵌套外观的原因略微复杂一些。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;继续通过代码的剩余部分，并将相同类型的更改应用于各种组件。如果需要，您可以参阅已完成的示例文件。 &lt;p&gt;将 mx:ComboBox 切换为 s:ComboBox 时需要注意的一点是 dataProvider 不提供 Array 值；它必须是 Ilist。我将 Array 包装到一个实现 IList 的 ArrayList 中。确保使用导入 mx.collections.ArrayList; 将 ArrayList 导入到 Script 块的顶部。代码如下： &amp;lt;s:Group width="100%" left="10" right="10" top="148"&amp;gt;&lt;br/&gt;   &amp;lt;s:Label styleName="titleTextBlack" text="Playback Speed:" y="1" /&amp;gt;&lt;br/&gt;   &amp;lt;s:HSlider id="hsSpeed" left="94" right="0" dataTipFormatFunction="dataTipFunction"&lt;br/&gt;            toolTip="Speed"   value="50" snapInterval="1" minimum="10" maximum="90" liveDragging="true" /&amp;gt;&lt;br/&gt;&amp;lt;/s:Group&amp;gt;&lt;br/&gt;&amp;lt;s:HGroup id="bottomControls" left="10" right="10" bottom="10"&amp;gt;&lt;br/&gt;   &amp;lt;s:ComboBox id="nmQuality" visible="false" includeInLayout="false" &lt;br/&gt;            dataProvider="{new ArrayList([2048,(1024*3),(1024*4),(1024*5),(1024*6),(1024*7),8192])}" /&amp;gt;&lt;br/&gt;&amp;lt;/s:HGroup&amp;gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;转换 PitchDetection 自定义视图&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;PitchDetection 自定义视图的更新非常像之前的自定义组件更新，通过添加命名空间和将所有的 MX 组件更改为其 Spark 等效物实现。您需要将主 mx:Canvas 更改为 s:Group，并将 mx:Canvas（styleName="controlsBox"）更改为 s:SkinnableContainer（值为 skinClass="controls.skins.ControlsBoxSkin"），如之前的 SampleMicPanel 组件迁移一样。选择一个用于外观重用。下面是 PitchDetection.mxml 内容部分的代码： &amp;lt;s:ToggleButton id="btnRecord" click="recordSound()" left="10"&lt;br/&gt;   styleName="recordButton" /&amp;gt;&lt;br/&gt;&amp;lt;s:Label styleName="titleTextBlack" text="Start Sampling to Determine the Pitch of the Audio" &lt;br/&gt;        bottom="6" horizontalCenter="0" /&amp;gt;&lt;br/&gt;&amp;lt;s:Label styleName="footerPTText" text="{micSelector.micName}" click="micSelector.visible = !micSelector.visible"&lt;br/&gt;        y="0" left="50" /&amp;gt;&lt;br/&gt;   &lt;br/&gt;&amp;lt;s:Label id="note_tx" text="Note"&lt;br/&gt;   verticalCenter="-48" horizontalCenter="0" styleName="titleTextBlack" fontSize="32"/&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;s:SkinnableComponent left="15" right="15" bottom="31" height="80" &lt;br/&gt;                 skinClass="controls.skins.ControlsBoxSkin" /&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;s:BitmapImage source="@Embed('embed_assets/pitch/musicstaff.png')" left="15" bottom="31" /&amp;gt;&lt;br/&gt;&amp;lt;s:BitmapImage source="@Embed('embed_assets/pitch/notedown.png')"&lt;br/&gt;        verticalCenter="31" horizontalCenter="0" id="notedown" visible="false" /&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;s:BitmapImage source="@Embed('embed_assets/pitch/noteup.png')" &lt;br/&gt;        verticalCenter="16" horizontalCenter="0" id="noteup" visible="false" /&amp;gt;&lt;br/&gt;&amp;lt;s:BitmapImage source="@Embed('embed_assets/pitch/noteupwbar.png')" &lt;br/&gt;        verticalCenter="16" horizontalCenter="-1" id="noteupwbar" visible="false" /&amp;gt;&lt;br/&gt;&amp;lt;s:BitmapImage source="@Embed('embed_assets/pitch/sharp.png')" &lt;br/&gt;        verticalCenter="32" horizontalCenter="-15" id="sharp" visible="false" /&amp;gt;&lt;br/&gt;&lt;p&gt;请参阅 PitchDetection.mxml 的示例 Flex 4 版本，以获取完整的示例。 &lt;p&gt;您也可以在 MicrophoneExamples.mxml 文件中从 PitchDetection 组件中删除 styleName="mainPaddedBox"，因为该组件不需要且那些样式将不应用于 s:Group 视图的顶部组件。 &lt;p&gt;&lt;strong&gt;转换 InformationPanel 自定义视图&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在 InformationPanel 组件中，您需要将 mx:VBox 更改为 s:Vgroup，并将 verticalGap 更改为 gap。您可以在 MicrophoneExamples.mxml 文件中从 InformationPanel 组件中删除 styleName="mainPaddedBox"，并从主 CSS 文件中删除 mainPaddedBox。这是因为 Spark 组件不是通过样式进行填充的，而是作为 s:VGroup 组件上的属性。将旧版的填充样式值作为 MicrophoneExamples.mxml 文件中声明的 InformationPanel 上的属性（paddingLeft="10" paddingTop="8" paddingRight="10"）。 &lt;p&gt;当您将 mx:Label 更改为 s:Label 时，将影响填充及文本的大小，因此您需要将 CSS 文件中的 .infoText 字体大小更改为 12。原始 mx:Hrule 基本是一行，因此您可以删除该组件并用 s:Line（其中厚度重量为 2）将其替换。所有更改都完成后的代码如下： &amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br/&gt;&amp;lt;s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" &lt;br/&gt;       xmlns:s="library://ns.adobe.com/flex/spark" &lt;br/&gt;       xmlns:mx="library://ns.adobe.com/flex/mx"&lt;br/&gt;   gap="8"&amp;gt;&lt;br/&gt;   &amp;lt;fx:Script&amp;gt;&lt;br/&gt;      &amp;lt;![CDATA[&lt;br/&gt;         [Bindable]&lt;br/&gt;         public var applicationVersion:String = "";&lt;br/&gt;      ]]&amp;gt;&lt;br/&gt;   &amp;lt;/fx:Script&amp;gt;&lt;br/&gt;   &amp;lt;s:Label styleName="titleText" text="CREDITS {applicationVersion}" /&amp;gt;&lt;br/&gt;&lt;br/&gt;   &amp;lt;s:Line width="100%"&amp;gt;&lt;br/&gt;      &amp;lt;s:stroke&amp;gt;&lt;br/&gt;         &amp;lt;s:SolidColorStroke color="0xffffff" weight="2" /&amp;gt;&lt;br/&gt;      &amp;lt;/s:stroke&amp;gt;&lt;br/&gt;   &amp;lt;/s:Line&amp;gt;&lt;br/&gt;   &amp;lt;mx:Spacer height="0" /&amp;gt;&lt;br/&gt;&lt;br/&gt;   &amp;lt;s:Label styleName="titleTextBlack" text="Application Author: "/&amp;gt;&lt;br/&gt;   &amp;lt;s:Label styleName="infoText" text="Renaun Erickson" /&amp;gt;&lt;br/&gt;   &amp;lt;s:Label styleName="titleTextBlack" text="Pitch Detection Code: "/&amp;gt;&lt;br/&gt;   &amp;lt;s:Label styleName="infoText" text="John Montgomery (psychicorigami.com) AS3 port Benjamin Dobler" /&amp;gt;&lt;br/&gt;   &amp;lt;s:Label styleName="infoText" text="Modified by Renaun Erickson" /&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;/s:VGroup&amp;gt;&lt;br/&gt;&lt;p&gt;&lt;strong&gt;转换 InputDeviceSelector 自定义视图&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;InputDeviceSelector 自定义组件利用 controlsBox 样式，这就意味着您可以用 s:SkinnableContainer 重用 controls.skins.ControlsBoxSkin，以代替 mx:Canvas。您还需要像以前一样进行 fx:Script、s:Label 和 s:Vgroup 更改。当您将 mx:ButtonRadioGroup 更改为 s:ButtonRadioGroup 时，需要将其移动到一个新的 fx:Declarations 代码块中，以使其与可视声明相分离。如果您在上述更改后进行编译，将会看到错误提示建议使用 addElement 而非 addChild。Spark 容器组件必须实现 IvisualElement 接口并使用新的 addElement 方法。只需将 vbButtons.addChild 更改为 vbButtons.addElement，以解决编译器错误，这样就全部完成了。下面是该自定义组件的内容部分： &amp;lt;fx:Declarations&amp;gt; &lt;br/&gt;   &amp;lt;s:RadioButtonGroup id="grpRadio" itemClick="changeMic(event)" /&amp;gt; &lt;br/&gt;&amp;lt;/fx:Declarations&amp;gt; &lt;br/&gt;&amp;lt;s:Label styleName="infoText" text="Select An Input Device:" left="6" top="6" /&amp;gt; &lt;br/&gt;&amp;lt;s:VGroup id="vbButtons" left="6" right="6" top="22" bottom="6" gap="5" /&amp;gt; &lt;p&gt;请参阅 InputDeviceSelection.mxml 的示例 Flex 4 版本，以获取应用程序的完整 example.Run，然后就可以享用了；这就是从 Flex 3 迁移至 Flex 4 的全部过程。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a title="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1168" href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=1168"&gt;http://www.infoq.com/cn/vendorcontent/show.action?vcr=1168&lt;/a&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/1866375.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866375.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866345.html</id><title type="text">ArcGIS 10 破解安装（desktop及ArcGIS Server 10）</title><summary type="text">虽然拿到了ArcGIS 10的授权，但由于只有一个，而且安装在服务器上，看了一下说明，又需要什么浮动许可之类，觉得太麻烦，在网上搜索了下，汇总如下（内容来自于网络，提供也仅为学习参考使用）：Desktop破解出乎我的意外，10的破解非常的简单，看来老外的水平真是不可小看啊，以下仅提供方法：1、先卸载所有的之前的版本，然后搜索Arcgis10_arcinfo_super_easy_fix.rar，并...</summary><published>2010-11-01T08:27:00Z</published><updated>2010-11-01T08:27:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866345.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866345.html"/><content type="html">&lt;p&gt;虽然拿到了ArcGIS 10的授权，但由于只有一个，而且安装在服务器上，看了一下说明，又需要什么浮动许可之类，觉得太麻烦，在网上搜索了下，汇总如下（内容来自于网络，提供也仅为学习参考使用）：&lt;/p&gt;&lt;p&gt;Desktop破解&lt;/p&gt;&lt;p&gt;出乎我的意外，10的破解非常的简单，看来老外的水平真是不可小看啊，以下仅提供方法：&lt;/p&gt;&lt;p&gt;1、先卸载所有的之前的版本，然后搜索Arcgis10_arcinfo_super_easy_fix.rar，并下载，这个可能有点慢。&lt;/p&gt;&lt;p&gt;2、安装Desktop,不用装license&lt;/p&gt;&lt;p&gt;3、安装下载下来的文件ags_lm_10_modified_ver_plus_afcorev5.exe&lt;/p&gt;&lt;p&gt;4、打开ArcGIS Administrator,将license manager改成localhost&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/ArcGIS10desktopArcGISServer10_E561/Caps_2.png"&gt;&lt;img title="Caps" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="272" alt="Caps" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/ArcGIS10desktopArcGISServer10_E561/Caps_thumb.png" width="358" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ArcGIS Server&lt;/p&gt;&lt;p&gt;安装与以前没有什么二样，只是授权文件的问题了，在网上搜索了一下：&lt;/p&gt;&lt;p&gt;svradvanced,100,ecp123456789,11-NOV-2010,A3E0RNBJ3124CZ618149&lt;br /&gt;svrstandard,100,ecp123456789,11-NOV-2010,A3C0LPJ0A99BL7EAG061&lt;br /&gt;arcgisserver,100,ecp123456789,11-NOV-2010,A3E650PYJGHJTGMJH058&lt;/p&gt;&lt;p&gt;很遗憾，只能使用到11月份，先用着吧。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;再提供一个永久的arcgis server ecp&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/29/1891550.html"&gt;http://www.cnblogs.com/chinazhousheng/archive/2010/11/29/1891550.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/1866345.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/11/01/1866345.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinazhousheng/archive/2010/10/27/1862426.html</id><title type="text">基于Geoserver配置多图层地图以及利用uDig来进行样式配置</title><summary type="text">在GeoServer中配置多个图层的地图相对来说很容易，其步骤为： 1、 进入geoserver 2、 配置相关的FeatureTypes 3、 配置WMS内容，进入以后，主要有以下几个地方需要命名：图层组名称，基础地图图层，SRS，Envelope。 图层组名称：这个随便命名； 基础地图图层：即配置的FeatureTypes SRS :这个一般选4326 Envelope：这个要注意了，有时候并...</summary><published>2010-10-27T03:26:00Z</published><updated>2010-10-27T03:26:00Z</updated><author><name>GIS小能</name><uri>http://www.cnblogs.com/chinazhousheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinazhousheng/archive/2010/10/27/1862426.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinazhousheng/archive/2010/10/27/1862426.html"/><content type="html">&lt;p&gt;在GeoServer中配置多个图层的地图相对来说很容易，其步骤为： &lt;p&gt;1、 进入geoserver &lt;p&gt;2、 配置相关的FeatureTypes &lt;p&gt;3、 配置WMS内容，进入以后，主要有以下几个地方需要命名：图层组名称，基础地图图层，SRS，Envelope。 &lt;p&gt;图层组名称：这个随便命名； &lt;p&gt;基础地图图层：即配置的FeatureTypes &lt;p&gt;SRS :这个一般选4326 &lt;p&gt;Envelope：这个要注意了，有时候并不能生成，所以如果不能生成，可以自己手工输入 &lt;p&gt;配置完后，提交就可以了。 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/GeoserveruDig_A0AF/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="251" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/GeoserveruDig_A0AF/clip_image002_thumb.jpg" width="428" border="0" /&gt;&lt;/a&gt; &lt;p&gt;当然，像这样配置出来的图是不太好看的，此时，可利用udig来进行样式的配置 &lt;p&gt;1.下载uDig: &lt;p&gt;&lt;a href="http://udig.refractions.net/downloads/udig-1.1-RC13.exe"&gt;http://udig.refractions.net/downloads/udig-1.1-RC13.exe&lt;/a&gt; &lt;p&gt;２．安装uDig,新建工程，添加图层． &lt;p&gt;3.选中图层，主菜单&amp;#8211; &amp;gt; Layer &amp;#8212; &amp;gt; Change Style ,编辑样式，然后选择左下角的Export,导出SLD文件， &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/GeoserveruDig_A0AF/clip_image004_2.jpg"&gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="214" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/chinazhousheng/WindowsLiveWriter/GeoserveruDig_A0AF/clip_image004_thumb.jpg" width="367" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinazhousheng/aggbug/1862426.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinazhousheng/archive/2010/10/27/1862426.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
