﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-首页原创精华区</title><link>http://www.cnblogs.com/</link><description>技术改变世界</description><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 06:36:06 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 06:36:06 GMT</pubDate><ttl>60</ttl><item><title>Unicode 二三事</title><link>http://www.cnblogs.com/skyivben/archive/2010/02/10/1667099.html</link><dc:creator>银河</dc:creator><author>银河</author><pubDate>Wed, 10 Feb 2010 06:30:00 GMT</pubDate><guid>http://www.cnblogs.com/skyivben/archive/2010/02/10/1667099.html</guid><description><![CDATA[<p>阅读: 0 评论: 0 作者: <a href="http://www.cnblogs.com/skyivben/" target="_blank">银河</a> 发表于 2010-02-10 14:30 <a href="http://www.cnblogs.com/skyivben/archive/2010/02/10/1667099.html" target="_blank">原文链接</a></p><pre class="brush:csharp">bool Judge(string s1, string s2)
{
  if (string.IsNullOrEmpty(s1) || string.IsNullOrEmpty(s2)) return true;
  if (s1.Length &lt; s2.Length) return true;
  var ci = StringComparison.InvariantCulture;
  var b1 = string.Compare(s1.Substring(0, s2.Length), s2, ci) == 0;
  var b2 = s1.StartsWith(s2, ci);
  return b1 == b2;
}</pre>
<p>请问以上方法能够返回 false ？ <br /> 如果可以，请给出相应的 s1 和 s2。</p>
<hr />
<p>话说某国国防部的机密资料锁在一个保险柜里，需要输入一串密码才能打开该保险柜。 <br /> 现在我方的间谍想办法搞到了该保险柜智能控制系统的关键源程序代码，如下：</p>
<pre class="brush:csharp">bool Locked(string key)
{
  if (string.Compare(key, "", StringComparison.InvariantCulture) != 0) return true;
  return key.Trim('\0').Length == 0;
}</pre>
<p>
只要输入适当的 key，使 Locked 方法返回 false 就能打开该保险柜，获取机密资料。 <br /> 现在就看你的了，赶快给出答案吧。</p>
<hr />
<p>以上两道题是<a target="_blank" href="http://hi.csdn.net/microblue">我</a>于2009年4月份在<a target="_blank" href="http://community.csdn.net/">CSDN论坛</a>上发表的&ldquo;<a target="_blank" href="http://topic.csdn.net/u/20090414/19/703ffce1-1b2e-4980-aea4-f9aa62038f81.html">出一道有关 C# 字符串比较的考题</a>&rdquo;和&ldquo;<a target="_blank" href="http://topic.csdn.net/u/20090415/19/26dfd36a-90f1-4942-820f-4e7ed1d986b5.html">C# 字符串比较问题</a>&rdquo;中提出的。</p>
<p>&nbsp;</p>
<p>现在，让我们先来看一些有趣的 Unicode 字符：</p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021010094553.png" /></p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021010082710.png" /></p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021010090096.png" /></p>
<p>要过年了，大家都坐下来打麻将吧。</p>
<p>上述麻将牌中的&ldquo;竹&rdquo;(<span style="font-size: x-large;">🀤</span>)是 U+1F024，HTML 代码表示为: &amp;#127012; 。在 C# 语言中表示为： "🀤" 或者 "\xd83c\xdc24"。</p>
<p>虽然 "\xd83c\xdc24" 只表示一个 Unicode 字符，但是 "\xd83c\xdc24".Length == 2。</p>
<p>&nbsp;</p>
<p>还有：</p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021010482286.png" /></p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021010484277.png" /></p>
<p>这个 Unicode 区块&ldquo;组合变音标记&rdquo;中的字符是解决第一道题的关键。</p>
<pre class="brush:csharp;gutter:false;">Judge("u\x0308", "u")</pre>
<p>
以上代码就返回 false。</p>
<p>实际上:</p>
<p>"u\x0308".Length == 2</p>
<p>"u\x0308".Normalize().Length == 1</p>
<p>"u\x0308".Normalize() 就是 "\x00fc"</p>
<p>HTML 代码: u&amp;#776; 表示 <span style="font-size: x-large;">ü</span> (0x0308 的十进制是 776)</p>
<p>HTML 代码: &amp;#252; 表示 <span style="font-size: x-large;">&uuml;</span> (0x00fc 的十进制是 252)</p>
<p>如下所示：</p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021011254082.png" /></p>
<p><img src="http://pic002.cnblogs.com/img/skyivben/201002/2010021011255953.png" /></p>
<p>&nbsp;</p>
<p>第二道题的答案是：</p>
<fieldset style="background-color: aliceblue;">
以下的 key 值可以使 Locked 方法返回 false ： <br /> "\0xFFFF" <br /> "\0xFFFE" <br /> "\0xFFFD" <br /> ... <br /> "\0xFF00"
</fieldset>

<hr />
<ul>
<li><a target="_blank" href="http://unicode.org/">Unicode Consortium</a></li>
<li><a target="_blank" href="http://msdn.microsoft.com/zh-cn/library/zs0350fy.aspx">使用 Unicode 编码</a></li>
<li><a target="_blank" href="http://msdn.microsoft.com/zh-cn/library/system.text.normalizationform.aspx">NormalizationForm 枚举 (System.Text)</a></li>
<li><a target="_blank" href="http://blogs.msdn.com/shawnste/archive/2008/09/23/how-come-substring-0-xxx-matches-something-but-startswith-returns-false.aspx">How come Substring(0, xxx) matches something, but StartsWith returns false?</a></li>
</ul><img src="http://www.cnblogs.com/skyivben/aggbug/1667099.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/skyivben/archive/2010/02/10/1667099.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/skyivben/archive/2010/02/10/1667099.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Windows 7 产品密钥是否安全</title><link>http://www.cnblogs.com/gnielee/archive/2010/02/10/1667020.html</link><dc:creator>Gnie</dc:creator><author>Gnie</author><pubDate>Wed, 10 Feb 2010 03:42:00 GMT</pubDate><guid>http://www.cnblogs.com/gnielee/archive/2010/02/10/1667020.html</guid><description><![CDATA[<p>阅读: 617 评论: 10 作者: <a href="http://www.cnblogs.com/gnielee/" target="_blank">Gnie</a> 发表于 2010-02-10 11:42 <a href="http://www.cnblogs.com/gnielee/archive/2010/02/10/1667020.html" target="_blank">原文链接</a></p><p>&#160;&#160;&#160;&#160;&#160;&#160; 提到Windows 7（或Windows Server 2008）有些人认为自己的产品密钥（Product Key）很安全，甚至在公司内部有些网管也认为公司部署的Windows 7 系统的密钥不会泄露。但其实并非如此，众所周知我们的密钥都是写在注册表中的，虽然在Windows 属性中看不到产品密钥的真身，但通过一些软件可以很便捷的解开这层面纱。</p>  <p>&#160;</p>  <p>在属性中的确看不到产品密钥：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/property.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="property" border="0" alt="property" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/property_thumb.png" width="571" height="117" /></a></p>  <p>&#160;</p>  <p>通过其他软件查看产品密钥：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/everest%20-%20Copy.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="everest - Copy" border="0" alt="everest - Copy" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/everest%20-%20Copy_thumb.png" width="580" height="130" /></a></p>  <p>&#160;</p>  <p>还有更狠的所有密钥都给弄出来了：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/pkfinder%20-%20Copy_1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="pkfinder - Copy" border="0" alt="pkfinder - Copy" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/pkfinder%20-%20Copy_thumb_1.png" width="495" height="207" /></a> </p>  <p>&#160;</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160; 在这些软件面前你的产品密钥是不是轻而易举的就泄露了（另，）。为了避免密钥被盗，我们可以通过Windows Software Licensing Management Tool（slmgr.vbs） 来保障产品密钥的安全。通过 <strong>slmgr /?</strong> 可以看到该程序的帮助信息：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/slmgr1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="slmgr1" border="0" alt="slmgr1" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/slmgr1_thumb.png" width="639" height="458" /></a> </p>  <p>&#160;</p>  <p>在帮助信息的第二页 <strong>/cpky </strong>命令，可以清除注册表中产品密钥信息：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/slmgr2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="slmgr2" border="0" alt="slmgr2" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/slmgr2_thumb.png" width="500" height="549" /></a> </p>  <p>&#160;</p>  <p>运行<strong>slmgr /cpky</strong> 命令，提示如下错误：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/cpky.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cpky" border="0" alt="cpky" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/cpky_thumb.png" width="498" height="158" /></a> </p>  <p></p>  <p></p>  <p></p>  <p>该命令需要以<strong>管理员身份</strong>运行，以Run as administrator 运行CMD，再次执行slmgr /cpky：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/success.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="success" border="0" alt="success" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/success_thumb.png" width="548" height="359" /></a> </p>  <p>&#160;</p>  <p>清除产品密钥信息后，看看现在机器的密钥状态如何：</p>  <p>软件1：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/everest_1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="everest" border="0" alt="everest" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/everest_thumb_1.png" width="580" height="130" /></a> </p>  <p>软件2：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/pkfinder_1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="pkfinder" border="0" alt="pkfinder" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/pkfinder_thumb_1.png" width="495" height="207" /></a> </p>  <p>使用/cpky 后，系统仍处于激活状态，这点请大家放心：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/property_1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="property" border="0" alt="property" src="http://images.cnblogs.com/cnblogs_com/gnielee/WindowsLiveWriter/d5b11c77fc3d_9616/property_thumb_1.png" width="571" height="117" /></a> </p>  <p>&#160;</p>  <p>参考资料：</p>  <p>1. <a href="http://blogs.technet.com/jliao/archive/2009/10/29/windows-slmgr.aspx" target="_blank">好用的 Windows 软件授权管理工具 – slmgr</a></p>  <p>2. <a href="http://www.windowsnetworking.com/articles_tutorials/Windows-Server-License-Manager-Script-slmgrvbs.html" target="_blank">How to use the Windows Server License Manager Script - slmgr.vbs</a></p>  <p></p>  <p></p>  <p>3. <a href="http://technet.microsoft.com/zh-cn/library/ee921513.aspx" target="_blank">巧用slmgr命令 - 保护Windows 7产品密钥安全</a></p><img src="http://www.cnblogs.com/gnielee/aggbug/1667020.html?type=1" width="1" height="1" alt=""/><p>评论: 10　<a href="http://www.cnblogs.com/gnielee/archive/2010/02/10/1667020.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/gnielee/archive/2010/02/10/1667020.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>NServiceBus---最流行的开源企业服务总线 for .Net</title><link>http://www.cnblogs.com/lonely7345/archive/2010/02/10/1667014.html</link><dc:creator>孤独侠客</dc:creator><author>孤独侠客</author><pubDate>Wed, 10 Feb 2010 03:36:00 GMT</pubDate><guid>http://www.cnblogs.com/lonely7345/archive/2010/02/10/1667014.html</guid><description><![CDATA[<p>阅读: 627 评论: 5 作者: <a href="http://www.cnblogs.com/lonely7345/" target="_blank">孤独侠客</a> 发表于 2010-02-10 11:36 <a href="http://www.cnblogs.com/lonely7345/archive/2010/02/10/1667014.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp; NServiceBus是dotnet世界里面最流行的开源企业服务总线.&nbsp; 它具有以下特点: <br />&nbsp;&nbsp;&nbsp;&nbsp; 1.强大,轻量级 <br />&nbsp;&nbsp;&nbsp;&nbsp; 2.可插拨,简单易用 <br />&nbsp;&nbsp;&nbsp;&nbsp; 3.支持企业级开发 <br />&nbsp;&nbsp;&nbsp; 零安装，在五分钟内就可以实现订阅/发布,如果你正在使用WCF,BizTalk，WebSphere or Sonic，你应该考虑一下NServiceBus: <br />&nbsp;&nbsp;&nbsp;&nbsp; 1.<a href="http://www.nservicebus.com/InsteadOfWcf.aspx" target="_blank">NServiceBus and WCF</a> <br />&nbsp;&nbsp;&nbsp;&nbsp; 2.<a href="http://www.nservicebus.com/InsteadOfBizTalk.aspx" target="_blank">NServiceBus and BizTalk</a> <br />&nbsp;&nbsp;&nbsp;&nbsp; 3.<a href="http://www.nservicebus.com/InsteadOfWebSphereOrSonic.aspx" target="_blank">NServiceBus and WebSphere/Sonic</a> <br />&nbsp;&nbsp;&nbsp;&nbsp; NServiceBus开始于2006年，并且一直在持续的改进，而且社区很活跃，作者更新的也很快.而且NServiceBus已经被多个大公司应用到正式的实际生产项目中，还是经受过正式项目的考验的，在这里可以<a href="http://www.nservicebus.com/Performance.aspx" target="_blank">查看一下NServiceBus的性能</a>。 <br />&nbsp;&nbsp;&nbsp;&nbsp; 现在NserviceBus将要发布2.0版本，开发使用起来相当友好和方便，插拨性相当强，甚至连容器都可以替换。 <br />&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.nservicebus.com/Overview.aspx" target="_blank">Learn more about NServiceBus...</a>&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; 官方地址:<a title="http://www.nservicebus.com/" href="http://www.nservicebus.com/" target="_blank">http://www.nservicebus.com/</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 相关的资源 <br />&nbsp;&nbsp;&nbsp;&nbsp; 1.<a href="http://www.infoq.com/cn/news/2007/09/nservicebus" target="_blank">NServiceBus&#8212;&#8212;让创建企业级.NET系统更加容易</a>&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; 2.<a href="http://tech.groups.yahoo.com/group/nservicebus/" target="_blank">NService yahoo group</a> <br />&nbsp;&nbsp;&nbsp;&nbsp; 3.<a href="http://www.nservicebus.com/Documentation.aspx" target="_blank">官方文档</a> <br /></p>
<p id="LyjSignature">作者：<a href="http://lonely7345.cnblogs.com/" target="_blank">孤独侠客</a>（<a href="http://lonely7345.cnblogs.com/" target="_blank">似水流年</a>） <br />出处：<a href="http://lonely7345.cnblogs.com/" target="_blank">http://lonely7345.cnblogs.com/</a> <br />本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p><img src="http://www.cnblogs.com/lonely7345/aggbug/1667014.html?type=1" width="1" height="1" alt=""/><p>评论: 5　<a href="http://www.cnblogs.com/lonely7345/archive/2010/02/10/1667014.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/lonely7345/archive/2010/02/10/1667014.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>微软一站式示例代码库 1月小结</title><link>http://www.cnblogs.com/Jialiang/archive/2010/02/10/AIOJan.html</link><dc:creator>Jialiang</dc:creator><author>Jialiang</author><pubDate>Wed, 10 Feb 2010 02:25:00 GMT</pubDate><guid>http://www.cnblogs.com/Jialiang/archive/2010/02/10/AIOJan.html</guid><description><![CDATA[<p>阅读: 922 评论: 3 作者: <a href="http://www.cnblogs.com/Jialiang/" target="_blank">Jialiang</a> 发表于 2010-02-10 10:25 <a href="http://www.cnblogs.com/Jialiang/archive/2010/02/10/AIOJan.html" target="_blank">原文链接</a></p><p>微软一站式示例代码库(<a href="http://cfx.codeplex.com/">http://cfx.codeplex.com/</a> ）1月小结 </p>  <p><a href="http://www.cnblogs.com/Jialiang/archive/2010/01/26/Top20.html" target="_blank"><strong>1. 微软一站式示例代码库 首次闯入CodePlex Top 20</strong></a></p>  <p>1月26日对微软一站式示例代码库是历史性的一天。该项目第一次闯入CodePlex社区前20，在13000个开源项目中排名18。</p>  <p>&#160;</p>  <p><strong>2. 越来越多的社会媒体报道了微软一站式示例代码库</strong> </p>  <p>随着All-In-One Code Framework 日益增加的访问量，越来越多的媒体报道了这个项目。比如Softpedia新闻写道：</p>  <p><a title="http://news.softpedia.com/news/Access-the-Free-All-In-One-Code-Framework-from-Microsoft-133516.shtml" href="http://news.softpedia.com/news/Access-the-Free-All-In-One-Code-Framework-from-Microsoft-133516.shtml">http://news.softpedia.com/news/Access-the-Free-All-In-One-Code-Framework-from-Microsoft-133516.shtml</a>    <br /><em>‟The All-In-One Code Framework is offered for free via CodePlex and is an impressive collection of resources, essentially code samples of Microsoft dev technologies accompanied by the necessary documentation exemplifying the way they work... Provided by the Microsoft Community Support team, the code framework is set up to offer devs the essence of development, is the promise of a member of the Redmond company&#8217;s open source community.&#8222;</em></p>  <p>   <br />Sourceforge 杂志：<a title="http://sourceforge.jp/magazine/10/01/20/0420230" href="http://sourceforge.jp/magazine/10/01/20/0420230">http://sourceforge.jp/magazine/10/01/20/0420230</a></p>  <p>Itmedia新闻：<a title="http://www.itmedia.co.jp/enterprise/articles/1001/20/news075.html" href="http://www.itmedia.co.jp/enterprise/articles/1001/20/news075.html">http://www.itmedia.co.jp/enterprise/articles/1001/20/news075.html</a></p>  <p>Honeytechblog 新闻: <a title="http://www.honeytechblog.com/micro-news/all-in-one-code-framework-available-for-free-says-microsoft/" href="http://www.honeytechblog.com/micro-news/all-in-one-code-framework-available-for-free-says-microsoft/">http://www.honeytechblog.com/micro-news/all-in-one-code-framework-available-for-free-says-microsoft/</a></p>  <p>Port25 社区：<a title="http://port25.technet.com/archive/2010/01/18/the-all-in-one-code-framework.aspx" href="http://port25.technet.com/archive/2010/01/18/the-all-in-one-code-framework.aspx">http://port25.technet.com/archive/2010/01/18/the-all-in-one-code-framework.aspx</a></p>  <p>&#160;</p>  <p><strong>3. 微软All-In-One Code Framework 代码示例浏览器 v1 beta版</strong> </p>  <p><a title="http://blogs.msdn.com/weizhong/archive/2010/01/22/all-in-one-code-framework-v1-beta.aspx" href="http://blogs.msdn.com/weizhong/archive/2010/01/22/all-in-one-code-framework-v1-beta.aspx">http://blogs.msdn.com/weizhong/archive/2010/01/22/all-in-one-code-framework-v1-beta.aspx</a></p>  <p>项目组里的一位WPF大牛开发了这个All-In-One Code Framework 代码示例浏览器。通过你输入的关键字，帮助你在All-In-One Code Framework 300多个sample中快速定位你所需要的示例。该浏览器尚处于第一版本的beta阶段。如果在试用过程中发现任何问题，请留言。在接下去的几个月内，还将陆续增加<a href="http://www.cnblogs.com/Jialiang/archive/2009/10/14/1582878.html">导航、自动更新、客户反馈等功能</a>。</p>  <p>&#160;</p>  <p><strong>4. 微软一站式示例代码库对于云计算的贡献</strong></p>  <p>Windows Azure and Cloud Platform are the hottest topics in information technology today. From 2010, All-In-One Code Framework team starts the composition of Azure samples based on the team&#8217;s experienced supports in <a href="http://social.msdn.microsoft.com/Forums/en/category/azure" target="_blank">MSDN Azure forums</a>. Lead by Yi-Luo Luo, six Azure samples have been finished and released in January.</p>  <table border="0" cellspacing="0" cellpadding="0" width="632"><tbody>     <tr>       <td width="212">         <p>CSAzureWCFWorkerRole </p>       </td>        <td width="418">         <p>Host WCF in a Worker Role (C#) </p>       </td>     </tr>      <tr>       <td width="212">         <p>VBAzureWCFWorkerRole </p>       </td>        <td width="418">         <p>Host WCF in a Worker Role (VB.NET) </p>       </td>     </tr>      <tr>       <td width="212">         <p>CSAzureWorkflowService35 </p>       </td>        <td width="418">         <p>Run WCF Workflow Service on Windows Azure (C#) </p>       </td>     </tr>      <tr>       <td width="212">         <p>VBAzureWorkflowService35 </p>       </td>        <td width="418">         <p>Run WCF Workflow Service on Windows Azure (VB.NET) </p>       </td>     </tr>      <tr>       <td width="212">         <p>CSAzureWorkflow4ServiceBus </p>       </td>        <td width="418">         <p>Expose WCF Workflow Service using Service Bus (C#) </p>       </td>     </tr>      <tr>       <td width="212">         <p>VBAzureWorkflow4ServiceBus </p>       </td>        <td width="418">         <p>Expose WCF Workflow Service using Service Bus (VB) </p>       </td>     </tr>   </tbody></table>  <p><a href="http://images.cnblogs.com/cnblogs_com/Jialiang/WindowsLiveWriter/1_928D/image_2.png"><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/Jialiang/WindowsLiveWriter/1_928D/image_thumb.png" width="122" height="120" /></a> </p>  <p>&#160;</p>  <p><strong>5. 1月总共完成28个示例, 2篇KB, 和1个Release</strong></p>  <table border="0" cellspacing="0" cellpadding="0"><tbody>     <tr>       <td valign="top" width="177">         <p>Azure: 6 samples</p>       </td>        <td valign="top" width="156">         <p>ASP.NET: 6 samples</p>       </td>        <td valign="top" width="210">         <p>VSX: 4 samples</p>       </td>     </tr>      <tr>       <td valign="top" width="177">         <p>Winbase: 3 samples</p>       </td>        <td valign="top" width="156">         <p>WinForms: 2 samples</p>       </td>        <td valign="top" width="210">         <p>WPF: 2 samples</p>       </td>     </tr>      <tr>       <td valign="top" width="177">         <p>Data Platform: 2 samples</p>       </td>        <td valign="top" width="156">         <p>PowerShell: 2 samples</p>       </td>        <td valign="top" width="210">         <p>Security: 1 samples</p>       </td>     </tr>   </tbody></table>  <p>&#160;</p>  <p>Sample KB:</p>  <p>&#183; <a href="http://support.microsoft.com/kb/979699">How to create and manipulate an Office PowerPoint instance by using Office Automation in Visual C++, in Visual C#, and in Visual Basic.NET</a></p>  <p>&#183; <a href="http://support.microsoft.com/kb/979697">How to create and manipulate an instance of Office Word by using Office Automation in Visual C++, in Visual C#, and in Visual Basic.NET</a></p>  <p>&#160;</p>  <p>Release:</p>  <table border="0" cellspacing="0" cellpadding="0"><tbody>     <tr>       <td valign="top" width="302">         <p><a href="http://cfx.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=39434">All-In-One Code Framework 2010-01-25</a></p>       </td>        <td valign="top" width="103">         <p><a href="http://blogs.msdn.com/codefx/archive/2010/01/29/microsoft-all-in-one-code-framework-2010-1-25-brief-intro-of-new-samples.aspx">English Intro.</a></p>       </td>        <td valign="top" width="113">         <p><a href="http://www.cnblogs.com/Jialiang/archive/2010/01/27/1657391.html">Chinese Intro.</a></p>       </td>     </tr>   </tbody></table>  <p>&#160;</p>  <p><strong>6. 各项指标稳定上升，客户反馈良好</strong></p>  <p><a href="http://images.cnblogs.com/cnblogs_com/Jialiang/WindowsLiveWriter/1_928D/clip_image001_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://images.cnblogs.com/cnblogs_com/Jialiang/WindowsLiveWriter/1_928D/clip_image001_thumb.jpg" width="613" height="360" /></a></p>  <p>&#160;</p>  <p>反馈：</p>  <p>Hello&#160; the samples you provided were very useful, informative with plenty of comments. This will speed up our development. Thank you for pointing out this web site - <a href="http://cfx.codeplex.com/">http://cfx.codeplex.com/</a>. I can find many useful samples here for my project. Once again, thank you very much. cheers,</p> <img src="http://www.cnblogs.com/Jialiang/aggbug/1666969.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/Jialiang/archive/2010/02/10/AIOJan.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Jialiang/archive/2010/02/10/AIOJan.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>航空仪表模拟</title><link>http://www.cnblogs.com/lvjinjie/archive/2010/02/10/1666928.html</link><dc:creator>金杰</dc:creator><author>金杰</author><pubDate>Wed, 10 Feb 2010 01:00:00 GMT</pubDate><guid>http://www.cnblogs.com/lvjinjie/archive/2010/02/10/1666928.html</guid><description><![CDATA[<p>阅读: 273 评论: 4 作者: <a href="http://www.cnblogs.com/lvjinjie/" target="_blank">金杰</a> 发表于 2010-02-10 09:00 <a href="http://www.cnblogs.com/lvjinjie/archive/2010/02/10/1666928.html" target="_blank">原文链接</a></p><div class="body">
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是我的工控软件系列博客的第二篇，本篇博客中的项目主要是完成对航空仪表进行虚拟测试，此项目只是航空仪表仿真测试软件的一部分，原项目中相关的数据都从工控机的RS232串口传入，然后进行相关的数据分析并在界面上显示各个仪表的实时状态，查看仪表是否能正常工作。但考虑到园友无条件从串口获取正确的实时数据，因此本博客中的工程只对航空仪表的界面进行模拟，这和实际的项目是有很大区别的。&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本博客因为对原项目进行了大量精简（其实原项目中的代码也就是在一个定时器内处理串口传来的实时数据，然后分析后在界面上显示），因此主要的任务还是界面的绘制上，下面是相关的运行效果图，感兴趣的朋友可以下载源文件和可执行程序运行看看：</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lvjinjie/3.png" width="1023" height="736" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本工程的源代码是用VB写的，感兴趣的园友可以下载源代码运行看看，这里不再单独对源代码进行说明</p>
<div class="cnblogs_code" onclick="cnblogs_code_show('8adb0422-2c95-46b6-ae3b-31333adae8cb')"><img id="code_img_closed_8adb0422-2c95-46b6-ae3b-31333adae8cb" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /><img style="display: none" id="code_img_opened_8adb0422-2c95-46b6-ae3b-31333adae8cb" class="code_img_opened" onclick="cnblogs_code_hide('8adb0422-2c95-46b6-ae3b-31333adae8cb',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">相关源代码</span> 
<div id="cnblogs_code_open_8adb0422-2c95-46b6-ae3b-31333adae8cb" class="cnblogs_code_hide">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #0000ff">Const</span><span style="color: #000000">&nbsp;pi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3.14159265358979</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a1&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a2&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">计</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a3&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">计</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a4&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">计</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a5&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">计</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sk1&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">计</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a6&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a7&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a8&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a9&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a10&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a11&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;a12&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明秒</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明分</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;h&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明小时</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;d&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明日</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;s2&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明表</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;s3&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明秒</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i,&nbsp;Angle<br /></span><span style="color: #0000ff">Option</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Explicit</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;sf&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明秒</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;s1&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">声明秒</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;DtoR(x)<br />DtoR&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">3.14159265358979</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">180</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Form_Load()&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Graph1</span><span style="color: #008000"><br /></span><span style="color: #000000">Label1.ToolTipText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">点击此处运行程序&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000"><br /><br />Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Picture4_Click<br />Picture1.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Picture5_Click<br />Picture1_Click<br />Picture6_Click<br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Label1_Click()<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">飞行启动</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label1.ToolTipText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">点击此处关闭程序</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;Label1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">金杰设计</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;Timer1.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;Timer4.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;Label28&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label26<br />&nbsp;Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;Timer3.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Else</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">金杰设计</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Timer1.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />Timer2.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />Timer4.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br /><br />Unload&nbsp;</span><span style="color: #0000ff">Me</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br />Label47&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">3</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">4</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">5</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">6</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">7</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">8</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">9</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label48&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">3</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">4</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">5</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">6</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">7</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">8</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">9</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label14&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">3</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">4</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">5</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">6</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">7</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">8</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">9</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label15&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">2</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">3</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">4</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">5</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">6</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">7</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">8</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">9</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br /><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br />&nbsp;<br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Picture1_Click()<br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i,&nbsp;Angle<br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Boolean</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">72</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;Load&nbsp;Line181(i)<br />Line181(i).Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Line181(i).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000"><br />Line181(i).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置LINE的精细和颜色</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">72</span><span style="color: #000000"><br />Picture1.Scale&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)</span><span style="color: #000000">-</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">)<br /></span><span style="color: #008000">'</span><span style="color: #008000">Picture1.Circle&nbsp;(-1,&nbsp;1),&nbsp;30&nbsp;'可删除</span><span style="color: #008000"><br />'</span><span style="color: #008000">Picture1.FillColor&nbsp;=&nbsp;RGB(250,&nbsp;0,&nbsp;0)</span><span style="color: #008000"><br /></span><span style="color: #000000">Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Atn</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">18</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">画标点</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(i).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.98</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line181(i).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.98</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br /><br /><br />Line181(</span><span style="color: #800080">72</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置特殊角线宽</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">63</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">54</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">45</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">36</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">27</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">18</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">9</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置特殊角线宽</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line181(</span><span style="color: #800080">72</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置90度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">63</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置225度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">54</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置180度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">45</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置-225度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">36</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置-90度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">27</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置0度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">18</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置0度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line181(</span><span style="color: #800080">9</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置45度的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line181(i).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line181(i).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br />s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">15</span><span style="color: #000000"><br /><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Picture4_Click()&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">时钟</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />s1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />h&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />d&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i,&nbsp;Angle<br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Boolean</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">65</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;Load&nbsp;Line183(i)<br />Line183(i).Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Line183(i).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000"><br />Line183(i).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置LINE的精细和颜色</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">65</span><span style="color: #000000"><br />Picture4.Scale&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)</span><span style="color: #000000">-</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">)<br />Picture4.Circle&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">),&nbsp;</span><span style="color: #800080">30</span><span style="color: #000000"><br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Atn</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">15</span><span style="color: #000000"><br />Line183(i).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.99</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置刻度线长</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(i).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.99</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置刻度线长</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">0</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的线宽</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">5</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">10</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">15</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">20</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的线宽</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">25</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">30</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">35</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">40</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的线宽</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">45</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">50</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">55</span><span style="color: #000000">).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(</span><span style="color: #800080">0</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">5</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">10</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">15</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">20</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">25</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">30</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">35</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">40</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(</span><span style="color: #800080">45</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">50</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(</span><span style="color: #800080">55</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(i).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line183(i).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br />&nbsp;<br /><br />&nbsp;<br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Picture5_Click()<br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i,&nbsp;Angle<br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Boolean</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">23</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;Load&nbsp;Line160(i)<br />Line160(i).Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Line160(i).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000"><br />Line160(i).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置LINE的精细和颜色</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">23</span><span style="color: #000000"><br />Picture5.Scale&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)</span><span style="color: #000000">-</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">)<br />Picture5.Circle&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">),&nbsp;</span><span style="color: #800080">30</span><span style="color: #000000"><br />Picture5.FillColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">250</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Atn</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000"><br />Line160(i).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line160(i).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br />Line160(</span><span style="color: #800080">12</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">11</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">10</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">9</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">8</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">7</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">6</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">5</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">4</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;<br /><br />Line160(</span><span style="color: #800080">3</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">2</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">1</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line160(</span><span style="color: #800080">18</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line160(</span><span style="color: #800080">19</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line160(</span><span style="color: #800080">20</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line160(i).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line160(i).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br />s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">15</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Picture6_Click()<br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i,&nbsp;Angle<br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Boolean</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />flag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">23</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;Load&nbsp;Line162(i)<br />Line162(i).Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Line162(i).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000"><br />Line162(i).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置LINE的精细和颜色</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br /></span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">23</span><span style="color: #000000"><br />Picture6.Scale&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)</span><span style="color: #000000">-</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">)<br />Picture6.Circle&nbsp;(</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">),&nbsp;</span><span style="color: #800080">30</span><span style="color: #000000"><br />Picture6.FillColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">250</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Atn</span><span style="color: #000000">(</span><span style="color: #800080">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000"><br />Line162(i).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line162(i).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br />Line162(</span><span style="color: #800080">12</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">11</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">10</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">9</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">8</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">7</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">6</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">5</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">4</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">3</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">2</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">1</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line162(</span><span style="color: #800080">18</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000">Line162(</span><span style="color: #800080">19</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line162(</span><span style="color: #800080">20</span><span style="color: #000000">).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置12,15,18,21的颜色</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Line162(i).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line162(i).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br /></span><span style="color: #0000ff">Next</span><span style="color: #000000">&nbsp;i<br />s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">15</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer2_Timer()&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">时钟</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Label26&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Time<br /><br />s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">飞行时间</span><span style="color: #008000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">60</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">重新计算秒</span><span style="color: #008000"><br /></span><span style="color: #000000">m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">逢秒为60则分钟加1</span><span style="color: #008000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">60</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">重新计算分</span><span style="color: #008000"><br /></span><span style="color: #000000">h&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;h&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">逢分钟为60则小时加1</span><span style="color: #008000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;h&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">24</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />h&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">重新计算小时</span><span style="color: #008000"><br /></span><span style="color: #000000">d&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;d&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">逢24小时则天数加1</span><span style="color: #008000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />Label31&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;h&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">时</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;m&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">分</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">秒</span><span style="color: #800000">"</span><span style="color: #000000"><br /><br /><br /></span><span style="color: #0000ff">Const</span><span style="color: #000000">&nbsp;H1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">61</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">时钟</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Const</span><span style="color: #000000">&nbsp;M1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">62</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Const</span><span style="color: #000000">&nbsp;s1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">63</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;Angle<br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;LS<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LS&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Exit&nbsp;Sub</span><span style="color: #000000"><br />LS&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)<br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.5236</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">75</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置秒针</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(s1).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line183(s1).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Line183(s1).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line183(s1).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br />Line183(s1).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.995</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置秒针线长</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(s1).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.995</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置秒针线长</span><span style="color: #008000"><br /></span><span style="color: #000000">Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.1047</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">75</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">Minute</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">60</span><span style="color: #000000">))&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置分针</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(M1).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HF735AE<br />Line183(M1).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000"><br />Line183(M1).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line183(M1).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br />Line183(M1).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line183(M1).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.5236</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">15</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">Hour</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Minute</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">60</span><span style="color: #000000">))&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">设置时针</span><span style="color: #008000"><br /></span><span style="color: #000000">Line183(H1).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">)<br />Line183(H1).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000"><br />Line183(H1).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line183(H1).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br />Line183(H1).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.8</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Angle)<br />Line183(H1).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.8</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Angle)<br /><br />&nbsp;<br /><br /><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer1_Timer()&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">扫描</span><span style="color: #008000"><br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br />sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Const</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">15</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">时钟</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label9&nbsp;=&nbsp;74.47最小</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label9&nbsp;=&nbsp;76.97中间值</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label9&nbsp;=&nbsp;79.48最大</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;q&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;q&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label9&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">76.97</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;q&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">100</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label9&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">79.18</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label9&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">74.77</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.5236</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">360</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">)<br />Line181(s2).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">RGB</span><span style="color: #000000">(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">255</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />Line181(s2).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000"><br />Line181(s2).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line181(s2).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line181(s2).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Label9)<br />Line181(s2).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Label9)<br />&nbsp;</span><span style="color: #0000ff">Exit&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer3_Timer()<br />a3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a3&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000"><br />a2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a2&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000"><br />a4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a4&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000"><br />a5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a5&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000"><br />Label47.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a3<br />Label48.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a2<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">3930</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label48.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br />a2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">3930</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label47.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br />a3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />Label14.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">75</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a4<br />Label15.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">75</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;a5<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">3930</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label15.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br />a5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">3930</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label14.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br />a4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">400</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">4330</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />a10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a10&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Label10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a10<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">4330</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />a10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a10&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Label10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a10<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a9&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />a9&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Label10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />a10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Label10&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000"><br />a11&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a11&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Label13&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a11<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a11&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />a11&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Label13&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000"><br />a12&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a12&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Label11&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a11<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a12&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />a12&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Label11&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer4_Timer()<br /><br />&nbsp;<br /><br /></span><span style="color: #008000">'</span><span style="color: #008000">Label99&nbsp;=&nbsp;74.78最小</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label99&nbsp;=&nbsp;76.97中间值</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label99&nbsp;=&nbsp;79.18最大</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;q&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;q&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label33&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;q<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label99&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">79.18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;q&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">90</span><span style="color: #000000"><br />Label6&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;q<br />&nbsp;&nbsp;&nbsp;Label6&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label6&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;Label7&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">100</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label6&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">%</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />&nbsp;Label4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">剩余燃油</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;Label7&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.5236</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">360</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">)<br />Line160(s2).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFFFF00<br />Line160(s2).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Line160(s2).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line160(s2).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line160(s2).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Label99)<br />Line160(s2).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Label99)<br />&nbsp;<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label33&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">85</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">副油箱已抛弃！</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape4.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label33&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">170</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">注意返航！</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34.ForeColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFFFF</span><span style="color: #000000">&amp;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape4.BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFFFF</span><span style="color: #000000">&amp;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape4.FillColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFFFF</span><span style="color: #000000">&amp;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer8.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label33&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">339</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">剩余燃油够飞行10分钟！</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34.ForeColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFF</span><span style="color: #000000">&amp;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape4.BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFF</span><span style="color: #000000">&amp;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape4.FillColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFF</span><span style="color: #000000">&amp;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer8.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer8.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">500</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label33&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">369</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">警告！剩余燃油仅够飞行5分钟</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer8.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer8.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">250</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label99&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">74.78</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Label34&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">燃油耗尽</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer4.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer8.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br />&nbsp;<br /><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Picture7_KeyDown(KeyCode&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;Shift&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;KeyCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">37</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向左</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;KeyCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">39</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向右</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;KeyCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">38</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label5.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label5.Top&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向上</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />Label19.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label19.Top&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000"><br />Label19&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">高度</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">m</span><span style="color: #800000">"</span><span style="color: #000000"><br />Label2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">m</span><span style="color: #800000">"</span><span style="color: #000000"><br /><br />Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;<br />&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">25000</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;Label3.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">25000</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;Label3.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">8420</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;Label19.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">30</span><span style="color: #000000"><br />&nbsp;Label5.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">70</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;<br />&nbsp;<br /><br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;KeyCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">40</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向下</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;Label5.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label5.Top&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向上</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;Label19.Top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label19.Top&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10</span><span style="color: #000000"><br />&nbsp;Label19&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">高度</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">m</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;Label2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">m</span><span style="color: #800000">"</span><span style="color: #000000"><br />&nbsp;Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">8520</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;Label5.Top)&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">25000</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;Label3.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />&nbsp;<br />&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;<br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer5_Timer()<br /></span><span style="color: #008000">'</span><span style="color: #008000">Label99&nbsp;=&nbsp;74.77最小</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label99&nbsp;=&nbsp;76.97中间值</span><span style="color: #008000"><br />'</span><span style="color: #008000">Label99&nbsp;=&nbsp;79.18最大&nbsp;Label3</span><span style="color: #008000"><br /></span><span style="color: #000000">Label29&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2.42857142857143</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1000</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3600</span><span style="color: #000000"><br />&nbsp;a6&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a6&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Label32&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a6&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />&nbsp;Label25&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">74.77</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">90</span><span style="color: #000000"><br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.5236</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">360</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">)<br />Line162(s2).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFFFF00<br />Line162(s2).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Line162(s2).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line162(s2).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line162(s2).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Label25)<br />Line162(s2).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Label25)<br />&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label25&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">79.17</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向下</span><span style="color: #008000"><br /></span><span style="color: #000000">Timer5.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Timer5.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">325</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">警告:飞机已超过最大飞行速度!</span><span style="color: #800000">"</span><span style="color: #000000"><br />Label3.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer6_Timer()<br />Label29&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2.42857142857143</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1000</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">3600</span><span style="color: #000000"><br />Label32&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a6&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />a6&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a6&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Label25&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">74.77</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">90</span><span style="color: #000000"><br />Angle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.5236</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">360</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Second</span><span style="color: #000000">(Now)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">)<br />Line162(s2).BorderColor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">HFFFF00<br />Line162(s2).BorderWidth&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />Line162(s2).X1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line162(s2).Y1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Line162(s2).X2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #0000ff">Cos</span><span style="color: #000000">(Label25)<br />Line162(s2).Y2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.95</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sin</span><span style="color: #000000">(Label25)<br />&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label25&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">74.78</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">向下</span><span style="color: #008000"><br /></span><span style="color: #000000">Timer6.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br />Timer6.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">324</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label3.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;Label32&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label29&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Label27_MouseMove(Button&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;Shift&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;x&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Single</span><span style="color: #000000">,&nbsp;Y&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Single</span><span style="color: #000000">)<br />&nbsp;</span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;q1&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br />Timer5.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /><br />Timer6.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">50</span><span style="color: #000000"><br />Line7.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />&nbsp;<br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Picture2_MouseMove(Button&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;Shift&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;x&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Single</span><span style="color: #000000">,&nbsp;Y&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Single</span><span style="color: #000000">)<br />Timer5.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />Timer6.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Label21_MouseMove(Button&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;Shift&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">,&nbsp;x&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Single</span><span style="color: #000000">,&nbsp;Y&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Single</span><span style="color: #000000">)<br /></span><span style="color: #0000ff">Static</span><span style="color: #000000">&nbsp;q2&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Long</span><span style="color: #000000"><br />Timer6.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />Timer5.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">50</span><span style="color: #000000"><br /><br />Line7.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer7_Timer()<br />sk1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sk1&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br />&nbsp;<br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;sk1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;&nbsp;&nbsp;本次飞行资料</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">----------------------</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;起飞时间：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;Label28&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;飞行高度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;Label2&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;空&nbsp;&nbsp;速：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;加力速度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;飞行高度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;飞行速度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;发动机功率：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;爬升速度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;爬升过载：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;巡航速度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;加速度过载：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;录音保存格式：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;内部燃油：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;瞬时转弯速度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br />Label17&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Label17&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;&nbsp;持续转弯速度：</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;vbCrLf<br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;sk1&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Timer7.Enabled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />sk1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">0</span><span style="color: #800000">"</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;Timer8_Timer()<br />a7&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a7&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a7&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Shape4.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;a7&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />Shape4.Visible&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />a7&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End&nbsp;Sub</span></div></div></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源代码下载：<a title="航空仪表模拟" href="http://files.cnblogs.com/lvjinjie/VB模拟航空仪表.rar" target="_blank">航空仪表模拟</a>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下一篇：键盘虚拟测试</p></div> <img src="http://www.cnblogs.com/lvjinjie/aggbug/1666928.html?type=1" width="1" height="1" alt=""/><p>评论: 4　<a href="http://www.cnblogs.com/lvjinjie/archive/2010/02/10/1666928.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/lvjinjie/archive/2010/02/10/1666928.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>一个阳光女孩儿的来信——Leo网上答疑(21)</title><link>http://www.cnblogs.com/zhaopinpro/archive/2010/02/10/1666920.html</link><dc:creator>leo（张大志）</dc:creator><author>leo（张大志）</author><pubDate>Wed, 10 Feb 2010 00:35:00 GMT</pubDate><guid>http://www.cnblogs.com/zhaopinpro/archive/2010/02/10/1666920.html</guid><description><![CDATA[<p>阅读: 1346 评论: 11 作者: <a href="http://www.cnblogs.com/zhaopinpro/" target="_blank">leo（张大志）</a> 发表于 2010-02-10 08:35 <a href="http://www.cnblogs.com/zhaopinpro/archive/2010/02/10/1666920.html" target="_blank">原文链接</a></p><p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">Leo</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">，</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">您好，展信悦！</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我现在在职业规划上有一些困惑，想咨询您。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">先介绍一下我的基本情况吧：</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">05</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">年本科毕业、计算机系，目前在一家通讯公司从事数据产品公共基础模块。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我想我有如下一些特点：</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; text-indent: -18pt; margin: 0cm 0cm 0pt 18pt; mso-list: l0 level1 lfo1" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'" lang="EN-US"><span style="mso-list: Ignore"><font face="Times New Roman">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">沟通协调能力不错：承担的是公共基础模块开发，几乎和产品研发的各个模块都有交道。</span><span style="color: #009900; font-size: 12pt"><font face="Times New Roman"> </font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">别人有问题都愿意找我、和我讨论，包括测试部的兄弟姐妹。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; text-indent: -18pt; margin: 0cm 0cm 0pt 18pt; mso-list: l0 level1 lfo1" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'" lang="EN-US"><span style="mso-list: Ignore"><font face="Times New Roman">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">乐于分享心得经验：喜欢把自己开发过程中的心得写成总结，并且愿意和别人分享，从事部门的技术积累工作和科室内培训工作，而且很喜欢。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; text-indent: -18pt; margin: 0cm 0cm 0pt 18pt; mso-list: l0 level1 lfo1" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'" lang="EN-US"><span style="mso-list: Ignore"><font face="Times New Roman">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">兴趣爱好广泛：可能源于个性，我很愿意尝试新鲜的东西，并且能在别人看来枯燥乏味的工作中找到乐子和驱动力。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; text-indent: -18pt; margin: 0cm 0cm 0pt 18pt; mso-list: l0 level1 lfo1" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt; mso-fareast-font-family: 'Times New Roman'" lang="EN-US"><span style="mso-list: Ignore"><font face="Times New Roman">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">责任性强，愿意承担、有韧劲：别人交待给我的事情我都进尽善尽美地做好，有的时候我自己还会找事，但从另一个角度导致的极端就是不会拒绝，来者（需求、任务）不拒，经历了今年上半年的恶性循环我也开始学乖了，在适当的时候要学会拒绝和据理力争！</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我前后经历了</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">3</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">任科长：</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><br /></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">第一任科长：猫王时代</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">2005</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">年～</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">2007</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">年</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">他一直赏识我激励人，会提醒我思维发散可以，但要学会收敛。这段时间我干得很</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">happy</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">第二任科长：心灵阵痛和沉淀时期</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">2007</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">年</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">-2008</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">年</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">继任科长名义上是我入公司以来的师傅，其实他不负责我维护开发的模块。一日之师百日恩，所以对他还是心存感激的。自从他当科长后，对员工实施了强制加班。相处多了，了解他是欺软怕硬型的，总是给我下任务，而且总认为一些需求功能是小</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">case,</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">而真正做了不是当初预想的。对于我的开发工作，</span><span style="font-family: 宋体; color: red; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">很少有赞赏的语言，更多的是讽刺挖苦加打击</span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">。说我做技术积累，和别人分享心得没屁用，在现在的公司没有发展前途，唯有做好技术才是王道。所以在不断鄙视和强大的研发压力中我变得寡言忧郁，那段时间做了一些其他模块的东东，但是因为</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">4</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">个开发任务几乎同时开展还要带徒弟，所以开发过程控制不是很好，而且经常越忙越乱，错误百出，我自己也很无奈，可我的心疲惫了，所以没有斗志，只是希望自己慢慢地从抑郁中走出来。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">今年</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">7</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">月，一家大型通讯公司</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">A</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">瞄准了我，去年挖我的时候我断然拒绝了，但今年在对自己能力极度怀疑和自我折磨的时候，我答应了。</span><span style="color: #009900; font-size: 12pt"><font face="Times New Roman"> </font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">不多言，我过去</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">A</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">面试：过去也是从事数通产品开发。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">10</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">月中旬招聘负责人和我说：在薪水不变的前提下，以开发身份入职</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">A,</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">然后转做</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">QA</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">。、今年</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">6</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">月，在现在的公司开始的一个新版本的开发任务时，我觉得自己能够驾轻就熟了，而且过程控制也很好，慢慢找到了自信。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">第三任科长：</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">2008</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">年中</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">--</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">至今重获新生啦</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><br /></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">是我模块的师傅担任了科长。我还挺喜欢在他手下工作的，因为对模块熟悉对我的能力评估也相对准确，安排任务适当。</span><span style="color: #009900; font-size: 12pt"><font face="Times New Roman"> </font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">所以我对培训、技术积累也恢复了兴趣，就是人整个又开朗起来了。可以说走出来了！</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">前段时间外企</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">B</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">给我提供了一个偏推动交流类的工作，这可以发挥我英语方面的特长，而且不用加班。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">公司一位同事，推荐我到国际市场锻炼一下：就是让我权衡一下个人问题和职业发展。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">OK</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">，现在职业发展上可以供我的选择是：</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><br style="mso-special-character: line-break" /><br style="mso-special-character: line-break" /><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">（</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">1</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">）去</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">A</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">做</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">QA</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">，因为做</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">QA</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">肯定要对</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">A</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">目前的研发流程有所了解，所以先要干一段时间研发，说不准如果换了模块做研发做得爽，我可能会愿意多做一段时间研发，再考虑下一步怎么走。呵呵。而且也想感受一下这家公司的文化。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">（</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">2</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">）留在目前公司。但我不愿意再做原来的模块，想尝试测试或者协议模块的开发，这一点和我部长在初流露过，部长：支持我。我也和测试部部长交流过：非常欢迎，就等着我现在部长放人。说老实话这个选择上我积累了不少人脉，口碑还是很不错的。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">（</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">3</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">）目前公司的国际市场售前技术支持：简历发过去了，等待项目进度缺人了再面试。能出国开阔视野也是我一直的梦想，而这个岗位</span><span style="color: #009900; font-size: 12pt"><font face="Times New Roman"> </font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">可以对产品从需求研发到生产物流财务的整个层面上去了解，也是我想了解的。但自觉目前技术面不够宽，可能缺乏底气。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">（</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">4</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">）外企</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">B</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">的推行工作：从地域上看暂时不想过去，人生地不熟。但是一位挚友推荐的，他认为很适合我，而且发展前景不错，我相信他说的。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; color: red; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">从个人职业发展角度：</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">一方面我想走预研类的线路：沉迷感受技术给人类带来的便利，想结合人文的观点联系着去看技术。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">一方面想发挥自己沟通协调能力和英语方面的特长（更倾向得）：做管理、市场等偏沟通类工作，因为这个世界的运作还是靠人。但自觉技术背景上缺乏底气，为人处世上缺少一些圆融。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">&nbsp;<o:p></o:p></font></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; color: red; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">从赚钱角度：</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我想现在如果在同样劳动强度下，或者更轻松些，更多一些</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">money</font></span><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">，也未尝不好。毕竟工作也是为了生活嘛。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">昨晚想到这些问题就想找个前辈聊聊，一早起来上网无意间看到你写的很喜欢，我似乎看到了自己的影子，很受启发和激励。所以想听听您的建议。谢谢！</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">也看到您夫人的文章了，其实我内心里也想做一个事业和家庭兼顾的女人。我还是很喜欢培养一个小孩的过程，也喜欢把自己的心得体会与爱人分享，希望能和心爱的人有说不完的话。</span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #009900; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">祝你们全家幸福快乐</span><span style="font-family: Wingdings; color: #009900; font-size: 12pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings" lang="EN-US"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span></span><span style="color: #009900; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">Best wishes!<o:p></o:p></font></span></p>
<div style="border-bottom: windowtext 1pt solid; border-left: medium none; padding-bottom: 1pt; padding-left: 0cm; padding-right: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
<p style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0cm; margin: 0cm 0cm 0pt; padding-left: 0cm; padding-right: 0cm; border-top: medium none; border-right: medium none; padding-top: 0cm; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm" class="MsoNormal" align="left"><span style="color: #009900; font-size: 12pt" lang="EN-US"><font face="Times New Roman">Ling<o:p></o:p></font></span></p></div>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">Ling</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">，你好！</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">非常感谢来信，谢谢！要知道，我每天都花时间回复</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8220;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">职业求助类</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8221;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">邮件。这类邮件多数充满了自怨自艾、迷茫、自卑，读的多了、回的多了，我都快有心理阴影了，最近准备找找心理医生。你的邮件正是我在等待的。在信中我感受到了一个开朗、自信、充满阳光的女孩儿。再次表示我的感谢！阳光的邮件多了，我才更有信心把网上答疑这个专栏写下去啊！</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">展示你的邮件的另一个目的是，希望向更多人展示年轻人的风采。在你信中除了乐观，还体现了良好的思维逻辑、对自己的选择有分析、对每个机会都进行充分交待，以方便别人理解。那些在邮件中写下</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8220;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我不想说的太多，但我迷茫了，指点一下吧</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8221;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">的人，应该向你学习。如果真能像你一样缜密地思考，可能很多人的问题自己就可以找到答案。</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">下面，我来说说对你的建议：</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><font face="Times New Roman">1</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; color: red; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">、兴趣是最好的老师</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">&#8220;兴趣是最好的老师&#8221;这是我反复强调的观点。像你在信中写到的</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8220;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">沉迷感受技术给人类带来的便利，同时想发挥自己沟通协调能力和英语方面的特长</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8221;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">，手里的几个机会哪个能两都都满足？如果只能满足一个，什么又是你内心之中最渴望的？权衡一下手里的这几个选择，选择那个更能满足你内心的渴望和职业的梦想。只有你最了解自己，在这种事情上还是要相信</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8220;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">心的选择</span><span style="font-size: 12pt" lang="EN-US"><font face="Times New Roman">&#8221;</font></span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">。</span><span style="font-size: 12pt; mso-hansi-font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">网友曾引用李敖的话：&#8220;<span style="color: #0000cc">妓女不能靠性欲接客，作家不能靠灵感写作&#8230;&#8230;，所以程序员不能靠兴趣工作</span>&#8221;我相信即使写下此留言的程序员可能愿意把自己比喻成作家。不可否认的是，所有行业之中总会有最出色的一群人，也许是兴趣支持他们把工作做地更好的。</span><span style="font-size: 12pt; mso-hansi-font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><font face="Times New Roman">2</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; color: red; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">、内部转换成本最低</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">我个人更倾向于在你公司目前内部的两个机会做选择，这样付出的成本最低。你即不需要重新获得别人的认可，也对下一步的工作更了解。任何新公司、新机会，在你并有进入真正岗位之前对你都有一部分是黑洞，而这些黑洞有时候是致命的。顺便说一句，有些公司上班都不让用有照相功能的手机</span><span style="font-family: 宋体; font-size: 12pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">&#8212;&#8212;</span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">相信你知道我说的是哪家，哈！</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><font face="Times New Roman">3</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; color: red; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">、保持阳光的心态</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: red; font-size: 12pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">无论你选择了哪个机会，都请保持现在的阳光心态。有阳光心态才能把很多事情想明白，不至于被利益所引诱。加上你善于逻辑思考的头脑，相信你一定有个美好的未来。</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-size: 12pt" lang="EN-US"><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">祝一切顺利！</span><span style="font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 'Arial','sans-serif'; font-size: 12pt" lang="EN-US">Leo</span><span style="font-family: 宋体; font-size: 12pt; mso-hansi-font-family: Arial; mso-ascii-font-family: Arial; mso-bidi-font-family: Arial">（张大志）</span><span style="font-family: 'Arial','sans-serif'; font-size: 12pt" lang="EN-US"><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">邮箱：</span></strong><span style="font-size: 12pt" lang="EN-US"><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#122;&#104;&#97;&#111;&#112;&#105;&#110;&#112;&#114;&#111;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;" target="_blank"><strong style="mso-bidi-font-weight: normal"><span style="color: #000099"><font face="Times New Roman">zhaopinpro@gmail.com</font></span></strong></a><o:p></o:p></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; font-size: 12pt; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">职场小说《漂在中关村》目前正在围脖更新，欢迎关注：</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 12pt" lang="EN-US"><a href="http://t.sina.com.cn/zhaopinpro" target="_blank"><font face="Times New Roman">http://t.sina.com.cn/zhaopinpro</font></a><o:p></o:p></span></strong></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">《程序员羊皮卷》作者签名版购买地址：</span></strong><span style="font-size: 12pt" lang="EN-US"><a href="http://www.china-pub.com/196049" target="_blank"><strong style="mso-bidi-font-weight: normal"><span style="mso-hansi-font-family: 宋体"><font face="Times New Roman">http://www.china-pub.com/196049</font></span></strong></a></span><strong style="mso-bidi-font-weight: normal"><span style="font-size: 12pt; mso-hansi-font-family: 宋体" lang="EN-US"><o:p></o:p></span></strong></p>
<p style="line-height: 115%; margin: 0cm 0cm 0pt; mso-pagination: widow-orphan" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 宋体; color: black; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">程序员职业规划交流群</span></strong><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 宋体; color: #444444; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'">：</span></strong><span style="line-height: 115%; font-size: 12pt" lang="EN-US"><a href="http://qun.qq.com/air/#69621422" target="_blank"><strong style="mso-bidi-font-weight: normal"><font face="Times New Roman">http://qun.qq.com/air/#69621422</font></strong></a><strong style="mso-bidi-font-weight: normal"><o:p></o:p></strong></span></p><img src="http://www.cnblogs.com/zhaopinpro/aggbug/1666920.html?type=1" width="1" height="1" alt=""/><p>评论: 11　<a href="http://www.cnblogs.com/zhaopinpro/archive/2010/02/10/1666920.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/zhaopinpro/archive/2010/02/10/1666920.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>开源那些事儿(四)-如何使用CodePlex进行项目管理</title><link>http://www.cnblogs.com/procoder/archive/2010/02/10/About-Open-Source-4.html</link><dc:creator>Jake Lin</dc:creator><author>Jake Lin</author><pubDate>Tue, 09 Feb 2010 23:14:00 GMT</pubDate><guid>http://www.cnblogs.com/procoder/archive/2010/02/10/About-Open-Source-4.html</guid><description><![CDATA[<p>阅读: 951 评论: 7 作者: <a href="http://www.cnblogs.com/procoder/" target="_blank">Jake Lin</a> 发表于 2010-02-10 07:14 <a href="http://www.cnblogs.com/procoder/archive/2010/02/10/About-Open-Source-4.html" target="_blank">原文链接</a></p><h1>背景</h1>  <p>随着<a href="http://itoday.codeplex.com/" target="_blank">iToday</a>项目的发展，人员的扩展，需要一定的项目管理流程来保证项目不会流产。一个具有一定规范的开源项目，单靠个人激情和能力来完成项目的几率非常的低，没有项目管理流程，后续开展会变得困难，项目的可延续性也得不到保证。因此需要想办法实施有效的项目管理。</p>  <p>&nbsp;</p>  <h1>简介</h1>  <p>本文讲述如何使用CodePlex进行开源项目的管理。</p>  <p>&nbsp;</p>  <h1>项目管理理论与个人理解</h1>  <p>书本上的项目管理定义了九大关键域，包括范围管理 风险管理 沟通管理 质量管理 时间管理 成本管理 人力资源管理 采购管理 整合管理。包罗万象，林林种种。但是到了实施过程中每个人都有自己的理解，我对项目管理的理解是：<strong>有效利用有限的资源，使用一定的控制手段，达到预定的目标。</strong> 由于人力资源，资金成本等是永远都有限，特别是开源项目，主要由有兴趣的贡献者参与，人员不能保证，所以如何有效利用有限的资源很重要。在有效的资源下，通过计划，沟通等手段保证把有限的资源能充分的发挥作用，例如做开源的时候把贡献者安排到其最感兴趣的领域，发挥其最大的作用。这些控制手段同时包括风险控制和质量控制，使用版本管理工具一定程度的减低风险。完成预定的目标这个很重要，资源本身有限，时间也是有限，制定一个可预见的目标十分重要，我会使用版本管理来指定目标。下面讲述如果通过Codeplex实施项目管理，来达到我理解的项目管理目的。</p>  <p>&nbsp;</p>  <h1>项目管理原则</h1>  <p>我的原则是<strong>尽量减少所有Stakeholder(项目干系人)的工作，同时最大程度的保证项目的可延续性。</strong>这本身就是博弈，世界没有银弹，只能尽量均衡。这里说的stakeholder包括开发者，测试者，协调人员等等，大家都是无偿的贡献，没必要走一个很完美的流程，例如CMMI那些来增加大家的工作量，所以我尽量的简化项目流程，使得大家可以专注于自己喜欢的事情上。在尽量少的项目管理工作来保证项目的延续性。</p>  <p>&nbsp;</p>  <h1>Codeplex Issue Tracker</h1>  <p>我使用Codeplex 的 Issue Tracker功能进行项目管理，地址如下: <a target="_blank" title="http://itoday.codeplex.com/WorkItem/List.aspx" href="http://itoday.codeplex.com/WorkItem/List.aspx">itoday.codeplex.com/WorkItem/List.aspx</a> ，因为Codeplex本身带了这个系统，不需要另外找项目管理系统，尽管这个系统不是很完善，我们还是可以在其基础上使用。</p>  <p>&nbsp;</p>  <p>Issue Tracker是一个问题跟踪系统，一般用在bug处理上，但是也可以用到需求管理，任务分配，版本控制等功能，下面讲述每个Issue包含了那些内容。</p>  <h4>&nbsp;</h4>  <h2>版本</h2>  <p>我认为版本是Issue最关键的信息，代表着目的与目标，任何Issue都是有目标而做的。当前我把版本分成三类，真实的版本，Future版本和Konwn Issues版本。</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-9_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-9" alt="open-source-project-management-9" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-9_thumb.png" border="0" width="279" height="532" /></a> </p>  <h3>真实的版本</h3>  <p>例如V 1.0.0, V2.0.0那些，就是需要发布的版本，在开源软件里面是提供给用户下载的版本，也是需要完成的目标。</p>  <p>&nbsp;<a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-6_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-6" alt="open-source-project-management-6" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-6_thumb.png" border="0" width="449" height="538" /></a></p>  <p>上面是Version 1.0.0的需要完成的功能，我们把需求作为Issue关联到Version 1.0.0，一旦完成了这些需求，就可以发布Version 1.0.0了。当然在开发过程中如果发现bugs，而且这些bugs关联到Version 1.0.0，那么发布之前也需要修改这些bugs，发布版本的标志是完成该版本下所有的Issues。</p>  <p>&nbsp;</p>  <h3>Future版本</h3>  <p>由于资源的有限性，不可能在一个版本内完成所有的需求，那么一些需求需要放到Future版本中去了。这些需求可能在未来的版本中实现。</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-8_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-8" alt="open-source-project-management-8" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-8_thumb.png" border="0" width="381" height="408" /></a></p>  <h3>Konwn Issues版本</h3>  <p>有些问题在当前版本中存在，但是由于某些客观条件限制，不能在当前版本中实现，可以归类为Known Issues。</p>  <p>&nbsp;<a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-7_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-7" alt="open-source-project-management-7" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-7_thumb.png" border="0" width="382" height="417" /></a></p>  <p>&nbsp;</p>  <h2>状态</h2>  <p>每个Issue都有状态，包括计划的，活动和已经修改的，创建Issue的时候是Proposed，Assigned to的人会开始处理这个Issue，修改为Active,如果Issue完成了就改为Fixed。发布版本之前所有Issues都应该为Fixed。在我看来，这些状态是不够的，太简单了，至少需要Won't Fix和Duplicate,Cannot Reproduce，有些所谓的bug是不需要fix的，有些Issue是重复的，有些bug是不可重现的。所以我说Codeplex Issue Tracker的功能不够完善。</p>  <p>&nbsp;<a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/opensourceprojectmanagement2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-2" alt="open-source-project-management-2" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/opensourceprojectmanagement2_thumb.png" border="0" width="247" height="475" /></a></p>  <h2>类型</h2>  <p>类型分Feature,Issue和Task。Feature是软件具备的功能，可以理解为需求。Issue是一些问题，可以理解为bug。Task表示一些任务，包括各种任务，例如实现需求的子步骤，编写文档，一些项目管理工作等等。</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/opensourceprojectmanagement3.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-3" alt="open-source-project-management-3" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/opensourceprojectmanagement3_thumb.png" border="0" width="250" height="476" /></a></p>  <p>举一个实例：</p>  <p>我们需要完成Weather Panel的功能。</p>  <p>我新建了一个&#8220;新增Weather Panel&#8221;的Feature。 </p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-11_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-11" alt="open-source-project-management-11" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-11_thumb.png" border="0" width="771" height="436" /></a></p>  <p>链接在<a target="_blank" title="http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5992" href="http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5992">http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5992</a></p>  <p>&nbsp;</p>  <p>同时实现这个Feature至少需要下面两个子任务(Task)，可能更多Tasks，但是先列举两个。</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-12_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-12" alt="open-source-project-management-12" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-12_thumb.png" border="0" width="781" height="444" /></a></p>  <p>链接在 <a target="_blank" href="http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5993">http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5993</a></p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-13_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-13" alt="open-source-project-management-13" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-13_thumb.png" border="0" width="771" height="429" /></a>&nbsp;&nbsp;&nbsp; </p>  <p>链接在 <a target="_blank" title="http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5994" href="http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5994">http://itoday.codeplex.com/WorkItem/View.aspx?WorkItemId=5994</a></p>  <p>&nbsp;</p>  <p>作为类型，我觉得只有Feature，Issue和Task是不够的，我们使用的另外一套系统中，类型包括下面那些：</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-10_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-10" alt="open-source-project-management-10" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-10_thumb.png" border="0" width="232" height="234" /></a></p>  <p>但是CodePlex只是提供那么多，我们先用吧。</p>  <p>&nbsp;</p>  <h2>优先级</h2>  <p>优先级很好理解，如下图：</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-4_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-4" alt="open-source-project-management-4" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-4_thumb.png" border="0" width="253" height="485" /></a></p>  <p>&nbsp;</p>  <h2>组件</h2>  <p>当前iToday有两个组件，一个是Panels，表示应用，如何Home，Weather，Contact Panel那些。而UtilityLib表示一些非UI的公开库，例如WebService属于UtilityLib。</p>  <p><a target="_blank" href="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-1_2.png"><img style="border-width: 0px; display: inline;" title="open-source-project-management-1" alt="open-source-project-management-1" src="http://images.cnblogs.com/cnblogs_com/procoder/WindowsLiveWriter/ab19bb065801_7FC6/open-source-project-management-1_thumb.png" border="0" width="861" height="443" /></a>&nbsp;&nbsp;&nbsp; </p>&nbsp;  <h1>如何使用Codeplex Issue Tracker进行项目管理</h1>  <h2>流程</h2>  <p>项目开始之初收集需求，所有需求都记录下来作为Feature。</p>  <p>然后定义版本，例如定义Version 1.0.0,把需要实现的需求作为Feature绑定到Version 1.0.0中，分派任务。</p>  <p>得到任务的开发者可以根据需求自己定义子任务，例如上面例子的封装WebService等等。</p>  <p>开发人员把任务变成Active，开展自己的开发工作。</p>  <p>任务完成后，把任务变成Fixed。</p>  <p>版本Version 1.0.0下所有Issues变成Fixed以后，项目协调人统一发布版本。</p>  <p>定义版本Version 1.0.1，作为Version 1.0.0的完善版本。</p>  <p>测试人员开始测试，使用Issue Tracker提交bug，类型为Issue，关联到Version 1.0.1。</p>  <p>修改Version 1.0.1下所有问题，Fixed所有Issues，发布Version 1.0.1。</p>  <p>周而复始（Version 1.0.1,Version 1.0.2&#8230;&#8230;），一直完善当初Version 1.0.0下的所有Feature。注意不需要把新功能加入Version1.0.1，否则Issue会越来越多，新需求是Version 2.0.0或者Future版本。</p>  <p>与此同时可以定义Version 2.0.0，从Future版本中的一些Feature移到Version 2.0.0，重复Version 1.0.0的步骤。</p>  <p>&nbsp;</p>  <p>Version 2.0.0和Version 1.0.0需要同步，这里包含了如何使用SVN等细节，但是不影响Codeplex Issue Tracker的项目管理流程，我先不在这里讲述了。</p>  <p>&nbsp;</p>  <h2>贡献者责任</h2>  <p>各种贡献者如何使用Codeplex Issue Tracker来完成项目管理流程如下：</p>  <p><strong>项目协调人</strong>：定义版本的Feature。分配任务(Feature和Task)。发布版本。</p>  <p><strong>开发人员</strong>：定义子任务(Task)。开发。提交版本。</p>  <p><strong>测试人员</strong>：提交bug(Issue)。</p>  <p>&nbsp;</p>  <p>我觉得流程很简单了，如果可以简化继续简化。这是一个蓝本，大家在实施过程中做流程完善。有问题及时提出，及时修改流程。</p>  <p>&nbsp;</p>  <p>还有SVN的管理也是非常重要，后续讲。</p><p>&nbsp;</p><h1>关于iToday项目</h1><p>可以参考</p><p><a target="_blank" id="homepage1_HomePageDays_DaysList_ctl04_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/procoder/archive/2010/02/02/About-Open-Source.html">开源(Open Source)那些事儿 (一)</a></p><p><a target="_blank" id="homepage1_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/procoder/archive/2010/02/05/About-Open-Source-2.html">开源那些事儿 (二) - iToday开源项目计划</a></p><p><a target="_blank" id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/procoder/archive/2010/02/09/About-Open-Source-3.html">开源那些事儿(三)-iToday的总体设计</a>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><img src="http://www.cnblogs.com/procoder/aggbug/1666917.html?type=1" width="1" height="1" alt=""/><p>评论: 7　<a href="http://www.cnblogs.com/procoder/archive/2010/02/10/About-Open-Source-4.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/procoder/archive/2010/02/10/About-Open-Source-4.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Visual Studio 2010和.Net Framework 4 RC版本发布</title><link>http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html</link><dc:creator>jv9</dc:creator><author>jv9</author><pubDate>Tue, 09 Feb 2010 19:20:00 GMT</pubDate><guid>http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html</guid><description><![CDATA[<p>阅读: 1702 评论: 16 作者: <a href="http://www.cnblogs.com/jv9/" target="_blank">jv9</a> 发表于 2010-02-10 03:20 <a href="http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html" target="_blank">原文链接</a></p><p>2009年2月9日，微软发布Visual Studio 2010 Release Candidate版本和.Net Framework 4.0 Release Candidate版本,大家可以在<a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank">MSDN Subscribers</a>下载.</p>
<p>&nbsp;</p>
<p>众所周知，候选版本，是属于预发行版本，和测试版最大的不同是候选版本基本不再添加新的功能，主要是集中排除Bug和测试.&nbsp;对于这次RC版本的发布，微软作出以下注释：</p>
<p>&nbsp;</p>
<p>1. Visual Studio 2010 和 .Net Framework 4 Release Candidate版本下载，2月8日在<a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank">MSDN Subscribers</a>提供下载，2月10日提供全面下载。</p>
<p>2. Visual Studio 2010 RC版本，仅支持Silverlight 3项目应用开发，暂时不支持Silverlight 4项目开发，也就是说，如果需要开发Silverlight 4，只能使用Visual Studio 2010 Beta2 和 .NET 4 Framework&nbsp;Beta2。</p>
<p>3. 安装Visual Studio 2010 RC版本，必须先卸载Visual Studio 2010 Beta2 和 .NET 4 Framework&nbsp;Beta2。</p>
<p>4. Visual Studio 2010 RC版本允许同时安装Visual Studio 2005 和2008。</p>
<p>&nbsp;</p>
<p>对于此次版本发布，最关注的莫属Silverlight开发人员，为什么Silverlight 4版本没有更新，甚至连正式发布时间也没有？微软的解释是Silverlight 4需要有一个稳定的开发平台，也就是Visual Studio 2010. 只有在开发平台稳定的情况下，才能保证Silverlight项目开发的稳定性。</p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/jv9/aggbug/1666910.html?type=1" width="1" height="1" alt=""/><p>评论: 16　<a href="http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Visual Studio DSL 入门 6---DSL的图形表示1</title><link>http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html</link><dc:creator>孤独侠客</dc:creator><author>孤独侠客</author><pubDate>Tue, 09 Feb 2010 18:19:00 GMT</pubDate><guid>http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html</guid><description><![CDATA[<p>阅读: 607 评论: 5 作者: <a href="http://www.cnblogs.com/lonely7345/" target="_blank">孤独侠客</a> 发表于 2010-02-10 02:19 <a href="http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp;&nbsp; 到现在为止，我们还是只是介绍模型相关的东西，还没有接触到Dsl的模型的展现，对于一个Dsl来说，没有图形展现也是可行的，不过对于一个开发工具来说，要提供一种方式来操作我们的元数据,Visual Studio DSL在图形展现这方面提供了不错的支持，不过对于复杂的Dsl来说，图形的展现往往需求很复杂，现在的图形化支持在一定程度上也未必能够满足一些特定的需求, 有总比没有好，期望微软会在这方面会有所加强。&nbsp; <br />&nbsp;&nbsp;&nbsp; 还是以我们创建的LanguageSm项目为例，我们大概介绍一下界面表示相关的概念,打开DslDefinition.dsl文件,这次我们看泳道(也就是树线)的右边: <br />&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-9%2022-39-46_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-9 22-39-46" border="0" alt="2010-2-9 22-39-46" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-9%2022-39-46_thumb.png" width="275" height="391" /></a> <br />&nbsp;&nbsp; <strong>一. 图表</strong> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们看最下面的LanguageSmDiagram,这就是图表元素，它是存储形状和连接器映射的容器，代表设计界面自身，映射到模型的根域类(图形元素Diagram Elements都是与模型相对应的),也就是映射到我们例子里的ExampleModel,我们来看一下图表的属性: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-12-07_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 0-12-07" border="0" alt="2010-2-10 0-12-07" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-12-07_thumb.png" width="493" height="516" /></a>&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; 在这里，我们可以对图表的外观，代码，文档，公开样式属性，资源几个方面进行属性设置，Dsl会收集设置的这些信息，然后根据T4模板，在Dsl项目的Generate Code文件夹下面生成Diagram类，我们也可以对这个类进行扩展，实现图表方面的一些自定义，比如设置背景图，显示网络等。如果你想实现Dsl模型的自己的界面表示方式，也需要实现自己的图表元素Diagram类.</p>
<p>&nbsp;&nbsp; <strong>二.编辑器 <br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编辑器分为两种类型：(图形)设计器和自定义编辑器.编辑器的定义在Dsl资源管理器(Dsl Explorer)中的&#8220;编辑器&#8221;(editor)节点下，这里的定义的属性用于生成EditorFactory类(熟悉VSX的应该知道，我们会在后面介绍)，工具箱等，我们来看一下默认的设计器的属性: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-27-41_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 0-27-41" border="0" alt="2010-2-10 0-27-41" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-27-41_thumb.png" width="777" height="349" /></a> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <em>这里需要提示一下，在dsl设计的过程中，有很多时候需要dsl浏览器和属性对应操作使用，可以通过右键属性来进行设置。 <br /></em>&nbsp;&nbsp;&nbsp;&nbsp; 属性里设置了编辑器对应的图表元素，编辑器的GUID,根域类，以及存储Dsl模型的文件扩展名，与文件关联的图标。或许你不太明白这些属性代表什么意义，没有关系，以后会明白的。 <br />&nbsp;&nbsp;&nbsp;&nbsp; 我们在第一节就说过， Dsl模型并不一定要有图形编辑器的，我们也可以在这里添加我们自定义的编辑器，你可以右键删除默认的Editor,然后在根结点LanguageSm上右键添加自定义编辑器，然后设置上面说的那些属性，然后实现自己的DocView，在<a href="http://altinoren.com/PermaLink,guid,643ec407-4fe1-4238-a24e-20ef8b134a99.aspx" target="_blank">这里</a>有详细流程，具体的方法我们也会在后面详细介绍. <br />&nbsp;&nbsp;&nbsp; <img border="0" src="http://altinoren.com/content/binary/WPFDSLEditorResult.png"  alt="" /> <br /><br />&nbsp;&nbsp;&nbsp; <strong>三.形状 <br /></strong>&nbsp;&nbsp;&nbsp;&nbsp; 形状是Dsl图形符号的重点，因为形状和模型元素一一对应(前面说的ExampleShape是一个几何形状,和根域类对应),可以使模型元素形象化，这也是Vs.Net DSL图形化DSL的特点. 形状又分为以下五个不同的类型,这五个形状在工具箱上都有，可以直接拖动到图形区域创建对应的形状,建议现在没有必要太去细化，而只需要记住他们的样式，能够按需所有，具体怎么设置还是到使用的时候再去研究: <br />&nbsp;&nbsp;&nbsp;&nbsp; 1.几何形状(GeometryShape) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-24-52_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 1-24-52" border="0" alt="2010-2-10 1-24-52" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-24-52_thumb.png" width="402" height="119" /></a>&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 左侧为形状的模型，右侧为调试后运行的显示模型，形状中的文本装饰器NameDecorator就是用来控制我们显示图形中的文本，你可以查看装饰器的属性，控制文本的显示，包括文本,显示位置等. <br /><a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-33-26_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 1-33-26" border="0" alt="2010-2-10 1-33-26" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-33-26_thumb.png" width="467" height="346" /></a> <br />对于几何形状，除了文本装饰器以外，你还可以添加IconDecorator（装饰图形上显示图标),ExpandCollapseDecorator(装饰图形的展开收缩) <br />&nbsp;&nbsp;&nbsp;&nbsp; 2.隔间形状(CompartmentShape) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 隔间形状是带有隔间的几何形状，一个隔间形状有可以有多个隔间: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-48-58_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 1-48-58" border="0" alt="2010-2-10 1-48-58" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-48-58_thumb.png" width="472" height="203" /></a> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同样，对于隔间形状，你也可以象几何形状那样添加其它的装饰器. <br />&nbsp;&nbsp;&nbsp;&nbsp; 3.图像形状(ImageShape) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图像形状是显示图形非轮廓的形状: <br /><a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-54-12_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 1-54-12" border="0" alt="2010-2-10 1-54-12" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-54-12_thumb.png" width="681" height="155" /></a> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以看到，图像形状显示的和我们普通的几何形状是不一样的，我们可以针对图象开关设置显示的图像和图标资源,我们来看一下上面的图像形状的属性,在最下面我们定义了显示的图标: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-01-08_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 2-01-08" border="0" alt="2010-2-10 2-01-08" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-01-08_thumb.png" width="455" height="559" /></a> <br />&nbsp;&nbsp;&nbsp;&nbsp; 4.端口(PortShape) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 端口是依附在形状轮廓上，并只能绕轮廓移动的特殊形状，除此之外，和普通的几何形状没有区别。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-10-18_2.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2010-2-10 2-10-18" border="0" alt="2010-2-10 2-10-18" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-10-18_thumb.png" width="593" height="256" /></a>&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; 5.泳道(Swimlane) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 泳道用来将图表分割成行或例，我们看下面的状态流程图: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-05-02_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2010-2-10 2-05-02" border="0" alt="2010-2-10 2-05-02" src="http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-05-02_thumb.png" width="644" height="214" /></a> <br /></p>
<p>参考资源 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. Visual Stuido DSL 工具特定领域开发指南 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.<a href="http://altinoren.com/PermaLink,guid,643ec407-4fe1-4238-a24e-20ef8b134a99.aspx" target="_blank">Using WPF As The Designer Surface In DSL Tools</a>&nbsp;&nbsp; Gokhan Altinoren</p>
<p id="LyjSignature">作者：<a href="http://lonely7345.cnblogs.com/" target="_blank">孤独侠客</a>（<a href="http://lonely7345.cnblogs.com/" target="_blank">似水流年</a>） <br />出处：<a href="http://lonely7345.cnblogs.com/" target="_blank">http://lonely7345.cnblogs.com/</a> <br />本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p><img src="http://www.cnblogs.com/lonely7345/aggbug/1666906.html?type=1" width="1" height="1" alt=""/><p>评论: 5　<a href="http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>【翻译作品】JavaScript Event学习补遗：addEventSimple</title><link>http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html</link><dc:creator>北玉</dc:creator><author>北玉</author><pubDate>Tue, 09 Feb 2010 17:06:00 GMT</pubDate><guid>http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html</guid><description><![CDATA[<p>阅读: 521 评论: 3 作者: <a href="http://www.cnblogs.com/beiyu/" target="_blank">北玉</a> 发表于 2010-02-10 01:06 <a href="http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html" target="_blank">原文链接</a></p><p>这里有个addEventSimple和removeEventSimple函数，有时候需要不那么显眼的事件处理程序的时候我就用这两个函数注册。</p>
<pre><pre class="brush:javascript">function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}
</pre>
<br /></pre>
<p>用法如下：</p>
<pre><pre class="brush:javascript">addEventSimple(element,'click',functionname);
addEventSimple(document,'load',functionname2);
</pre>
<br /></pre>
<p>现在如果元素element被点击的话就会触发functionaname，同样的document也有了onload的事件处理程序functionname2。</p>
<p>缺陷：this关键字在IE下面不是你想象的指向触发事件的元素，而是指向整个文档。</p>
<p>原文地址：<a title="http://www.quirksmode.org/js/eventSimple.html" href="http://www.quirksmode.org/js/eventSimple.html">http://www.quirksmode.org/js/eventSimple.html</a></p>
<p>&nbsp;</p>
<p>回老家过年了，不能及时发布了，来年继续，大家新年快乐！</p><img src="http://www.cnblogs.com/beiyu/aggbug/1666892.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>.NET 4.0 环境下无法直接运行 .NET 2.0 程序的问题，当然目前解决了</title><link>http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html</link><dc:creator>洪星</dc:creator><author>洪星</author><pubDate>Tue, 09 Feb 2010 16:09:00 GMT</pubDate><guid>http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html</guid><description><![CDATA[<p>阅读: 1171 评论: 3 作者: <a href="http://www.cnblogs.com/hongcing/" target="_blank">洪星</a> 发表于 2010-02-10 00:09 <a href="http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html" target="_blank">原文链接</a></p><p>由于 .NET 4.0 使用新版本的 CLR，变化也不少，</p>
<p>例如：</p>
<p>mscoree.dll 变为 mscoree.dll 和 mscoreei.dll，</p>
<p>mscorwks.dll 变为 clr.dll，</p>
<p>mscorjit.dll 变为 clrjit.dll。</p>
<p>这导致在没有安装 .NET 2.0 的情况下，.NET 2.0 程序默认无法在 .NET 4.0 环境下运行（未安装 .NET 2.0/3.0/3.5）。（<span style="background-color: #ffffff;"><span style="color: #0000ff;">纠正：不是文件名的变化导致无法运行，而是微软的新策略是强烈建议程序在开发时使用的运行时版本下运行，这样可以保证最大的兼容性</span></span>）</p>
<p>那么怎么办呢？</p>
<p>Visual Studio 2010 对项目可以设置&ldquo;目标框架&rdquo;，在没有安装 .NET 3.5 的情况下可以选择 .NET Framework 4、.NET Framework 4 Client Profile，在改变选择之后，会生成一个配置文件，内容如下：</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml version="1.0"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">startup</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">supportedRuntime </span><span style="color: #ff0000;">version</span><span style="color: #0000ff;">="v4.0"</span><span style="color: #ff0000;"> sku</span><span style="color: #0000ff;">=".NETFramework,Version=v4.0"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />  </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">startup</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span></div></pre>
</div>
<p>把这个文件名改成你需要运行的程序的配置名，同时把程序与配置文件放到一起，这个时候就可以打开 .NET 2.0 的程序了。</p>
<p>&nbsp;</p>
<p>以上只是我当时想出此方法的思路，当然你没有必要这样做。</p>
<p>你只要搞一个配置文件或者将以上配置文件内容添加到已有的配置文件中。</p>
<p>&nbsp;</p>
<p><span style="color: #0000ff;">supportedRuntime version="v4.0"</span> 强制当前程序在&nbsp;CLR&nbsp;4.0 环境下运行，当然你可以设置 1.0、1.1、2.0，前提是运行环境内有对于版本的运行时。（第二次纠正：如果强制在 CLR&nbsp;2.0 下运行，必须设置 <span style="color: #0000ff;">supportedRuntime version="v2.0.50727"</span>，如果设置 v2.0 无效。）</p>
<p>&nbsp;</p>
<p>顺便说明<span style="color: #0000ff;">目前的运行时版本只有 1.0、1.1、2.0、4.0</span>，没有3.0、3.5。</p>
<p>&nbsp;</p>
<p>实际上仅对 Windows XP 需要这样做，因为 XP 默认情况下没有安装任何 .NET 版本，Windows&nbsp;Vista/7 默认情况下分别安装了 .NET 3.0、.NET 3.5，具有 CLR 2.0。</p>
<p>以上做法可能会有兼容性问题，大型复杂程序不推荐这样做。小工具或者自行编写的程序（例如我）可以这样做，出了问题自行解决。这样<span style="color: #0000ff;">在 XP&nbsp;下，就不用安装 N 个 .NET 版本</span>。</p>
<p>本文没有说明的内容，可以自行摸索。</p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/hongcing/aggbug/1666880.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>【翻译作品】JavaScript Event学习第十一章：按键的检测</title><link>http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html</link><dc:creator>北玉</dc:creator><author>北玉</author><pubDate>Tue, 09 Feb 2010 15:26:00 GMT</pubDate><guid>http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html</guid><description><![CDATA[<p>阅读: 503 评论: 1 作者: <a href="http://www.cnblogs.com/beiyu/" target="_blank">北玉</a> 发表于 2010-02-09 23:26 <a href="http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html" target="_blank">原文链接</a></p><p><b>检测用户的按键是事件处理程序的一个很特别的环节。这一章我们着力解决一些非常棘手的问题，并且制定一个完备的表格。</b></p>
<p>第一个问题是对于按键事件来说根本就没有标准，按照<a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-keyevents">规范</a>说的：包含键盘等输入设备的事件模型会在以后的DOM规范中作出解释。</p>
<p>
正如我们了解到的，浏览器在最开始设计的时候并没有一个标准，大家都像做实验似的，最后的成品虽然是有用的，但是肯定造成了兼容性的问题。按键问题也不例外：这里有两个属性能检测到用户按下了什么键，虽然有足够的理由为什么需要两个属性，但是依然并不是所有的浏览器都支持。</p>
<p>另外，在keypress与keydown和keyup之间还有一些很重要的区别。</p>
<p>最后就是windows和mac的区别了，在mac上要检测用户按下了什么键简直比在windows下难了N倍。 </p>
<h2></h2>
<h2>keyCode和charCode</h2>
<p>能检测到用户按下了什么键的两个属性就是keyCode和charCode了。简单说来：keyCode是用来检测用户真正按下了键盘上那个键的，而charCode则是给出键入字符的ASCII码。有一些小问题需要注意：大写的A和小写的a的keyCode是一样的，因为他们在键盘上就是一个键；但是charCode不一样，因为他俩是两个不同的字符。</p>
<p>IE和Opera不支持charCode。然而他们会在keyCode里面保存字符信息，但是只是在onkeypress的情况下，在onkeydown/up情况下包含的是键的信息。 </p>
<h2></h2>
<h2></h2>
<h2>字符和数字键</h2>
<p>让我们以一个简单的例子开始。小写a的ASCII码是97，大写的是65。那么在两种情况下，当用户在键盘上敲下相同的键的时候，什么时候的键值是65呢（相当于大写的A）</p>
<h3>keyCode</h3>
<p>&nbsp;</p>
<p> <a href="http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_2.png"><img style="display: inline; border: 0px;" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_thumb.png" border="0" height="248" width="799" /></a></p>
<p>&nbsp;</p>
<h3>charCode</h3>
<p><a href="http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_4.png"><img style="display: inline; border: 0px;" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_thumb_1.png" border="0" height="239" width="807" /></a> </p>
<p>&nbsp;</p>
<p>因此，在onkeydown/up的情况下，你能够从keyCode里面得到键值。在onkeypress情况下，想要得到字符值就要使用：<code>evt.charCode || evt.keyCode</code>.</p>
<h2></h2>
<h2></h2>
<h2>标点符号</h2>
<p>我还是决定不对标点符号键做测试了。我怀疑这不仅跟浏览器和操作系统有关，还可能跟键盘设置和默认语言有关。我一般用的是荷兰语版的windows，如果跟美国版的101键的键盘相比有很大出入，我一点都不会觉得意外。</p>
<p>比如说shift+,键出来的应该是&lt;，但是我测试的ASCII码的结果却是&rsquo;?&rsquo;的。当我发现了这个问题，我决定还是不在标点符号键的问题上浪费时间了.</p>
<h2></h2>
<h2></h2>
<h2>特别键</h2>
<p>功能键就是只那些不能打印出来的但是却具有一定功能的键。比如shift、ESC、enter等等都是功能键。</p>
<h3>一些说明：</h3>
<p>1、一般，mac的可靠性比windows要差，有些键可能检测不到</p>
<p>2、IE不会触发下面这键的keypress事件：delete, end, enter, escape, 功能键, home, insert, pageUp/Down 和 tab。</p>
<p>3、在onkeypress事件下，Safari会给下面这些键给出很奇怪的keyCode值：delete, end, 功能键, home 和 pageUp.Down。但是在onkeydown/up下面就很正常。</p>
<p>4、Alt,Cmd,Ctrl和shfit键在mac上无法探测，不过Opera下面例外。然而你却可以使用altKey，ctrlKey，shfitKey这些属性。</p>
<p>&nbsp;</p>
<p><b>如果你需要探测这些键，你就探测一下载onkeydown/up下面的keyCode就行了，算是给自己帮忙了，onkeypress和charCode就忘掉吧。</b></p>
<p>&nbsp;</p>
<h2></h2>
<h2>原文后面有个大的键值的列表，还有一个测试框，有兴趣的童鞋可以移步。</h2>
<p>翻译地址：<a href="http://www.quirksmode.org/js/keys.html">http://www.quirksmode.org/js/keys.html</a></p><img src="http://www.cnblogs.com/beiyu/aggbug/1666860.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Silverlight 代码创建动画 示例</title><link>http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html</link><dc:creator>洪星</dc:creator><author>洪星</author><pubDate>Tue, 09 Feb 2010 12:11:00 GMT</pubDate><guid>http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html</guid><description><![CDATA[<p>阅读: 795 评论: 4 作者: <a href="http://www.cnblogs.com/hongcing/" target="_blank">洪星</a> 发表于 2010-02-09 20:11 <a href="http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html" target="_blank">原文链接</a></p><p>代码中使用了 C# 3.0 语法</p>
<p>效果是一个红色矩形从右下角移动到左上角</p>
<p>仅仅是示例，演示如何在代码中动态创建动画</p>
<p>&nbsp;</p>
<div onclick="cnblogs_code_show('07e7df3c-cdb2-4172-88c2-df29b67d3854')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_07e7df3c-cdb2-4172-88c2-df29b67d3854" style="display: none;" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('07e7df3c-cdb2-4172-88c2-df29b67d3854',event)" class="code_img_opened" id="code_img_opened_07e7df3c-cdb2-4172-88c2-df29b67d3854" /><span class="cnblogs_code_collapse">MainPage.xaml</span>
<div id="cnblogs_code_open_07e7df3c-cdb2-4172-88c2-df29b67d3854">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">UserControl </span><span style="color: #ff0000;">x:Class</span><span style="color: #0000ff;">="Hongcing.Silverlight.Create_And_Run_Animation"</span><span style="color: #ff0000;"><br />        xmlns</span><span style="color: #0000ff;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span style="color: #ff0000;"><br />        xmlns:x</span><span style="color: #0000ff;">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />    </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Canvas </span><span style="color: #ff0000;">Loaded</span><span style="color: #0000ff;">="LayoutRoot_Loaded"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">UserControl</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span></div></pre>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div onclick="cnblogs_code_show('148d33a9-0f4c-4455-82e5-e85513ea4217')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_148d33a9-0f4c-4455-82e5-e85513ea4217" style="display: none;" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('148d33a9-0f4c-4455-82e5-e85513ea4217',event)" class="code_img_opened" id="code_img_opened_148d33a9-0f4c-4455-82e5-e85513ea4217" /><span class="cnblogs_code_collapse">MainPage.xaml.cs</span>
<div id="cnblogs_code_open_148d33a9-0f4c-4455-82e5-e85513ea4217">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">using</span><span style="color: #000000;"> System;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Windows;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Windows.Controls;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Windows.Media;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Windows.Media.Animation;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Windows.Shapes;<br /><br /></span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> Hongcing.Silverlight<br />{<br />    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">partial</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Create_And_Run_Animation : UserControl<br />    {<br />        </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Create_And_Run_Animation()<br />        {<br />            InitializeComponent();<br />        }<br /><br />        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> LayoutRoot_Loaded(</span><span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, RoutedEventArgs e)<br />        {<br />            var redRectangle </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Rectangle<br />            {<br />                Width </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">300</span><span style="color: #000000;">,<br />                Height </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">200</span><span style="color: #000000;">,<br />                Fill </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> SolidColorBrush(Colors.Red),<br />                Stroke </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> SolidColorBrush(Colors.Black)<br />            };<br /><br />            (sender </span><span style="color: #0000ff;">as</span><span style="color: #000000;"> Panel).Children.Add(redRectangle);<br /><br />            var leftAnimation </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> DoubleAnimation<br />            {<br />                Duration </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Duration(TimeSpan.FromSeconds(</span><span style="color: #800080;">5</span><span style="color: #000000;">)),<br />                From </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">700</span><span style="color: #000000;">,<br />                To </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;"><br />            };<br /><br />            var topAnimation </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> DoubleAnimation<br />            {<br />                Duration </span><span style="color: #000000;">=</span><span style="color: #000000;"> leftAnimation.Duration,<br />                From </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">350</span><span style="color: #000000;">,<br />                To </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;"><br />            };<br /><br />            Storyboard.SetTarget(leftAnimation, redRectangle);<br />            Storyboard.SetTarget(topAnimation, redRectangle);<br />            Storyboard.SetTargetProperty(leftAnimation, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> PropertyPath(</span><span style="color: #800000;">"</span><span style="color: #800000;">(Canvas.Left)</span><span style="color: #800000;">"</span><span style="color: #000000;">));<br />            Storyboard.SetTargetProperty(topAnimation, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> PropertyPath(</span><span style="color: #800000;">"</span><span style="color: #800000;">(Canvas.Top)</span><span style="color: #800000;">"</span><span style="color: #000000;">));<br /><br />            </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Storyboard { Children </span><span style="color: #000000;">=</span><span style="color: #000000;"> { leftAnimation, topAnimation } }.Begin();<br />        }<br />    }<br />}<br /></span></div></pre>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/hongcing/aggbug/1666789.html?type=1" width="1" height="1" alt=""/><p>评论: 4　<a href="http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>做一个优秀的PM（1）--论赞美和尊重</title><link>http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html</link><dc:creator>星际迷茫</dc:creator><author>星际迷茫</author><pubDate>Tue, 09 Feb 2010 12:09:00 GMT</pubDate><guid>http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html</guid><description><![CDATA[<p>阅读: 1339 评论: 16 作者: <a href="http://www.cnblogs.com/Rousef/" target="_blank">星际迷茫</a> 发表于 2010-02-09 20:09 <a href="http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html" target="_blank">原文链接</a></p><p>最近一个进项目组时间不长的员工完成一个较为复杂的js代码给我查看，我看了以后，提出了些待改进的问题就走了。刚走了没有多久，听到这个员工小声对旁边的人说：X 哥都不表扬我。</p>
<p>成功学大师卡耐基的著作&#8220;人性的弱点&#8221;前几章重点讲述了赞美的意义，（第一章，做个批评的吝啬鬼，第二章，给别人留足面子，<strong>第三章，用赞美来激励他人</strong>，第四章不要对别人的优点视而不见）。他在文章里说：&#8220;我们都希望得到认可和赏识，而且会尽一切努力去得到它。&#8221;&#8220;一个重要的原则是，称赞最微小的进步并称赞其每一次进步。&#8221;现在，我能真切地体会到赞美的重要性。我们都能记住小时候，老师对自己的某次表扬，某次考试或者表现在班级里出类拔萃。。如果你还对赞美有怀疑的话，我想列举下面几个事实：</p>
<ul><li>为什么玩家对网游上瘾？因为游戏中的每一次战斗获得的东西和经验，每一次升级的能力提高都让玩家有莫大的满足感。这会让你去做一些自己都不知道为什么要做的事情，只为了让自己愉悦和满足，去获得其他玩家的尊重。现实社会对你努力的漠然导致只有游戏才能最好激励你继续付出，每一次的付出，每一次的金币和经验的积累。一些貌似毫无意义的虚拟经验和财富驱动着无数玩家在废寝忘食中如痴如醉。</li><li>玫琳凯是美国历史上最伟大的女性企业家，在玫琳凯早期职业生涯中，一些不愉快的经验教给她很多待人之道。一次她参加了一整天销售讲习，有位销售经理做了一场激励士气的演讲，玫琳凯很渴望和他握手。&#8220;我在队伍中排了3个小时，好不容易轮到我和他见面，但他从未正眼瞧过我一眼，只是从我肩膀上望过去，看看队伍还有多长，他甚至没有察觉到我正在和他握手。虽然我明白他很累，但我也是一样&#8212;&#8212;在队伍中等待了3个小时，我的疲惫并不亚于他！我觉得受到了伤害和侮辱，因为他根本没有把我看在眼里。从那时起，我便下定决心，如果有一天人们排队来和我握手，我将给每一位来到我面前的人全然的关注，不管我自己是多么疲劳！&#8221;在玫琳凯公司成为一家大公司后，玫琳凯曾多次站在长长的队伍前，和上百位人士握手长达数小时。一旦她感到累了，她总是想起自己从前排队和那位销售经理握手的情形，并立即打起精神，直视握手者的眼睛，尽可能地说些比较亲切的话。也许只是几句简短的闲谈，如&#8220;我喜欢你的发型&#8221;或是&#8220;你的衣裳漂亮极了&#8221;，但她尽可能给予对方全然的注意，而且决不允许其他事情打扰自己。&#8220;在握手的同时，我都将对方视为最重要的人。&#8221;</li><li>比尔盖茨在１９７５年母亲节时给母亲寄了一张卡片，他用斜体英文写了这么一段：我爱您！，妈妈，您从来不说我比别的孩子差，您总是从我在干得事情当中，不断寻找值得赞许的地方。我怀念和您一起的所有时光。</li></ul>
<p>　下次我一定会找个机会对这个同事说：你这次写的代码非常出色，完全实现了想要的效果，我在你这个年龄的时候远达不到这个能力。当然这里面对日后的重用性没有考虑，程序写的比较固定。我相信以后能看到你在这方面有更大的进步。</p><img src="http://www.cnblogs.com/Rousef/aggbug/1666786.html?type=1" width="1" height="1" alt=""/><p>评论: 16　<a href="http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[WPF]使用自定义Panel更好地控制Resize时的行为——之二</title><link>http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html</link><dc:creator>南柯之石</dc:creator><author>南柯之石</author><pubDate>Tue, 09 Feb 2010 12:06:00 GMT</pubDate><guid>http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html</guid><description><![CDATA[<p>阅读: 473 评论: 3 作者: <a href="http://www.cnblogs.com/nankezhishi/" target="_blank">南柯之石</a> 发表于 2010-02-09 20:06 <a href="http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html" target="_blank">原文链接</a></p><p>考虑下面这样的界面布局。 <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_2.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb.png" width="508" height="208"></a>  <p>对于这个小窗口而言，东西少。可以把窗口定死在500*300这样。但是如果这个表单是属于一个大窗体的一个部分。情况就比较复杂了。 <p>我们并不能把窗口定死大小。因为窗口有可能会需要在1920*1200到1024*768等不同的分辨率下运行。这样这个表单在不同情况下的大小就有可能有很大的差别。 <p>一个比较好的方案是，当窗口变小，第一行放不下所有控件时。换到第二行。当窗口变大，第一行有多余地方时，把第二行的内容放在第一行上，使界面的右边不留空白。 <p>有人会大叫这不就是WrapPanel做的事情吗？没有错，但是WrapPanel的每一行都是左对齐的，右边会有大片的留白，这在想要设计有良好用户体验的软件中，是不可接受的。 <p>也就是说WPF自带的WrapPanel没有处理好下面这种情况。 <p><b>第一行有多余的空间，但是又不足以把第二行的什么控件放上来。</b> <p>这时，<b>第一行的现有的控件应该充分利用第一行的所有可用空间，把第一行填满。</b>这个是用WrapPanel做不到的。WrapPanel主要用于内部的Item的大小基本一样的情况。如果大小不一，WrapPanel就会造成不好的用户体验。还不如用Grid做等比例缩放好。 <p>很可惜，现在我们又要自己写一个WrapPanel了。如下图所示。 <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_4.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_1.png" width="508" height="118"></a>  <p>图1. FillWrapPanel Demo <p>在这个Panel里的所有的Button都有 20的MinWidth和55的MaxWidth。并特意为3号Button设置了30的MaxWidth，为6号Button设置了100的MaxWidth。我们来看一下这个Panel在Resize时的行为。 <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_6.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_2.png" width="429" height="118"></a>  <p>图2. 再小就要换行了（原则是让所有控件都尽可能大，但是右边又不能留白） <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_8.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_3.png" width="274" height="118"></a>  <p>图3. 缩到6号Button <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_10.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_4.png" width="178" height="145"></a>  <p>图4. 缩到4号Button <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_12.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_5.png" width="140" height="145"></a>  <p>图5. 最小 <p>如果用WPF的WrapPanel呢？结果很简单。 <p><a href="http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_14.png"><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/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_6.png" width="298" height="115"></a>  <p>图6. WPF的WrapPanel（Item的大小是确定的，不会变化，而且右边会留白） <p>系统的WrapPanel很适于实现Explorer里浏览文件、文件夹或是看图软件的缩略图模式。而本文中介绍的FillWrapPanel更适于实现类似表单的窗体。因为里面的东西大小很可能是各不相同的。   <img src="http://www.cnblogs.com/nankezhishi/aggbug/1666784.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Ubuntu 9.10 Server 配置基于SSL的Subversion</title><link>http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html</link><dc:creator>BAsil</dc:creator><author>BAsil</author><pubDate>Tue, 09 Feb 2010 12:06:00 GMT</pubDate><guid>http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html</guid><description><![CDATA[<p>阅读: 520 评论: 0 作者: <a href="http://www.cnblogs.com/basilwang/" target="_blank">BAsil</a> 发表于 2010-02-09 20:06 <a href="http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html" target="_blank">原文链接</a></p><p>1 配置准备</p>  <p>&nbsp; Ubuntu 9.10 Server 英文版。服务器版还是以稳定高效为主，也没有安装图形界面，另外主要是通过<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">putty.exe</a>远程访问。没有采用中文版的原因是，在shell下，中文字体可能没有安装总显示乱码，拜过谷哥大神，未解决。</p>  <p>2 安装软件及模块一览 </p>  <p>&nbsp; （1）Apache2.2.14&nbsp; 自己下载编译。未用ubuntu 9.10 server 下apt-get安装的apache2 是因为这个版本的apache2在启用ssl的时候总是报undefined symbol apr_ldap_ssl_init错误，此处我怀疑可能是ubuntu9.10 server的问题,我在虚拟机ubuntu 8.04 desktop下配置成功。</p>  <p>&nbsp; （2）OpenSSL 通过apt-get install openssl 安装即可</p>  <p>&nbsp; （3）Subversion 自己编译下载。很不幸，我无法使用ubuntu的subversion来成功配置SSL。</p>  <p>3 Ubuntu &amp; Linux&nbsp;&nbsp; </p>  <p>鉴于大家可能对不同发行版的linux不太了解，我简单介绍一下，并比较apache2的Ubuntu版本和自主安装的安装及配置文件路径</p>  <p>&nbsp;&nbsp; 以下摘自Wiki</p>  <blockquote>   <p>&nbsp;&nbsp;&nbsp;&nbsp; One can distinguish between commercially backed distributions, such as <a href="http://en.wikipedia.org/wiki/Fedora_%28operating_system%29" target="_blank">Fedora</a> (<a href="http://en.wikipedia.org/wiki/Red_Hat" target="_blank">Red Hat</a>), <a href="http://en.wikipedia.org/wiki/OpenSUSE" target="_blank">openSUSE</a> (<a href="http://en.wikipedia.org/wiki/Novell" target="_blank">Novell</a>), <a href="http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29" target="_blank">Ubuntu</a> (<a href="http://en.wikipedia.org/wiki/Canonical_Ltd." target="_blank">Canonical Ltd.</a>), and <a href="http://en.wikipedia.org/wiki/Mandriva_Linux" target="_blank">Mandriva Linux</a> (<a href="http://en.wikipedia.org/wiki/Mandriva" target="_blank">Mandriva</a>) and entirely community-driven distributions such as <a href="http://en.wikipedia.org/wiki/Debian" target="_blank">Debian</a> and <a href="http://en.wikipedia.org/wiki/Gentoo_Linux" target="_blank">Gentoo</a>, though there are other distributions that are driven neither by a corporation nor a community, perhaps most famously <a href="http://en.wikipedia.org/wiki/Slackware" target="_blank">Slackware</a>.</p> </blockquote>  <p>简单翻译一下，就是说linux有商业支持的发行版如Fedora,openSUSE,Ubuntu和社区推动的版本如Debian和Gentoo。另外Ubuntu本身又是基于Debian的，这点大家应该清楚。</p>  <p>&nbsp;&nbsp;&nbsp; </p>  <table border="0" cellspacing="0" cellpadding="2" width="747"><tbody>     <tr>       <td valign="top" width="142">&nbsp;</td>        <td valign="top" width="282">Ubuntu Apache2</td>        <td valign="top" width="321">自主安装Apache2</td>     </tr>      <tr>       <td valign="top" width="142">安装目录</td>        <td valign="top" width="282">/etc/apache2          <br /></td>        <td valign="top" width="321">指定路径          <br />例如：           <br />/usr/local/apache2           <br /></td>     </tr>      <tr>       <td valign="top" width="142">应用程序</td>        <td valign="top" width="282">/etc/sbin/apache2          <br />/etc/lib/apache2</td>        <td valign="top" width="321">/usr/local/apache2/bin/httpd</td>     </tr>      <tr>       <td valign="top" width="142">服务</td>        <td valign="top" width="282">/etc/init.d/apache2&nbsp; restart</td>        <td valign="top" width="321">/usr/local/apache2/bin/httpd &#8211;k restart&nbsp; <br />（不知还有没有别的方式？)</td>     </tr>      <tr>       <td valign="top" width="142">配置文件</td>        <td valign="top" width="282">/etc/apache2/apache2.conf          <br />/etc/apache2/httpd.conf (通常为空）           <br />/etc/apache2/ports.conf           <br />/etc/apache2/mods_available/           <br />/etc/apache2/sites_available/           <br />apache2.conf负责调用其他的配置文件</td>        <td valign="top" width="321">/usr/local/apache2/conf/httpd.conf          <br />/usr/local/apache2/conf/extra/           <br />httpd.conf负责调用extra文件夹下的配置文件</td>     </tr>   </tbody></table>  <p>4 自主安装Apache2</p>  <p>#sudo wget <a title="http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz" href="http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz" target="_blank">http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz</a>     <br />#sudo tar -zxvf httpd-2.2.14.tar.gz&nbsp;&nbsp;&nbsp;&nbsp; <br />#cd httpd-2.2.14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />#sudo ./configure&nbsp;&nbsp; --enable-dav --enable-dav-fs --enable-so&nbsp;&nbsp; --enable-ssl --enable-maintainer-mode -prefix=/usr/local/apache2&nbsp;&nbsp; --enable-mods-shared=all&nbsp;&nbsp;&nbsp; <br />#sudo make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />#sudo make install</p>  <p>&nbsp;&nbsp; 注意./configure 时确保enable-dav和enable-ssl，其中dav模块是通过apache2存储文件的基础。    <br />5 安装OpenSSL</p>  <p>#sudo apt-get install openssl</p>  <p>6 安装Subversion</p>  <p># sudo apt-get install build-essential openssl ssh expat libxyssl-dev libssl-dev&nbsp;&nbsp;&nbsp; <br /># sudo apt-get remove subversion&nbsp;&nbsp;&nbsp; <br /># sudo dpkg --purge subversion&nbsp;&nbsp;&nbsp; <br /># wget <a href="http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz" target="_blank">http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz</a>     <br /># wget <a href="http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz" target="_blank">http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz</a>     <br /># tar xvfz subversion-1.6.2.tar.gz&nbsp;&nbsp;&nbsp; <br /># tar xvfz subversion-deps-1.6.2.tar.gz&nbsp;&nbsp;&nbsp; <br /># cd subversion-1.6.2/neon/&nbsp;&nbsp;&nbsp; <br /># ./configure --prefix=/usr/local --with-ssl --with-pic&nbsp;&nbsp; <br /># make&nbsp;&nbsp;&nbsp; <br /># sudo make install&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /># ./configure --prefix=/usr/local --with-ssl --with-neon=/usr/local&nbsp;&nbsp;&nbsp; <br /># make&nbsp;&nbsp;&nbsp; <br /># sudo make install&nbsp;&nbsp; </p>  <p>&nbsp; 注意：首先移除ubuntu自带的subversion，随后进行编译安装。其中<a href="http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz" target="_blank">subversion-deps-1.6.2.tar.gz</a>是Subversion客户端使用的Neon库，它不仅仅可以用来验证服务器证书，也可以必要时提供客户端证书，因此也要安装上</p>  <p>7 配置http访问subversion</p>  <p>&nbsp; 参考了<a href="http://www.javaeye.com/topic/293540" target="_blank">主题：ubuntu下安装svn提供HTTP版本管理服务</a>和<a href="http://www.howtogeek.com/howto/ubuntu/install-subversion-with-web-access-on-ubuntu/" target="_blank">Install Subversion with Web Access on Ubuntu</a></p>  <p>(1)#sudo svnadmin create /svn&nbsp;&nbsp; </p>  <p>&nbsp;&nbsp; 可以看一下/svn下是不是增加了些文件&nbsp; <br />(2)#sudo vim /usr/local/apache2/conf/httpd.conf</p>  <p>&nbsp;&nbsp; 增加&nbsp; <br />&nbsp;&nbsp; &lt;Location /svn&gt;     <br />&nbsp;&nbsp;&nbsp;&nbsp; DAV svn     <br />&nbsp;&nbsp;&nbsp;&nbsp; SVNPath /svn     <br />&nbsp;&nbsp;&nbsp;&nbsp; AuthzSVNAccessFile /svn/conf/authz     <br />&nbsp;&nbsp;&nbsp;&nbsp; AuthType Basic     <br />&nbsp;&nbsp;&nbsp;&nbsp; AuthName "Subversion.Tracker"     <br />&nbsp;&nbsp;&nbsp;&nbsp; AuthUserFile /svn/conf/passwd&nbsp;&nbsp;&nbsp;&nbsp; Require valid-user     <br />&nbsp;&nbsp; &lt;/Location&gt;</p>  <p>&nbsp;&nbsp;&nbsp; 这部分应该也可以放置到 conf/extra/httpd_dav.conf文件中，然后将httpd.conf中的 include conf/extra/httpd_dav.conf 注释去掉，不过奇怪的是httpd_dav.conf文件中的示例使用&lt;Directory&gt;而不是&lt;Location&gt;,我未作尝试。</p>  <p>(3)#sudo htpasswd -cm /svn/conf/passwd &lt;username&gt;    <br />&nbsp;&nbsp; 增加一个用户名,可以打开passwd文件查看是否创建成功     <br />&nbsp;&nbsp; 同时在Ubuntu上创建同名用户和相同密码&nbsp; (此处待验证，网络上有的文章没有强调这一点     <br />&nbsp;&nbsp; sudo useradd &lt;username&gt;     <br />&nbsp;&nbsp; sudo passwd &lt;password&gt;</p>  <p>(4)#sudo chown www-data:www-data&nbsp; -R /svn&nbsp; </p>  <p>&nbsp;&nbsp;&nbsp; 将/svn的所有者和所在的组更改为www-data（ubuntu下apache2的账户)</p>  <p>&nbsp;&nbsp;&nbsp; #sudo chmod &#8211;R g+ws /svn</p>  <p>(5)#sudo /usr/local/apache2/bin/httpd &#8211;k restart</p>  <p>&nbsp;&nbsp;&nbsp; 看看<a href="http://localhost/svn" target="_blank">http://localhost/svn</a> 是否可以访问了</p>  <p>8 配置ssl访问subversion</p>  <p>&nbsp; 参考了<a href="http://ywbanm.javaeye.com/blog/341562" target="_blank">Linux SVN+Apache+SSL 安装配置</a>和<a href="http://koda.javaeye.com/blog/288187" target="_blank">Apache SSL配置</a></p>  <p>openssl genrsa -des3 -out ca.key 1024    <br />//按提示输入密码：****     <br />chmod 400 ca.key     <br />//生成证书     <br />openssl req -new -x509 -days 3650 -key ca.key -out ca.crt     <br />//按提示分别输入如下内容：     <br />//Country Name: CN     <br />//State or Province Name:     <br />//Locality Name:     <br />//Organization Name:     <br />//Organizational Unit Name:     <br />//Common Name:     <br />//Email Address: your email     <br />chmod 400 ca.crt     <br />openssl genrsa -des3 -out server.key 1024     <br />//按提示输入密码：     <br />chmod 400 server.key     <br />openssl req -new -key server.key -out server.csr     <br />//按提示分别输入如下内容：     <br />//Country Name: CN     <br />//State or Province Name:     <br />//Locality Name:     <br />//Organization Name:     <br />//Organizational Unit Name:     <br />//Common Name:     <br />//Email Address: your email     <br />(ca.crt 和server.csr 的Common Name不能一样)     <br />openssl req -noout -text -in server.csr     <br />openssl x509 -req -days 365 -in server.csr -signkey server.key -out&nbsp; server.crt     <br />chmod 400 server.crt </p>  <p>vim /usr/local/apache2/conf/httpd.conf    <br />取消Include conf/extra/httpd-ssl.conf前的注释#</p>  <p>打开httpd-ssl.conf文件查看如下两行，确保前面生成的证书放置在该路径下</p>  <p>SSLCertificateFile "/usr/local/apache2/conf/server.crt"</p>  <p>SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"</p>  <p>重启httpd服务</p>  <p>查看<a title="https://202.194.254.21/svn/" href="https://localhost/svn/" target="_blank">https://localhost/svn/</a>&nbsp; 浏览器显示此网站的安全证书有问题，忽略它，输入用户名和密码，至此基于SSL的Subversion配置完成。</p>  <p>9 总结</p>  <p>&nbsp; 配置过程中应该了解ubuntu和其他linux发行版安装软件的不同，掌握make和make install。如碰到apache2不能启动，阅读错误提示以及查看日志(/usr/local/apache2/logs/error.log).</p><img src="http://www.cnblogs.com/basilwang/aggbug/1666785.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>.NET/CLI元数据中使用的压缩整数</title><link>http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html</link><dc:creator>Anders Liu</dc:creator><author>Anders Liu</author><pubDate>Tue, 09 Feb 2010 11:20:00 GMT</pubDate><guid>http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html</guid><description><![CDATA[<p>阅读: 623 评论: 9 作者: <a href="http://www.cnblogs.com/AndersLiu/" target="_blank">Anders Liu</a> 发表于 2010-02-09 19:20 <a href="http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html" target="_blank">原文链接</a></p><div class="al-body">
<h1>.NET/CLI元数据中使用的压缩整数</h1>
<div class="al-copy">
	<p>本文地址：<a href="http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html"
title=".NET/CLI元数据中使用的压缩整数">http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html</a></p>
	<p>作者：<a href="http://andersliu.cnblogs.com" title="Anders Liu">Anders Liu</a></p>
</div>
<div class="al-summary">
	<p>摘要：.NET/CLI的PE文件中广泛采用了一种整数压缩算法，这种算法可以将一个32位整数根据其大小的不同放置在1、2或4个字节中。当整数的值比较小时，这种算法能够有效地减少PE文件的大小。本文介绍了这种压缩算法，并给出了压缩/解压缩的参考实现。</p>
</div>
<h2>参考文献</h2>
<ul class="dotul">
<li>《ECMA-335——Common Language Infrastructure (CLI) 4th Edition》，June 2006</li>
<li>《Expert .NET 2.0 IL Assembler》，Serge Lidin，Apress，2006</li>
<li>《.NET探秘：MSIL权威指南》（《Expert .NET 2.0 IL Assembler》中文版），Serge Lidin著，包建强 译，人民邮电出版社，2009</li>
</ul>
<h2>简介</h2>
<p>简单来说，整数压缩算法就是将一个32位整数（通常占用4个字节）放置到尽可能少的存储空间中（1、2或4个字节）的方法。</p>
<p>整数压缩算法广泛地应用在.NET/CLI PE文件中，如各种元数据签名、#Blob和#US流等。在这些地方，需要使用整数值来记录条目的数量或是数据块的大小等。如果单纯地采用32位整数，由于绝大多数数量值或大小值都不大，会造成大量字节都被置为无意义的0值。在这些场景中使用压缩算法，可以有效地节省PE文件占用的磁盘空间或网络带宽。</p>
<p>以下是PE文件中一些使用到压缩整数的场景：</p>
<ul class="dotul">
<li>Blob堆（#Blob流和#US流所采用的存储格式）中的每个条目开始处，使用压缩的无符号整数表示条目的大小；</li>
<li>方法的元数据签名中，使用压缩的无符号整数存储参数的数量；</li>
<li>元数据签名中的数组下标，采用压缩的带符号整数进行存储。</li>
</ul>
<p>注意，本文所介绍的压缩与解压算法，都是针对32位整数的。此外，在本文的介绍中，如果没有特殊提及，则所出现的整数都按照大尾数法表示（最高权重字节放在左侧或上方）。</p>
<h2>无符号整数的压缩与解压</h2>
<h3>无符号整数的压缩算法</h3>
<p>无符号整数的压缩是比较简单的，即将无符号整数的整个取值范围划分为几个区段，而整数值根据其所在的区段不同，放置在1、2或4个字节中。表1列出了无符号整数的区段划分和压缩方式。</p>
<table>
<caption>表1 - 无符号整数的区段划分</caption>
<tr><th>区段</th><th>字节数</th><th>掩码</th><th>二进制形式</th></tr>
<tr><td>[00000000h, 0000007Fh]</td><td>1</td><td>80h</td><td>0BBBBBBBB</td></tr>
<tr><td>[00000080h, 00003FFFh]</td><td>2</td><td>C0h</td><td>10BBBBBB BBBBBBBB</td></tr>
<tr><td>[00004000h, 1FFFFFFFh]</td><td>4</td><td>E0h</td><td>110BBBBB BBBBBBBB BBBBBBBB BBBBBBBB</td></tr>
</table>
<p>在表1中：</p>
<ul class="dotul">
<li>“区段”列出了每个区段的最小值（含）和最大值（含）。</li>
<li>“字节数”列出了压缩后的值占用的字节数。</li>
<li>“掩码”列出了在压缩后的值上施加的掩码，
    <ul class="dotul">
    <li>如果压缩后的整数值占用1字节，则与掩码80h进行&amp;（按位与）操作后的结果为0h，</li>
    <li>如果压缩后的整数值占用2字节，则其首字节与掩码C0h进行&amp;操作后的结果是80h，</li>
    <li>如果压缩后的整数值占用4字节，则其首字节与掩码E0h进行&amp;操作后的结果是C0h。</li>
    </ul>
</li>
<li>“二进制形式”列出了压缩结果的二进制形式，其中的“1”和“0”都是固定值，而“B”则表示实际整数值的有效位。</li>
</ul>
<p>从表1可以清晰地看出，无符号整数压缩算法的适用范围是[0h, 1FFFFFFFh]（[0, 536870911]）之内的无符号整数，大于1FFFFFFFh的无符号整数不能用这种方式进行压缩。</p>
<p>代码1给出了无符号整数压缩算法的参考实现。</p>
<div class="al-ins">
<p class="al-ins-title">代码1 - 无符号整数压缩算法的参考实现</p>
<pre class="al-code-para">
public static byte[] CompressUInt(uint data)
{
  if (data <= 0x7F)
  {
    var bytes = new byte[1];
    bytes[0] = (byte)data;
    return bytes;
  }
  else if (data <= 0x3FFF)
  {
    var bytes = new byte[2];
    bytes[0] = (byte)(((data & 0xFF00) >> 8) | 0x80);
    bytes[1] = (byte)(data & 0x00FF);
    return bytes;
  }
  else if (data <= 0x1FFFFFFF)
  {
    var bytes = new byte[4];
    bytes[0] = (byte)(((data & 0xFF000000) >> 24) | 0xC0);
    bytes[1] = (byte)((data & 0x00FF0000) >> 16);
    bytes[2] = (byte)((data & 0x0000FF00) >> 8);
    bytes[3] = (byte)(data & 0x000000FF);
    return bytes;
  }
  else
    throw new NotSupportedException();
}
</pre>
</div>
<h3>无符号整数的解压缩算法</h3>
<p>无符号整数的解压缩算法也非常简单，如下所示：</p>
<ul class="dotul">
<li>如果首字节的二进制形式型如0bbbbbbb（与80h进行按位与运算，结果为0h），则采用1个字节存放整数值（字节值为b0），原整数值=b0。</li>
<li>如果首字节的二进制形式型如10bbbbbb（与C0h进行按位与运算，结果为80h），则采用2个字节存放整数值（字节值依次为b0，b1），原整数值=(b0 &amp; 0x3F) &lt;&lt; 8 | b1。</li>
<li>	如果首字节的二进制形式型如110bbbbb（与E0h进行按位与运算，结果为C0h），则采用4个字节存放整数值（字节值依次为b0，b1，b2，b3），原整数值=(b0 &amp; 0x1F) &lt;&lt; 24 | b1 &lt;&lt; 16 | b2 &lt;&lt; 8 | b3。.</li>
</ul>
<p>代码2给出了无符号整数解压缩算法的参考实现。</p>
<div class="al-ins">
<p class="al-ins-title">代码2 – 无符号整数解压缩算法的参考实现</p>
<pre class="al-code-para">
public static uint DecompressUInt(byte[] data)
{
  if (data == null)
    throw new ArgumentNullException("data");

  if ((data[0] & 0x80) == 0
    && data.Length == 1)
  {
    return (uint)data[0];
  }
  else if ((data[0] & 0xC0) == 0x80
    && data.Length == 2)
  {
    return (uint)((data[0] & 0x3F) << 8 | data[1]);
  }
  else if ((data[0] & 0xE0) == 0xC0
    && data.Length == 4)
  {
    return (uint)((data[0] & 0x1F) << 24
      | data[1] << 16 | data[2] << 8 | data[3]);
  }
  else
    throw new NotSupportedException();
}
</pre>
</div>
<h2>带符号整数的压缩与解压</h2>
<h3>带符号整数的压缩算法</h3>
<p>带符号整数的压缩与解压略微复杂一些，因为需要处理符号位。简单来说，需要在确定好所需的存储字节数之后，将原整数整体向左移1位，然后将符号位放置在最低位上（0表示正数，1表示负数），最后按照同无符号整数一样的方式为首字节设置掩码。</p>
<p>在为带符号整数确定需要用多少个字节来存放压缩值时，需要首先取得原整数的“准绝对值”，即对负数进行按位取反（而不是数学求负），然后将这个“准绝对值”左移1位（为符号位空出最低位），再按照表1列出的区段取得最终占用的字节数。</p>
<p>或者，可以省略左移1位的操作，而是按照表2中列出的区段进行查找。</p>
<table>
<caption>表2 - 带符号整数“准绝对值”的区段划分</caption>
<tr><th>区段</th><th>字节数</th><th>有效位掩码</th></tr>
<tr><td>[00000000h, 0000003Fh]</td><td>1</td><td>0000003Fh</td></tr>
<tr><td>[00000040h, 00001FFFh]</td><td>2</td><td>00001FFFh</td></tr>
<tr><td>[00002000h, 0FFFFFFFh]</td><td>4</td><td>0FFFFFFFh</td></tr>
</table>
<p>在表2中：</p>
<ul class="dotul">
<li>“区段”列出的是根据原整数“准绝对值”划分出的每个区段的最小值（含）和最大值（含）。</li>
<li>“字节数”列出了压缩后的值占用的字节数。</li>
<li>“有效位掩码”列出的掩码在与原整数进行&amp;操作之后，可以取得原整数中真正有意义的位数。这建立在这样一个事实上——对于正整数来说，其最左侧的一些位都是0，是没有意义的，可以省略；而对于负整数来说，其最左侧的一些位都是1，也是没有意义的，可以省略。</li>
</ul>
<p>在与有效位掩码进行&amp;操作取得有效位之后，需要将这些有效位整体左移1位。接下来，如果原整数是负数，则需要将最低位（符号位）置1。</p>
<p>最后，为压缩值的首字节设置掩码，规则与无符号整数一样。</p>
<p>带符号整数压缩算法的适用范围为——对于正数为[0h, 0FFFFFFFh]（[0, 268435455]），对于负数为[F0000000h, FFFFFFFFh]（[-268435456, -1]），在此范围之外的整数不能用这种方式进行压缩。</p>
<p>代码3给出了带符号整数压缩算法的参考实现。</p>
<div class="al-ins">
<p class="al-ins-title">代码3 -带符号整数压缩算法的参考实现</p>
<pre class="al-code-para">
public static byte[] CompressInt(int data)
{
    var u = data >= 0 ? (uint)data : ~(uint)data;
    if (u <= 0x3F)
    {
        var uv = ((uint)data & 0x0000003F) << 1;
        if (data < 0)
            uv |= 0x01;

        var bytes = new byte[1];
        bytes[0] = (byte)uv;
        return bytes;
    }
    else if (u <= 0x1FFF)
    {
        var uv = ((uint)data & 0x00001FFF) << 1;
        if (data < 0)
            uv |= 0x01;

        var bytes = new byte[2];
        bytes[0] = (byte)(((uv & 0xFF00) >> 8) | 0x80);
        bytes[1] = (byte)(uv & 0x00FF);
        return bytes;
    }
    else if (u <= 0x0FFFFFFF)
    {
        var uv = ((uint)data & 0x0FFFFFFF) << 1;
        if (data < 0)
            uv |= 0x01;

        var bytes = new byte[4];
        bytes[0] = (byte)(((uv & 0xFF000000) >> 24) | 0xC0);
        bytes[1] = (byte)((uv & 0x00FF0000) >> 16);
        bytes[2] = (byte)((uv & 0x0000FF00) >> 8);
        bytes[3] = (byte)(uv & 0x000000FF);
        return bytes;
    }
    else
        throw new NotSupportedException();
}
</pre>
</div>
<p>注意，只有在确定压缩值占用的字节数时用到了原整数的“准绝对值”，一旦字节数确定之后，实际进行压缩时，使用的还是原整数，只不过将其当做无符号整数对待。</p>
<h3>带符号整数的解压缩算法</h3>
<p>由于带符号整数的压缩值与无符号整数的压缩值具有相同的结构，所以带符号整数的解压缩算法可以建立在无符号整数的解压缩算法基础之上。</p>
<p>首先，按照无符号整数的解压缩算法对压缩值进行解压缩，得到一个32位无符号整数，根据最低位（符号位）确定原整数的符号。</p>
<p>如果原整数为正数（最低位，即符号位为0），则将解压得到的无符号整数右移1位，再强制转换为带符号整数，即可得到原整数值。</p>
<p>如果原整数为负数（最低位，即符号位为1），则需要将解压得到的无符号整数右移1位，再将负数最左侧那些没有意义的“1”位恢复回来：</p>
<ul class="dotul">
<li>如果压缩值占用了1字节，则与FFFFFFC0h进行|（按位或）操作；</li>
<li>如果压缩值占用了2字节，则与FFFFE000h进行|操作；</li>
<li>如果压缩值占用了4字节，则与F0000000h进行|操作。</li>
</ul>
<p>最后，将这个无符号整数强制转换为带符号整数，即可得到原整数值。</p>
<p>代码4给出了带符号整数解压缩算法的参考实现。</p>
<div class="al-ins">
<p class="al-ins-title">代码4 - 带符号整数解压缩算法的参考实现</p>
<pre class="al-code-para">
public static int DecompressInt(byte[] data)
{
    var u = DecompressUInt(data);

    if ((u & 0x00000001) == 0)
        return (int)(u >> 1);

    var nb = GetCompressedIntSize(data[0]);
    uint sm;
    switch (nb)
    {
        case 1: sm = 0xFFFFFFC0; break;
        case 2: sm = 0xFFFFE000; break;
        case 4: sm = 0xF0000000; break;
        default: throw new NotSupportedException();
    }

    return (int)((u >> 1) | sm);
}
</pre>
</div>
<p>这里调用了一个工具方法GetCompressedIntSize，用于根据压缩值的第一个字节判断采用几个字节存放该压缩值。该方法非常简单，如代码5所示。</p>
<div class="al-ins">
<p class="al-ins-title">代码5 – 根据压缩值的第一个字节判断所需字节数</p>
<pre class="al-code-para">
public static uint GetCompressedIntSize(byte firstByte)
{
  if ((firstByte & 0x80) == 0)
    return 1;
  else if ((firstByte & 0xC0) == 0x80)
    return 2;
  else if ((firstByte & 0xE0) == 0xC0)
    return 4;
  else
      throw new NotSupportedException();
}
</pre>
</div>
<h2>各种实现中的问题</h2>
<p>压缩的带符号整数在.NET/CLI元数据中的使用场景非常少——据我所知，只有元数据签名中的数组下标值使用了压缩的带符号整数（这意味着原理上.NET/CLI的底层是支持下标为负数的数组的）。而在这方面，几乎所有现有的CLI实现都或多或少的出现了一些问题，同时，我所参考的文献中，关于带符号整数压缩算法的描述也都是含糊不清的。幸运的是，几乎所有高级语言都不允许开发者声明下标为负数的数组，CLS规范也要求数组的下标必须从0开始，所以这些问题并不会对实际项目造成重大影响。</p>
<p>下面列举几个我所研究过的实现中的问题，下一节将列出参考文献中的问题。</p>
<h3>ILASM/ILDASM</h3>
<p>很显然，微软自己对带符号整数的压缩算法也不是很清晰。ILASM是我所接触过的编译器中唯一能接受负数下标数组的，也是我在研究这个课题时使用最多的编译器。对于正数数组下标，ILASM完全没有问题；但对于负数下标，当下标值在-8192（含）到-8129（含）之间时，得到的压缩值是错误的。</p>
<p>另外，ILASM使用的带符号整数压缩算法实现，很明显与本文介绍的不同，因此并不能涵盖所有理论上支持的整数（[-268435456, 268435455]），当下标值小于或等于-268427265时，得到的压缩值也是错误的。</p>
<p>由于ILASM存在错误，所以对ILDASM无法进行完全准确的测验。不过，即便是对ILASM产生的错误值进行解压缩，ILDASM得到的结果和本文中介绍的带符号整数解压缩算法得到的结果都是一致的，所有有理由相信ILDASM在解压缩算法上应该是正确的。但是，错误的压缩值会随机造成ILDASM的崩溃。</p>
<p>以上问题存在于ILASM的2.0、3.0和3.5版本中，但在4.0 Beta版中已经得到改正，.NET Framework SDK 4.0 Beta携带的ILASM能够对所有理论上可接受的负数数组下标进行正确的压缩，而ILDASM也能对其进行正确的解压缩。</p>
<h3>Mono Cecil</h3>
<p>通过对Mono Cecil源代码的研究发现，Mono Cecil的实现非常忠诚于ECMA-335标准，而ECMA-335对数组下标的描述恰恰是错误的（参见后面“参考文献之修正”一节）——称数组下标值是压缩的无符号整数（而不是带符号整数）。</p>
<p>因此，Mono Cecil只提供了针对无符号整数的压缩和解压缩实现（参见Mono.Cecil.dll中的Mono.Cecil.Metadata.Utilities.WriteCompressedInteger(BinaryWriter, Int32) : Int32方法和Mono.Cecil.Metadata.Utilities.ReadCompressedInteger(Byte[], Int32, Int32&) : Int32方法）。而在写入和读取元数据签名时，也是将数组下标作为无符号整数处理的（参见Mono.Cecil.Signatures.SignatureWriter.Write(SigType) : Void方法和Mono.Cecil.Signatures.SignatureReader.ReadType(Byte[], Int32, Int32&) : SigType方法）。</p>
<p>在使用Mono Cecil库进行反射时，如果数组的下标为正数，则得到的结果是实际下标的2倍（因为缺少了解压缩带符号整数时的右移操作）；而如果数组的下表是负数，则得到的结果就是完全错误的了。</p>
<p>我只对Mono Cecil 0.6版本的源代码做了调查，其他版本不详，读者可自行检查、分析。</p>
<h3>CCI Metadata</h3>
<p>CCI Metadata则确实将数组下标当作带符号整数对待了，但是它使用的压缩算法非常简单——将原整数的绝对值左移1位，再将符号位放置在最低位（参见Microsoft.Cci.PeWriter.dll中的Microsoft.Cci.BinaryWriter.WriteCompressedInt(Int32) : Void方法），然后按照无符号整数进行压缩；而解压缩算法是对应的——先按照无符号整数的解压算法得到一个无符号整数，然后根据最低位确定结果的符号，最后将整个无符号数右移1位，再根据符号位设置正负号（参见Microsoft.Cci.PeReader.dll中的Microsoft.Cci.UtilityDataStructures.MemoryReader.ReadCompressedInt32() : Int32方法）。</p>
<p>CCI Metadata所采用的算法与《Expert .NET 2.0 IL Assembler》一书中提到的算法描述相符，但该书中的描述也是有误的（参见后面“参考文献之修正”一节）。</p>
<p>我所调研的CCI Metadata版本是2.0.49.23471。</p>
<h3>其他尚未研究的实现</h3>
<p>还有一些.NET/CLI的实现尚未研究，例如：</p>
<ul class="dotul">
<li>System.Reflection/System.Reflection.Emit</li>
<li>Shared Source CLI (Rotor)</li>
</ul>
<h2>参考文献之修正</h2>
<h3>《Expert .NET 2.0 IL Assembler》</h3>
<p>本书在第8章表8-4之后的一个自然段（P150第一段）描述了带符号整数的压缩算法，此处的描述有误，正确的描述请参见本文中“带符号整数的压缩算法”一节。</p>
<p>不幸的是，本书的中文版《.NET探秘：MSIL权威指南》并没有对这个问题进行修正（同样是第8章表8-4之后的一个自然段，P132）。当初包建强在翻译这本书的时候，我也向他提到过这里的问题，不过那时候我还没有完全准确地推断出正确的压缩算法，因此他只好直译。</p>
<h3>《ECMA-335——Common Language Infrastructure (CLI) 4th Edition》</h3>
<p>在ECMA-335标准中，完全没有区分“压缩的无符号整数”和“压缩的带符号整数”这两个术语，统称之为“compressed integer”。</p>
<p>ECMA-335 Partition II: Metadata Definition and Semantics中的23.2 Blobs and signatures一节中给出了“compressed integer”的压缩算法（P153），这实际上是无符号整数的压缩算法，该算法是正确的。</p>
<p>ECMA-335 Partition II: Metadata Definition and Semantics中的23.2.13 ArrayShape一节中给出了元数据签名中的数组表示方法（P161），其中称Size和LoBound都是“compressed integer”，这是不准确的。</p>
<p>修正方法是，引入术语“compressed unsigned integer”，用于描述其他地方的“compressed integer”；引入术语“compressed signed integer”，用于描述数组下标值（LoBound）。并按照本文“带符号整数的压缩算法”一节的描述，提供带符号整数的压缩算法。</p>
<p>（完）</p>
</div>
<img src="http://www.cnblogs.com/AndersLiu/aggbug/1666773.html?type=1" width="1" height="1" alt=""/><p>评论: 9　<a href="http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>请教：Total Commander里Help菜单在菜单栏右对齐的效果是怎么做的？</title><link>http://www.cnblogs.com/rufi/archive/2010/02/09/1666767.html</link><dc:creator>Junfeng Liu</dc:creator><author>Junfeng Liu</author><pubDate>Tue, 09 Feb 2010 10:59:00 GMT</pubDate><guid>http://www.cnblogs.com/rufi/archive/2010/02/09/1666767.html</guid><description><![CDATA[<p>阅读: 628 评论: 4 作者: <a href="http://www.cnblogs.com/rufi/" target="_blank">Junfeng Liu</a> 发表于 2010-02-09 18:59 <a href="http://www.cnblogs.com/rufi/archive/2010/02/09/1666767.html" target="_blank">原文链接</a></p><p>Total Commander里Help菜单在菜单栏右对齐的效果是什么原理，用C#怎么做？</p>
<p>如图：</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/rufi/TotalCommander.png" width="783" height="92" /></p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/rufi/aggbug/1666767.html?type=1" width="1" height="1" alt=""/><p>评论: 4　<a href="http://www.cnblogs.com/rufi/archive/2010/02/09/1666767.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/rufi/archive/2010/02/09/1666767.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>获取元素的文本</title><link>http://www.cnblogs.com/rubylouvre/archive/2010/02/09/1666752.html</link><dc:creator>司徒正美</dc:creator><author>司徒正美</author><pubDate>Tue, 09 Feb 2010 10:37:00 GMT</pubDate><guid>http://www.cnblogs.com/rubylouvre/archive/2010/02/09/1666752.html</guid><description><![CDATA[<p>阅读: 702 评论: 2 作者: <a href="http://www.cnblogs.com/rubylouvre/" target="_blank">司徒正美</a> 发表于 2010-02-09 18:37 <a href="http://www.cnblogs.com/rubylouvre/archive/2010/02/09/1666752.html" target="_blank">原文链接</a></p><p>记得John Resig说过，类库就是用来屏蔽浏览器的差异，但他的getText函数就明显做不到这一点，怎么没人去提醒他一下呢？我的英文特烂，阅读还可以，但要我正经八儿地写几句英文，估计句句都是病句……不说了，看下面测试(如果在IE下报错，请刷新当前页面)：</p>
<textarea id="runcode1" style="width:75%" rows="10"> 
&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
    &lt;script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;


      $(function(){
        alert($("p").text());
      });

    &lt;/script&gt;
    &lt;title&gt;jQuery.text测试 by 司徒正美&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;

    &lt;p&gt;司徒正美&lt;br/&gt;
      &lt;!--这是注释节点//--&gt;
      &lt;a href="javascript:void(0)" href="http://www.cnblogs.com/rubylouvre/"&gt;Ruby's Louvre&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;司徒正美&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;
</textarea> 
<p><button type="button" class="runcode" title="runcode1">运行代码</button></p>
<p>IE下明显少了空行与空白，因为IE会自动删除空白节点。所以，要让所有浏览器保持一下，就只有去掉空白节点了。还有，我不明白jQuery会把所有匹配元素的文本串成一个，为何不返回一个字符串数组呢，省得到时我们还要一个个分解……</p>
<p>下面是我的方案：</p>
<pre class="brush:javascript;gutter:false;toolbar:false">
      //@author:司徒正美(zhongqincheng)
      //获取某个节点的文本，如果此节点为元素节点，则取其childNodes的所有文本，
      //为了让结果在所有浏览器下一致，忽略所有空白节点，因此它非元素的innerText或textContent
      var getText = function(nodes){
        var result = "",node;
        for(var i=0,n=nodes.length;i&lt;n;i++){
          node = nodes[i];
          //如果是文本节点或者CDATA节点
          if ( node.nodeType === 3 || node.nodeType === 4 ) {
            if(!/^\s+$/.test(node.nodeValue))//忽略空白节点与换行符
              result += node.nodeValue;
            //如果是元素节点
          } else if ( node.nodeType === 1 ) {
            result += getText( node.childNodes );
          }
        }
        return result;
      }
</pre>
<p>看一下效果：</p>
<textarea id="runcode2" style="width:75%" rows="10"> 
&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
   
    &lt;script type="text/javascript"&gt;

      //@author:司徒正美(zhongqincheng)
      //获取某个节点的文本，如果此节点为元素节点，则取其childNodes的所有文本，
      //为了让结果在所有浏览器下一致，忽略所有空白节点，因此它非元素的innerText或textContent
      var getText = function(nodes){
        var result = "",node;
        for(var i=0,n=nodes.length;i&lt;n;i++){
          node = nodes[i];
          ////如果是文本节点或者CDATA节点
          if ( node.nodeType === 3 || node.nodeType === 4 ) {
            if(!/^\s+$/.test(node.nodeValue))
              result += node.nodeValue;
            //如果是元素节点
          } else if ( node.nodeType === 1 ) {
            result += getText( node.childNodes );
          }
        }
        return result;
      }
      window.onload = function(){
        var p = document.getElementsByTagName("p");
        alert(getText(p))
      }


    &lt;/script&gt;
    &lt;title&gt;jQuery.text测试 by 司徒正美&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;

    &lt;p&gt;司徒正美&lt;br/&gt;
      &lt;!--这是注释节点//--&gt;
      &lt;a href="javascript:void(0)" href="http://www.cnblogs.com/rubylouvre/"&gt;Ruby's Louvre&lt;/a&gt;
    &lt;/p&gt;
    &lt;p&gt;司徒正美&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;
</textarea> 
<p><button type="button" class="runcode" title="runcode2">运行代码</button></p><img src="http://www.cnblogs.com/rubylouvre/aggbug/1666752.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/rubylouvre/archive/2010/02/09/1666752.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/rubylouvre/archive/2010/02/09/1666752.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features &amp;amp; Match)</title><link>http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html</link><dc:creator>Wuya</dc:creator><author>Wuya</author><pubDate>Tue, 09 Feb 2010 09:13:00 GMT</pubDate><guid>http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html</guid><description><![CDATA[<p>阅读: 507 评论: 4 作者: <a href="http://www.cnblogs.com/xrwang/" target="_blank">Wuya</a> 发表于 2010-02-09 17:13 <a href="http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html" target="_blank">原文链接</a></p><p>作者：王先荣</p>
<p><strong>前言</strong><br />&nbsp;&nbsp;&nbsp; 轮廓是构成任何一个形状的边界或外形线。前面讲了如何根据色彩及色彩的分布（直方图对比和模板匹配）来进行匹配，现在我们来看看如何利用物体的轮廓。包括以下内容：轮廓的查找、表达方式、组织方式、绘制、特性、匹配。</p>
<p>&nbsp;<strong>查找轮廓</strong><br />&nbsp;&nbsp;&nbsp; 首先我们面对的问题是如何在图像中找到轮廓，OpenCv(EmguCv)为我们做了很多工作，我们的任务只是调用现成的函数而已。Image&lt;TColor,TDepth&gt;类的FindContours方法可以很方便的查找轮廓，不过在查找之前，我们需要将彩色图像转换成灰度图像，然后再将灰度图像转换成二值图像。代码如下所示：</p>
<div onclick="cnblogs_code_show('bec6a7d1-34eb-4354-89f4-8b7e483f4ed6')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_bec6a7d1-34eb-4354-89f4-8b7e483f4ed6" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('bec6a7d1-34eb-4354-89f4-8b7e483f4ed6',event)" style="display: none;" id="code_img_opened_bec6a7d1-34eb-4354-89f4-8b7e483f4ed6" class="code_img_opened" /><span class="cnblogs_code_collapse">查找轮廓</span>
<div id="cnblogs_code_open_bec6a7d1-34eb-4354-89f4-8b7e483f4ed6" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageSource </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, </span><span style="color: #0000ff;">byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(sourceImageFileName);       </span><span style="color: #008000;">//</span><span style="color: #008000;">获取源图像</span><span style="color: #008000;"><br /></span><span style="color: #000000;">Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageGray </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageSource.Convert</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();                </span><span style="color: #008000;">//</span><span style="color: #008000;">将源图像转换成灰度图像</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> thresholdValue </span><span style="color: #000000;">=</span><span style="color: #000000;"> tbThreshold.Value;                                         </span><span style="color: #008000;">//</span><span style="color: #008000;">用于二值化的阀值</span><span style="color: #008000;"><br /></span><span style="color: #000000;">Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageThreshold </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageGray.ThresholdBinary(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Gray(thresholdValue), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Gray(255d)); </span><span style="color: #008000;">//</span><span style="color: #008000;">对灰度图像二值化</span><span style="color: #008000;"><br /></span><span style="color: #000000;">Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour</span><span style="color: #000000;">=</span><span style="color: #000000;">imageThreshold.FindContours();</span></div></pre>
</div>
</div>
<p>&nbsp;</p>
<p><strong>轮廓的表达方式</strong><br />&nbsp;&nbsp;&nbsp; 使用上面的代码可以得到图像的默认轮廓，但是轮廓在电脑中是如何表达的呢？在OpenCv(EmguCv)中提供了两类表达轮廓的方式：顶点的序列、Freeman链码。</p>
<p><strong>1.顶点的序列<br /></strong>&nbsp;&nbsp;&nbsp; 用多个顶点（或各点间的线段）来表达轮廓。假设要表达一个从(0,0)到(2,2)的矩形，<br />（1）如果用点来表示，那么依次存储的可能是：(0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,1)；<br />（2）如果用点间的线段来表达轮廓，那么依次存储的可能是：(0,0),(2,0),(2,2),(0,2)。<br />以下代码可以用来获取轮廓上的点：</p>
<div class="cnblogs_code">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> contour.Total; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />     sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0},</span><span style="color: #800000;">"</span><span style="color: #000000;">, contour[i]);</span></div></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;<strong>2.Freeman链码<br /></strong>&nbsp;&nbsp;&nbsp; Freeman链码需要一个起点，以及从起点出发的一系列位移。每个位移有8个方向，从0～7分别指向从正北开始的8个方向。假设要用Freeman链码表达从(0,0)到(2,2)的矩形，可能的表示方法是：起点(0,0),方向链2,2,4,4,6,6,0,0。<br />&nbsp;&nbsp;&nbsp; EmguCv对Freeman链码的支持很少，我们需要做一系列的工作才能在.net中使用Freeman链码：<br /><strong>（1）获取Freeman链码</strong></p>
<div onclick="cnblogs_code_show('67eb26c3-0c61-4305-b623-e3230b98bcbe')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_67eb26c3-0c61-4305-b623-e3230b98bcbe" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('67eb26c3-0c61-4305-b623-e3230b98bcbe',event)" style="display: none;" id="code_img_opened_67eb26c3-0c61-4305-b623-e3230b98bcbe" class="code_img_opened" /><span class="cnblogs_code_collapse">查找用Freeman链码表示的轮廓</span>
<div id="cnblogs_code_open_67eb26c3-0c61-4305-b623-e3230b98bcbe" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">//</span><span style="color: #008000;">查找用Freeman链码表示的轮廓</span><span style="color: #008000;"><br /></span><span style="color: #000000;">Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray,Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageTemp</span><span style="color: #000000;">=</span><span style="color: #000000;">imageThreshold.Copy();<br />IntPtr storage </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvCreateMemStorage(</span><span style="color: #800080;">0</span><span style="color: #000000;">);<br />IntPtr ptrFirstChain </span><span style="color: #000000;">=</span><span style="color: #000000;"> IntPtr.Zero;<br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> total </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvFindContours(imageTemp.Ptr, storage, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> ptrFirstChain, </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(MCvChain), mode, CHAIN_APPROX_METHOD.CV_CHAIN_CODE, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Point(</span><span style="color: #800080;">0</span><span style="color: #000000;">, </span><span style="color: #800080;">0</span><span style="color: #000000;">));<br /></span></div></pre>
</div>
</div>
<p><br /><strong>（2）遍历Freeman链码上的点</strong></p>
<div onclick="cnblogs_code_show('160c0a60-877d-4545-9cea-f440c97bc1cf')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_160c0a60-877d-4545-9cea-f440c97bc1cf" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('160c0a60-877d-4545-9cea-f440c97bc1cf',event)" style="display: none;" id="code_img_opened_160c0a60-877d-4545-9cea-f440c97bc1cf" class="code_img_opened" /><span class="cnblogs_code_collapse">读取Freeman链码上的点</span>
<div id="cnblogs_code_open_160c0a60-877d-4545-9cea-f440c97bc1cf" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">//</span><span style="color: #008000;">初始化Freeman链码读取</span><span style="color: #008000;"><br /></span><span style="color: #000000;">[DllImport(</span><span style="color: #800000;">"</span><span style="color: #800000;">cv200.dll</span><span style="color: #800000;">"</span><span style="color: #000000;">)]<br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">extern</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> cvStartReadChainPoints(IntPtr ptrChain,IntPtr ptrReader);<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">读取Freeman链码的点</span><span style="color: #008000;"><br /></span><span style="color: #000000;">[DllImport(</span><span style="color: #800000;">"</span><span style="color: #800000;">cv200.dll</span><span style="color: #800000;">"</span><span style="color: #000000;">)]<br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">extern</span><span style="color: #000000;"> Point cvReadChainPoint(IntPtr ptrReader);<br />[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet </span><span style="color: #000000;">=</span><span style="color: #000000;"> System.Runtime.InteropServices.CharSet.Ansi)]<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">定义链码读取结构</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">struct</span><span style="color: #000000;"> MCvChainPtReader<br />{<br />    </span><span style="color: #008000;">//</span><span style="color: #008000;">seqReader</span><span style="color: #008000;"><br /></span><span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> MCvSeqReader seqReader;<br />    </span><span style="color: #808080;">///</span><span style="color: #008000;"> char</span><span style="color: #808080;"><br /></span><span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">byte</span><span style="color: #000000;"> code;<br />    </span><span style="color: #808080;">///</span><span style="color: #008000;"> POINT-&gt;tagPOINT</span><span style="color: #808080;"><br /></span><span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Point pt;<br />    </span><span style="color: #808080;">///</span><span style="color: #008000;"> char[16]</span><span style="color: #808080;"><br /></span><span style="color: #000000;">    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">16</span><span style="color: #000000;">)]<br />    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> deltas;<br />}<br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">将链码指针转换成结构</span><span style="color: #008000;"><br /></span><span style="color: #000000;">MCvChain chain</span><span style="color: #000000;">=</span><span style="color: #000000;">(MCvChain)Marshal.PtrToStructure(ptrChain,</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">(MCvChain));<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">定义存放链码上点的列表</span><span style="color: #008000;"><br /></span><span style="color: #000000;">List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> pointList </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(chain.total);<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">链码读取结构</span><span style="color: #008000;"><br /></span><span style="color: #000000;">MCvChainPtReader chainReader </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MCvChainPtReader();<br />IntPtr ptrReader </span><span style="color: #000000;">=</span><span style="color: #000000;"> Marshal.AllocHGlobal(</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(MCvSeqReader) </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">) </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(Point) </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #800080;">16</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;"> </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">));<br />Marshal.StructureToPtr(chainReader, ptrReader, </span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">开始读取链码</span><span style="color: #008000;"><br /></span><span style="color: #000000;">cvStartReadChainPoints(ptrChain, ptrReader);<br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">;<br /></span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (ptrReader </span><span style="color: #000000;">!=</span><span style="color: #000000;"> IntPtr.Zero </span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"> i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> chain.total)<br />{<br />    </span><span style="color: #008000;">//</span><span style="color: #008000;">依次读取链码上的每个点</span><span style="color: #008000;"><br /></span><span style="color: #000000;">    Point p </span><span style="color: #000000;">=</span><span style="color: #000000;"> cvReadChainPoint(ptrReader);<br />    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (ptrReader </span><span style="color: #000000;">==</span><span style="color: #000000;"> IntPtr.Zero)<br />         </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br />    </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />    {<br />         pointList.Add(p);<br />         sbChain.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0},</span><span style="color: #800000;">"</span><span style="color: #000000;">, p);<br />         i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />    }<br />}<br />imageResult.DrawPolyline(pointList.ToArray(), </span><span style="color: #0000ff;">true</span><span style="color: #000000;">, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Bgr(lblExternalColor.BackColor), </span><span style="color: #800080;">2</span><span style="color: #000000;">);</span></div></pre>
</div>
</div>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 需要注意的是：cvReadChainPoint函数似乎永远不会满足循环终止的条件，即ptrReader永远不会被置为null，这跟《学习OpenCv》和参考上不一致；我们需要用chain.total来辅助终止循环，读取了所有的点之后就可以罢手了。</p>
<p><strong>轮廓之间的组织方式</strong><br />&nbsp;&nbsp;&nbsp; 在查找到轮廓之后，不同轮廓是怎么组织的呢？根据不同的选择，它们可能是：（1）列表；（2）双层结构；（3）树型结构。<br />&nbsp;&nbsp;&nbsp; 从纵向上来看，列表只有一层，双层结构有一或者两层，树型结构可能有一层或者多层。<br />&nbsp;&nbsp;&nbsp; 如果要遍历所有的轮廓，可以使用递归的方式，代码如下：</p>
<div onclick="cnblogs_code_show('c38c6ef4-4c21-4f19-ad59-aa124abf9fa1')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_c38c6ef4-4c21-4f19-ad59-aa124abf9fa1" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('c38c6ef4-4c21-4f19-ad59-aa124abf9fa1',event)" style="display: none;" id="code_img_opened_c38c6ef4-4c21-4f19-ad59-aa124abf9fa1" class="code_img_opened" /><span class="cnblogs_code_collapse">遍历轮廓</span>
<div id="cnblogs_code_open_c38c6ef4-4c21-4f19-ad59-aa124abf9fa1" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">遍历轮廓，并生成遍历结果</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> TravelContour(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour,</span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> total,</span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> StringBuilder sbContour)<br />        {<br />            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (contour </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />            {<br />                sbContour.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">------------------------\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />                sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">轮廓{0}，右节点：{1}，下级节点：{2}，外接矩形：（{3}）\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, total, contour.HNext </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">, contour.VNext </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">, contour.BoundingRectangle);<br />                sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">包含{0}个点（面积：{1}，周长：{2}）：\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, contour.Total, contour.Area, contour.Perimeter);<br />                </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> contour.Total; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />                    sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0},</span><span style="color: #800000;">"</span><span style="color: #000000;">, contour[i]);<br />                sbContour.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />                total</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />                </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (contour.HNext </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />                    TravelContour(contour.HNext, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> total, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> sbContour);<br />                </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (contour.VNext </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br />                    TravelContour(contour.VNext, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> total, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> sbContour);<br />            }<br />        }<br /></span></div></pre>
</div>
</div>
<p>&nbsp;</p>
<p><strong>轮廓的绘制</strong><br />&nbsp;&nbsp;&nbsp; 轮廓的绘制比较简单，用上面提到的方法取得轮廓的所有点，然后把这些点连接成一个多边形即可。<br />&nbsp;&nbsp;&nbsp; 当然，对于用顶点序列表示的轮廓，用Image&lt;TColor,TDepth&gt;.Draw方法或者cvDrawContours函数可以很方便的绘制出轮廓。我发现，如果将参数max_level设置成2，可以绘制出所有的轮廓。<br />&nbsp;&nbsp;&nbsp; 绘制轮廓的代码如下：</p>
<div onclick="cnblogs_code_show('2618001f-35f4-4d1b-89fe-349dff2d8b75')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_2618001f-35f4-4d1b-89fe-349dff2d8b75" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('2618001f-35f4-4d1b-89fe-349dff2d8b75',event)" style="display: none;" id="code_img_opened_2618001f-35f4-4d1b-89fe-349dff2d8b75" class="code_img_opened" /><span class="cnblogs_code_collapse">绘制轮廓</span>
<div id="cnblogs_code_open_2618001f-35f4-4d1b-89fe-349dff2d8b75" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageResult </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageThreshold.Convert</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();         </span><span style="color: #008000;">//</span><span style="color: #008000;">结果图像</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> maxLevel </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">;                                                           </span><span style="color: #008000;">//</span><span style="color: #008000;">绘制的轮廓深度</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;">.TryParse(txtMaxLevel.Text, </span><span style="color: #0000ff;">out</span><span style="color: #000000;"> maxLevel);<br />imageResult.Draw(contour, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Bgr(lblExternalColor.BackColor), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Bgr(lblHoleColor.BackColor), maxLevel, </span><span style="color: #800080;">2</span><span style="color: #000000;">);<br /></span></div></pre>
</div>
</div>
<p><img src="http://pic002.cnblogs.com/img/xrwang/201002/2010020917085414.jpg" /><br /><strong>轮廓的特性<br /></strong>&nbsp;&nbsp;&nbsp; 轮廓的特性有很多，下面一一介绍。</p>
<p><strong>1.轮廓的多边形逼近<br /></strong>&nbsp;&nbsp;&nbsp; 轮廓的多边形逼近指的是：使用多边形来近似表示一个轮廓。<br />&nbsp;&nbsp;&nbsp; 多边形逼近的目的是为了减少轮廓的顶点数目。<br />&nbsp;&nbsp;&nbsp; 多边形逼近的结果依然是一个轮廓，只是这个轮廓相对要粗旷一些。<br />&nbsp;&nbsp;&nbsp; 可以使用Contour&lt;Point&gt;.ApproxPoly方法或者cvApproxyPoly函数来对轮廓进行多边形逼近，示例代码如下：</p>
<div class="cnblogs_code">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">contour </span><span style="color: #000000;">=</span><span style="color: #000000;"> firstContour.ApproxPoly(</span><span style="color: #0000ff;">double</span><span style="color: #000000;">.Parse(txtApproxParameter.Text), </span><span style="color: #800080;">2</span><span style="color: #000000;">, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MemStorage());</span></div></pre>
</div>
<p>&nbsp;&nbsp;</p>
<p><strong>2.轮廓的关键点</strong><br />&nbsp;&nbsp;&nbsp; 轮廓的关键点是：轮廓上包含曲线信息比较多的点。关键点是轮廓顶点的子集。<br />&nbsp;&nbsp;&nbsp; 可以使用cvFindDominantPoints函数来获取轮廓上的关键点，该函数返回的结果一个包含 关键点在轮廓顶点中索引 的序列。再次强调：是索引，不是具体的点。如果要得到关键点的具体坐标，可以用索引到轮廓上去找。<br />&nbsp;&nbsp;&nbsp; 以下代码演示了如何获取轮廓上的关键点：</p>
<div onclick="cnblogs_code_show('e2dbf6f8-e380-4410-964b-2365d3caa15b')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_e2dbf6f8-e380-4410-964b-2365d3caa15b" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('e2dbf6f8-e380-4410-964b-2365d3caa15b',event)" style="display: none;" id="code_img_opened_e2dbf6f8-e380-4410-964b-2365d3caa15b" class="code_img_opened" /><span class="cnblogs_code_collapse">轮廓的关键点</span>
<div id="cnblogs_code_open_e2dbf6f8-e380-4410-964b-2365d3caa15b" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">得到关键点信息</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> GetDominantPointsInfo(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> StringBuilder sbContour, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageResult, </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> parameter1, </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> parameter2, </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> parameter3, </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> parameter4, Bgr dominantPointColor)<br />        {<br />            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (contour.Total </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #800080;">2</span><span style="color: #000000;">)<br />            {<br />                MemStorage storage </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MemStorage();<br />                </span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />                {<br />                    IntPtr ptrSeq </span><span style="color: #000000;">=</span><span style="color: #000000;"> cvFindDominantPoints(contour.Ptr, storage.Ptr, (</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)CV_DOMINANT.CV_DOMINANT_IPAN, parameter1, parameter2, parameter3, parameter4);<br />                    Seq</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> seq </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Seq</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(ptrSeq, storage);<br />                    sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0}个关键点：\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, seq.Total);<br />                    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> seq.Total; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />                    {<br />                        </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> idx </span><span style="color: #000000;">=</span><span style="color: #000000;"> seq[i];           </span><span style="color: #008000;">//</span><span style="color: #008000;">关键点序列中存储的数据 是 关键点在轮廓中所处位置的索引</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                        Point p </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour[idx];     </span><span style="color: #008000;">//</span><span style="color: #008000;">得到关键点的坐标</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                        sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0}({1},{2}),</span><span style="color: #800000;">"</span><span style="color: #000000;">, idx, p.X, p.Y);<br />                        imageResult.Draw(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> CircleF(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> PointF(p.X, p.Y), </span><span style="color: #800080;">3</span><span style="color: #000000;">), dominantPointColor, </span><span style="color: #000000;">-</span><span style="color: #800080;">1</span><span style="color: #000000;">);<br />                    }<br />                    sbContour.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />                }<br />                </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (CvException ex)<br />                {<br />                    sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">在获取关键点时发生异常，错误描述：{0}，错误源：{1}，错误堆栈：{2}\r\n错误文件：{3}，函数名：{4}，行：{5}，错误内部描述：{6}\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, ex.Message, ex.Source, ex.StackTrace, ex.FileName, ex.FunctionName, ex.Line, ex.ErrorStr);<br />                }<br />                </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e)<br />                {<br />                    sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">在获取关键点时发生异常，错误描述：{0}，错误源：{1}，错误堆栈：{2}\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, e.Message, e.Source, e.StackTrace);<br />                }<br />                </span><span style="color: #0000ff;">finally</span><span style="color: #000000;"><br />                {<br />                    storage.Dispose();<br />                }<br />            }<br />        }<br /></span></div></pre>
</div>
</div>
<p><br /><strong>3.轮廓的周长和面积</strong><br />&nbsp;&nbsp;&nbsp; 轮廓的周长可以用Contour&lt;Point&gt;.Perimeter属性或者cvArcLength函数来获取。<br />&nbsp;&nbsp;&nbsp; 轮廓的面积可以用Contour&lt;Point&gt;.Area属性或者cvContourArea函数来获取。</p>
<p><strong>4.轮廓的边界框<br /></strong>&nbsp;&nbsp;&nbsp; 有三种常见的边界框：矩形、圆形、椭圆。<br />&nbsp;&nbsp;&nbsp; （1）矩形：在图像处理系统中提供了一种叫Rectangle的矩形，不过它只能表达边垂直或水平的特例；OpenCv中还有一种叫Box的矩形，它跟数学上的矩形一致，只要4个角是直角即可。<br />&nbsp;&nbsp;&nbsp; 如果要获取轮廓的Rectangle，可以使用Contour&lt;Point&gt;.BoundingRectangle属性或者cvBoundingRect函数。<br />&nbsp;&nbsp;&nbsp; 如果要获取轮廓的Box，可以使用Contour&lt;Point&gt;.GetMinAreaRect方法或者cvMinAreaRect2函数。<br />&nbsp;&nbsp;&nbsp; （2）圆形<br />&nbsp;&nbsp;&nbsp; 如果要获取轮廓的圆形边界框，可以使用cvMinEnclosingCircle函数。<br />&nbsp;&nbsp;&nbsp; （3）椭圆<br />&nbsp;&nbsp;&nbsp; 如果要获取轮廓的椭圆边界框，可以使用cvFitEllipse2函数。<br />&nbsp;&nbsp;&nbsp; 下列代码演示了如何获取轮廓的各种边界框：</p>
<div onclick="cnblogs_code_show('e97ab52b-7ed1-46ce-9c7c-9162340189a6')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_e97ab52b-7ed1-46ce-9c7c-9162340189a6" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('e97ab52b-7ed1-46ce-9c7c-9162340189a6',event)" style="display: none;" id="code_img_opened_e97ab52b-7ed1-46ce-9c7c-9162340189a6" class="code_img_opened" /><span class="cnblogs_code_collapse">轮廓的边界框</span>
<div id="cnblogs_code_open_e97ab52b-7ed1-46ce-9c7c-9162340189a6" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">得到边界框信息</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> GetEdgeInfo(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour, </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> edge, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> StringBuilder sbContour, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageResult, Bgr edgeColor)<br />        {<br />            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (edge </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">Rect</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">矩形</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                imageResult.Draw(contour.BoundingRectangle, edgeColor, </span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (edge </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">MinAreaRect</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />            {<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">最小矩形</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                MCvBox2D box </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvMinAreaRect2(contour.Ptr, IntPtr.Zero);<br />                PointF[] points </span><span style="color: #000000;">=</span><span style="color: #000000;"> box.GetVertices();<br />                Point[] ps </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Point[points.Length];<br />                </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> points.Length; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />                    ps[i] </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Point((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)points[i].X, (</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)points[i].Y);<br />                imageResult.DrawPolyline(ps, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">, edgeColor, </span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />            }<br />            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (edge </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">Circle</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br />            {<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">圆形</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                PointF center;<br />                </span><span style="color: #0000ff;">float</span><span style="color: #000000;"> radius;<br />                CvInvoke.cvMinEnclosingCircle(contour.Ptr, </span><span style="color: #0000ff;">out</span><span style="color: #000000;"> center, </span><span style="color: #0000ff;">out</span><span style="color: #000000;"> radius);<br />                imageResult.Draw(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> CircleF(center, radius), edgeColor, </span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />            }<br />            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />            {<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">椭圆</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (contour.Total </span><span style="color: #000000;">&gt;=</span><span style="color: #000000;"> </span><span style="color: #800080;">6</span><span style="color: #000000;">)<br />                {<br />                    MCvBox2D box </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvFitEllipse2(contour.Ptr);<br />                    imageResult.Draw(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Ellipse(box), edgeColor, </span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />                }<br />                </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />                    sbContour.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">轮廓点数小于6，不能创建外围椭圆。\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />            }<br />        }<br /></span></div></pre>
</div>
</div>
<p>&nbsp;&nbsp;</p>
<p><strong>5.轮廓的矩<br /></strong>&nbsp;&nbsp;&nbsp; 我们可以使用Contour&lt;Point&gt;.GetMoments方法或者cvMoments函数方便的得到轮廓的矩集，然后再相应的方法或函数获取各种矩。<br />&nbsp;&nbsp;&nbsp; 特定的矩：MCvMoments.GetSpatialMoment方法、cvGetSpatialMoment函数<br />&nbsp;&nbsp;&nbsp; 中心矩：MCvMoments.GetCentralMoment方法、cvGetCentralMoment函数<br />&nbsp;&nbsp;&nbsp; 归一化中心矩：MCvMoments.GetNormalizedCentralMoment方法、cvGetNormalizedCentralMoment函数<br />&nbsp;&nbsp;&nbsp; Hu矩：MCvMoments.GetHuMoment方法、McvHuMoments.hu1～hu7字段、cvGetHuMoments函数<br />&nbsp;&nbsp;&nbsp; 以下代码演示了如何获取轮廓的矩：</p>
<div onclick="cnblogs_code_show('e031db19-ef0a-4b53-a48e-768c4904c4b1')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_e031db19-ef0a-4b53-a48e-768c4904c4b1" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('e031db19-ef0a-4b53-a48e-768c4904c4b1',event)" style="display: none;" id="code_img_opened_e031db19-ef0a-4b53-a48e-768c4904c4b1" class="code_img_opened" /><span class="cnblogs_code_collapse">轮廓的矩</span>
<div id="cnblogs_code_open_e031db19-ef0a-4b53-a48e-768c4904c4b1" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">得到各种矩的信息</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> GetMomentsInfo(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour, </span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> StringBuilder sbContour)<br />        {<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">矩</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            MCvMoments moments </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour.GetMoments();<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">遍历各种情况下的矩、中心矩及归一化矩，必须满足条件：xOrder&gt;=0; yOrder&gt;=0; xOrder+yOrder&lt;=3;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> xOrder </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; xOrder </span><span style="color: #000000;">&lt;=</span><span style="color: #000000;"> </span><span style="color: #800080;">3</span><span style="color: #000000;">; xOrder</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />            {<br />                </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> yOrder </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; yOrder </span><span style="color: #000000;">&lt;=</span><span style="color: #000000;"> </span><span style="color: #800080;">3</span><span style="color: #000000;">; yOrder</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />                {<br />                    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (xOrder </span><span style="color: #000000;">+</span><span style="color: #000000;"> yOrder </span><span style="color: #000000;">&lt;=</span><span style="color: #000000;"> </span><span style="color: #800080;">3</span><span style="color: #000000;">)<br />                    {<br />                        </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> spatialMoment </span><span style="color: #000000;">=</span><span style="color: #000000;"> moments.GetSpatialMoment(xOrder, yOrder);<br />                        </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> centralMoment </span><span style="color: #000000;">=</span><span style="color: #000000;"> moments.GetCentralMoment(xOrder, yOrder);<br />                        </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> normalizedCentralMoment </span><span style="color: #000000;">=</span><span style="color: #000000;"> moments.GetNormalizedCentralMoment(xOrder, yOrder);<br />                        sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">矩（xOrder：{0}，yOrder：{1}），矩：{2:F09}，中心矩：{3:F09}，归一化矩：{4:F09}\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, xOrder, yOrder, spatialMoment, centralMoment, normalizedCentralMoment);<br />                    }<br />                }<br />            }<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">Hu矩</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            MCvHuMoments huMonents </span><span style="color: #000000;">=</span><span style="color: #000000;"> moments.GetHuMoment();<br />            sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">Hu矩 h1：{0:F09}，h2：{1:F09}，h3：{2:F09}，h4：{3:F09}，h5：{4:F09}，h6：{5:F09}，h7：{6:F09}\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, huMonents.hu1, huMonents.hu2, huMonents.hu3, huMonents.hu4, huMonents.hu5, huMonents.hu6, huMonents.hu7);<br />        }<br /></span></div></pre>
</div>
</div>
<p><br /><strong>6.轮廓的轮廓树</strong><br />&nbsp;&nbsp;&nbsp; 轮廓树用来描述某个特定轮廓的内部特征。注意：轮廓树跟轮廓是一一对应的关系；轮廓树不用于描述多个轮廓之间的层次关系。<br />&nbsp;&nbsp;&nbsp; 可以用函数cvCreateContourTree来构造轮廓树。</p>
<div class="cnblogs_code">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">IntPtr ptrTree1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvCreateContourTree(contour1.Ptr, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MemStorage().Ptr, thresholdOfCreate);</span></div></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;<strong>7.轮廓的凸包和凸缺陷<br /></strong>&nbsp;&nbsp;&nbsp; 轮廓的凸包和凸缺陷用于描述物体的外形。凸包和凸缺陷很容易获得，不过我目前不知道它们到底怎么使用。<br />&nbsp;&nbsp;&nbsp; 如果要判断轮廓是否是凸的，可以用Contour&lt;Point&gt;.Convex属性和cvCheckContourConvexity函数。<br />&nbsp;&nbsp;&nbsp; 如果要获取轮廓的凸包，可以用Contour&lt;Point&gt;.GetConvexHull方法或者cvConvexHull2函数，返回的是包含顶点的序列。<br />&nbsp;&nbsp;&nbsp; 如果要获取轮廓的凸缺陷，可以用Contour&lt;Point&gt;.GetConvexityDefacts方法或者cvConvexityDefects函数。<br />&nbsp;&nbsp;&nbsp; 注意：EmguCv将缺陷的单词拼写错了，defect才是缺陷。<br />&nbsp;&nbsp;&nbsp; 以下代码演示了如何获取轮廓的凸包及凸缺陷：</p>
<div onclick="cnblogs_code_show('22fe6c73-c167-49b9-85db-8e0432136541')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_22fe6c73-c167-49b9-85db-8e0432136541" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('22fe6c73-c167-49b9-85db-8e0432136541',event)" style="display: none;" id="code_img_opened_22fe6c73-c167-49b9-85db-8e0432136541" class="code_img_opened" /><span class="cnblogs_code_collapse">轮廓的凸包和凸缺陷</span>
<div id="cnblogs_code_open_22fe6c73-c167-49b9-85db-8e0432136541" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">得到凸包及缺陷信息</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> GetConvexInfo(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour,</span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> StringBuilder sbContour,</span><span style="color: #0000ff;">ref</span><span style="color: #000000;"> Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr,Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageResult)<br />        {<br />            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;">!</span><span style="color: #000000;">contour.Convex)    </span><span style="color: #008000;">//</span><span style="color: #008000;">判断轮廓是否为凸</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            {<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">凸包</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                Seq</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> convexHull </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour.GetConvexHull(ORIENTATION.CV_CLOCKWISE);<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">缺陷</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                Seq</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">MCvConvexityDefect</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> defects </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour.GetConvexityDefacts(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MemStorage(), ORIENTATION.CV_CLOCKWISE);<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">显示信息</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">轮廓的凸包有{0}个点，依次为：</span><span style="color: #800000;">"</span><span style="color: #000000;">, convexHull.Total);<br />                Point[] points </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Point[convexHull.Total];<br />                </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> convexHull.Total; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />                {<br />                    Point p </span><span style="color: #000000;">=</span><span style="color: #000000;"> convexHull[i];<br />                    points[i] </span><span style="color: #000000;">=</span><span style="color: #000000;"> p;<br />                    sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0},</span><span style="color: #800000;">"</span><span style="color: #000000;">, p);<br />                }<br />                sbContour.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />                imageResult.DrawPolyline(points, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Bgr(lblConvexColor.BackColor), </span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />                MCvConvexityDefect defect;<br />                sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">轮廓有{0}个缺陷，依次为：\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, defects.Total);<br />                </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> defects.Total; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />                {<br />                    defect </span><span style="color: #000000;">=</span><span style="color: #000000;"> defects[i];<br />                    sbContour.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">缺陷：{0}，起点：{1}，终点：{2}，最深的点：{3}，深度：{4}\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, i, defect.StartPoint, defect.EndPoint, defect.DepthPoint, defect.Depth);<br />                }<br />            }<br />            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />                sbContour.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">轮廓是凸的，凸包和轮廓一样。\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />        }<br /></span></div></pre>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;<strong>8.轮廓的成对几何直方图<br /></strong>&nbsp;&nbsp;&nbsp; 成对几何直方图的资料比较少，我是这么理解的。<br />&nbsp;&nbsp;&nbsp; （1）轮廓保存的是一系列的顶点，轮廓是由一系列线段组成的多边形。对于看起来光滑的轮廓（例如圆），只是线段条数比较多，线段长度比较短而已。实际上，电脑中显示的任何曲线都由线段组成。<br />&nbsp;&nbsp;&nbsp; （2）每两条线段之间都有一定的关系，包括它们（或者它们的延长线）之间的夹角，两条线段的夹角范围是：(0,180)。<br />&nbsp;&nbsp;&nbsp; （3）每两条线段上的点之间还有距离关系，包括最短（小）距离、最远（大）距离，以及平均距离。最大距离我用了一个偷懒的计算方法，我把轮廓外界矩形的对角线长度看作了最大距离。<br />&nbsp;&nbsp;&nbsp; （4）成对几何直方图所用的统计数据包括了夹角和距离。<br />&nbsp;&nbsp;&nbsp; 可以用函数cvCalcPGH来计算轮廓的成对几何直方图，示例代码如下：</p>
<div onclick="cnblogs_code_show('87ea5dc9-e97d-431d-a48e-bd47629e7235')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_87ea5dc9-e97d-431d-a48e-bd47629e7235" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('87ea5dc9-e97d-431d-a48e-bd47629e7235',event)" style="display: none;" id="code_img_opened_87ea5dc9-e97d-431d-a48e-bd47629e7235" class="code_img_opened" /><span class="cnblogs_code_collapse">轮廓的成对几何直方图</span>
<div id="cnblogs_code_open_87ea5dc9-e97d-431d-a48e-bd47629e7235" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">            </span><span style="color: #008000;">//</span><span style="color: #008000;">生成成对几何直方图</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            Rectangle rect1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour1.BoundingRectangle;<br />            </span><span style="color: #0000ff;">float</span><span style="color: #000000;"> maxDist1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">float</span><span style="color: #000000;">)Math.Sqrt(rect1.Width </span><span style="color: #000000;">*</span><span style="color: #000000;"> rect1.Width </span><span style="color: #000000;">+</span><span style="color: #000000;"> rect1.Height </span><span style="color: #000000;">*</span><span style="color: #000000;"> rect1.Height); </span><span style="color: #008000;">//</span><span style="color: #008000;">轮廓的最大距离：这里使用轮廓矩形边界框的对角线长度</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">int</span><span style="color: #000000;">[] bins1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;">[] { </span><span style="color: #800080;">60</span><span style="color: #000000;">, </span><span style="color: #800080;">20</span><span style="color: #000000;"> };<br />            RangeF[] ranges1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF[] { </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF(0f, 180f), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF(0f, maxDist1) };     </span><span style="color: #008000;">//</span><span style="color: #008000;">直方图第0维为角度，范围在(0,180)，第2维为轮廓两条边缘线段的距离</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            DenseHistogram hist1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> DenseHistogram(bins1, ranges1);<br />            CvInvoke.cvCalcPGH(contour1.Ptr, hist1.Ptr);<br /></span></div></pre>
</div>
</div>
<p>&nbsp;<img src="http://pic002.cnblogs.com/img/xrwang/201002/2010020917093724.jpg" /></p>
<p>&nbsp;</p>
<p><strong>轮廓的匹配</strong><br />&nbsp;&nbsp;&nbsp; 如果要比较两个物体，可供选择的特征很多。如果要判断某个人的性别，可以根据他（她）头发的长短来判断，这很直观，在长发男稀有的年代准确率也很高。也可以根据这个人尿尿的射程来判断，如果射程大于0.50米，则是男性。总之，方法很多，不一而足。<br />&nbsp;&nbsp;&nbsp; 我们在上文中得到了轮廓的这么多特征，它们也可以用于进行匹配。典型的轮廓匹配方法有：Hu矩匹配、轮廓树匹配、成对几何直方图匹配。<br /><strong>1.Hu矩匹配</strong><br />&nbsp;&nbsp;&nbsp; 轮廓的Hu矩对包括缩放、旋转和镜像映射在内的变化具有不变性。Contour&lt;Point&gt;.MatchShapes方法和cvMatchShapes函数可以很方便的实现对2个轮廓间的匹配。<br /><strong>2.轮廓树匹配</strong><br />&nbsp;&nbsp;&nbsp; 用树的形式比较两个轮廓。cvMatchContourTrees函数实现了轮廓树的对比。<br /><strong>3.成对几何直方图匹配<br /></strong>&nbsp;&nbsp;&nbsp; 在得到轮廓的成对几何直方图之后，可以使用直方图对比的方法来进行匹配。如果您和我一样忘记了直方图的对比方式，可以看看我写的另一篇文章《颜色直方图的计算、显示、处理、对比及反向投影(How to Use Histogram? Calculate, Show, Process, Compare and BackProject)》。</p>
<p>&nbsp;&nbsp;&nbsp; 各种轮廓匹配的示例代码如下：</p>
<div onclick="cnblogs_code_show('630a3280-607b-46b4-bc0e-62010a58be19')" class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_630a3280-607b-46b4-bc0e-62010a58be19" class="code_img_closed" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" onclick="cnblogs_code_hide('630a3280-607b-46b4-bc0e-62010a58be19',event)" style="display: none;" id="code_img_opened_630a3280-607b-46b4-bc0e-62010a58be19" class="code_img_opened" /><span class="cnblogs_code_collapse">轮廓的匹配</span>
<div id="cnblogs_code_open_630a3280-607b-46b4-bc0e-62010a58be19" class="cnblogs_code_hide">
<pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">开始匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> btnStartMatch_Click(</span><span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, EventArgs e)<br />        {<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">准备轮廓（这里只比较最外围的轮廓）</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> image1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, </span><span style="color: #0000ff;">byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">((Bitmap)pbImage1.Image);<br />            Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> image2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Bgr, </span><span style="color: #0000ff;">byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">((Bitmap)pbImage2.Image);<br />            Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageGray1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> image1.Convert</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />            Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageGray2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> image2.Convert</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">();<br />            Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageThreshold1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageGray1.ThresholdBinaryInv(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Gray(128d), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Gray(255d));<br />            Image</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Gray, Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> imageThreshold2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageGray2.ThresholdBinaryInv(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Gray(128d), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Gray(255d));<br />            Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageThreshold1.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL);<br />            Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> imageThreshold2.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL);<br />            </span><span style="color: #008000;">/*</span><span style="color: #008000;">if (contour1.Perimeter / 50 &gt; 2 &amp;&amp; contour2.Perimeter / 50 &gt; 2)<br />            {<br />                contour1 = contour1.ApproxPoly(contour1.Perimeter / 50, 2, new MemStorage());    //对轮廓进行多边形逼近（参数设为轮廓周长的1/50）<br />                contour2 = contour2.ApproxPoly(contour2.Perimeter / 50, 2, new MemStorage());<br />            }</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">进行匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> result </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">""</span><span style="color: #000000;">;<br />            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (rbHuMoments.Checked)<br />                result </span><span style="color: #000000;">=</span><span style="color: #000000;"> MatchShapes(contour1, contour2);       </span><span style="color: #008000;">//</span><span style="color: #008000;">Hu矩匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (rbContourTree.Checked)<br />                result </span><span style="color: #000000;">=</span><span style="color: #000000;"> MatchContourTrees(contour1, contour2); </span><span style="color: #008000;">//</span><span style="color: #008000;">轮廓树匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (rbPGH.Checked)<br />                result </span><span style="color: #000000;">=</span><span style="color: #000000;"> MatchPghHist(contour1, contour2);      </span><span style="color: #008000;">//</span><span style="color: #008000;">成对几何直方图匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            txtResult.Text </span><span style="color: #000000;">+=</span><span style="color: #000000;"> result;<br />        }<br /><br />        </span><span style="color: #008000;">//</span><span style="color: #008000;">Hu矩匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> MatchShapes(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour1, Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour2)<br />        {<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">匹配方法</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            CONTOURS_MATCH_TYPE matchType </span><span style="color: #000000;">=</span><span style="color: #000000;"> rbHuI1.Checked </span><span style="color: #000000;">?</span><span style="color: #000000;"> CONTOURS_MATCH_TYPE.CV_CONTOUR_MATCH_I1 : (rbHuI2.Checked </span><span style="color: #000000;">?</span><span style="color: #000000;"> CONTOURS_MATCH_TYPE.CV_CONTOURS_MATCH_I2 : CONTOURS_MATCH_TYPE.CV_CONTOURS_MATCH_I3);<br />            Stopwatch sw </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Stopwatch();<br />            sw.Start();<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> matchValue </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour1.MatchShapes(contour2, matchType);<br />            sw.Stop();<br />            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> time </span><span style="color: #000000;">=</span><span style="color: #000000;"> sw.Elapsed.TotalMilliseconds;<br />            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">"</span><span style="color: #800000;">Hu矩匹配（{0:G}），结果：{1:F05}，用时：{2:F05}毫秒\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, matchType, matchValue, time);<br />        }<br /><br />        </span><span style="color: #008000;">//</span><span style="color: #008000;">轮廓树匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> MatchContourTrees(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour1, Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour2)<br />        {<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">生成轮廓树</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> thresholdOfCreate </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">double</span><span style="color: #000000;">.Parse(txtThresholdOfCreateContourTrees.Text); </span><span style="color: #008000;">//</span><span style="color: #008000;">生成轮廓树的阀值</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            IntPtr ptrTree1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvCreateContourTree(contour1.Ptr, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MemStorage().Ptr, thresholdOfCreate);<br />            IntPtr ptrTree2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvCreateContourTree(contour2.Ptr, </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> MemStorage().Ptr, thresholdOfCreate);<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> thresholdOfMatch </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">double</span><span style="color: #000000;">.Parse(txtThresholdOfMatchContourTrees.Text);   </span><span style="color: #008000;">//</span><span style="color: #008000;">比较轮廓树的阀值</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            Stopwatch sw </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Stopwatch();<br />            sw.Start();<br />            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> matchValue </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvMatchContourTrees(ptrTree1, ptrTree2, MATCH_CONTOUR_TREE_METHOD.CONTOUR_TREES_MATCH_I1, thresholdOfMatch);<br />            sw.Stop();<br />            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> time </span><span style="color: #000000;">=</span><span style="color: #000000;"> sw.Elapsed.TotalMilliseconds;<br />            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">"</span><span style="color: #800000;">轮廓树匹配（生成轮廓树的阀值：{0}，比较轮廓树的阀值：{1}），结果：{2:F05}，用时：{3:F05}毫秒\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, thresholdOfCreate, thresholdOfMatch, matchValue, time);<br />        }<br /><br />        </span><span style="color: #008000;">//</span><span style="color: #008000;">成对几何直方图匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> MatchPghHist(Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour1, Contour</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Point</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> contour2)<br />        {<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">生成成对几何直方图</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            Rectangle rect1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour1.BoundingRectangle;<br />            </span><span style="color: #0000ff;">float</span><span style="color: #000000;"> maxDist1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">float</span><span style="color: #000000;">)Math.Sqrt(rect1.Width </span><span style="color: #000000;">*</span><span style="color: #000000;"> rect1.Width </span><span style="color: #000000;">+</span><span style="color: #000000;"> rect1.Height </span><span style="color: #000000;">*</span><span style="color: #000000;"> rect1.Height); </span><span style="color: #008000;">//</span><span style="color: #008000;">轮廓的最大距离：这里使用轮廓矩形边界框的对角线长度</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            </span><span style="color: #0000ff;">int</span><span style="color: #000000;">[] bins1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;">[] { </span><span style="color: #800080;">60</span><span style="color: #000000;">, </span><span style="color: #800080;">20</span><span style="color: #000000;"> };<br />            RangeF[] ranges1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF[] { </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF(0f, 180f), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF(0f, maxDist1) };     </span><span style="color: #008000;">//</span><span style="color: #008000;">直方图第0维为角度，范围在(0,180)，第2维为轮廓两条边缘线段的距离</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            DenseHistogram hist1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> DenseHistogram(bins1, ranges1);<br />            CvInvoke.cvCalcPGH(contour1.Ptr, hist1.Ptr);<br />            Rectangle rect2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> contour2.BoundingRectangle;<br />            </span><span style="color: #0000ff;">float</span><span style="color: #000000;"> maxDist2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">float</span><span style="color: #000000;">)Math.Sqrt(rect2.Width </span><span style="color: #000000;">*</span><span style="color: #000000;"> rect2.Width </span><span style="color: #000000;">+</span><span style="color: #000000;"> rect2.Height </span><span style="color: #000000;">*</span><span style="color: #000000;"> rect2.Height);<br />            </span><span style="color: #0000ff;">int</span><span style="color: #000000;">[] bins2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;">[] { </span><span style="color: #800080;">60</span><span style="color: #000000;">, </span><span style="color: #800080;">20</span><span style="color: #000000;"> };<br />            RangeF[] ranges2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF[] { </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF(0f, 180f), </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> RangeF(0f, maxDist2) };<br />            DenseHistogram hist2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> DenseHistogram(bins2, ranges2);<br />            CvInvoke.cvCalcPGH(contour2.Ptr, hist2.Ptr);<br />            </span><span style="color: #008000;">//</span><span style="color: #008000;">匹配</span><span style="color: #008000;"><br /></span><span style="color: #000000;">            Stopwatch sw </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Stopwatch();<br />            sw.Start();<br />            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> compareResult;<br />            HISTOGRAM_COMP_METHOD compareMethod </span><span style="color: #000000;">=</span><span style="color: #000000;"> rbHistCorrel.Checked </span><span style="color: #000000;">?</span><span style="color: #000000;"> HISTOGRAM_COMP_METHOD.CV_COMP_CORREL : (rbHistChisqr.Checked </span><span style="color: #000000;">?</span><span style="color: #000000;"> HISTOGRAM_COMP_METHOD.CV_COMP_CHISQR : (rbHistIntersect.Checked </span><span style="color: #000000;">?</span><span style="color: #000000;"> HISTOGRAM_COMP_METHOD.CV_COMP_INTERSECT : HISTOGRAM_COMP_METHOD.CV_COMP_BHATTACHARYYA));<br />            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (rbHistEmd.Checked)<br />            {<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">EMD<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">将直方图转换成矩阵</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                Matrix</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Single</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> matrix1 </span><span style="color: #000000;">=</span><span style="color: #000000;"> FormProcessHist.ConvertDenseHistogramToMatrix(hist1);<br />                Matrix</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Single</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> matrix2 </span><span style="color: #000000;">=</span><span style="color: #000000;"> FormProcessHist.ConvertDenseHistogramToMatrix(hist2);<br />                compareResult </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvCalcEMD2(matrix1.Ptr, matrix2.Ptr, DIST_TYPE.CV_DIST_L2, </span><span style="color: #0000ff;">null</span><span style="color: #000000;">, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);<br />                matrix1.Dispose();<br />                matrix2.Dispose();<br />            }<br />            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />            {<br />                </span><span style="color: #008000;">//</span><span style="color: #008000;">直方图对比方式</span><span style="color: #008000;"><br /></span><span style="color: #000000;">                hist1.Normalize(1d);<br />                hist2.Normalize(1d);<br />                compareResult </span><span style="color: #000000;">=</span><span style="color: #000000;"> CvInvoke.cvCompareHist(hist1.Ptr, hist2.Ptr, compareMethod);<br />            }<br />            sw.Stop();<br />            </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> time </span><span style="color: #000000;">=</span><span style="color: #000000;"> sw.Elapsed.TotalMilliseconds;<br />            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">"</span><span style="color: #800000;">成对几何直方图匹配（匹配方式：{0}），结果：{1:F05}，用时：{2:F05}毫秒\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">, rbHistEmd.Checked </span><span style="color: #000000;">?</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">EMD</span><span style="color: #800000;">"</span><span style="color: #000000;"> : compareMethod.ToString(</span><span style="color: #800000;">"</span><span style="color: #800000;">G</span><span style="color: #800000;">"</span><span style="color: #000000;">), compareResult, time);<br />        }<br /><br /></span></div></pre>
</div>
</div>
<p>&nbsp;<img src="http://pic002.cnblogs.com/img/xrwang/201002/2010020917101646.jpg" /></p>
<p>&nbsp;<strong>&nbsp;</strong></p>
<p>&nbsp;&nbsp;&nbsp; 通过以上代码，可以计算出两个轮廓对比的值，但是这些值具体代表什么意义呢？实际上，我目前还不清楚，需要进行大量的试验才行。</p>
<p>&nbsp;</p>
<p><strong>感谢您耐心看完本文，希望对您有所帮助。</strong></p><img src="http://www.cnblogs.com/xrwang/aggbug/1666684.html?type=1" width="1" height="1" alt=""/><p>评论: 4　<a href="http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56838/" target="_blank">谷歌联合创始人谈Buzz：可以分享实时位置</a><span style="color:gray">(2010-02-10 14:28)</span><br/>· <a href="http://news.cnblogs.com/n/56837/" target="_blank">Android命名 冻酸奶之后是姜饼</a><span style="color:gray">(2010-02-10 14:11)</span><br/>· <a href="http://news.cnblogs.com/n/56836/" target="_blank">MySpace中国全面转型：欲争夺数字音乐版权</a><span style="color:gray">(2010-02-10 14:02)</span><br/>· <a href="http://news.cnblogs.com/n/56835/" target="_blank">王冉：中国会成全球最大移动互联网市场</a><span style="color:gray">(2010-02-10 13:42)</span><br/>· <a href="http://news.cnblogs.com/n/56833/" target="_blank">冷静，社交游戏！</a><span style="color:gray">(2010-02-10 13:38)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56829/" target="_blank">.NET Reflector即将商业化</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>