<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_缤纷</title><subtitle type="text">繁多而杂乱的样子,也指颜色多而绚丽.</subtitle><id>http://feed.cnblogs.com/blog/u/27651/rss</id><updated>2012-01-16T02:37:53Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/27651/rss"/><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html</id><title type="text">自制《要塞：十字军东征》无限金钱修改器</title><summary type="text">十字军东征，这游戏挺有意思的，建城堡，造投石车，攻城……。懒得发展工商业了，做这个修改器锁定金钱吧，只管攻城就行，体验另一种乐趣。哈哈到这里下载</summary><published>2011-10-06T13:50:00Z</published><updated>2011-10-06T13:50:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html"/><content type="html">&lt;p&gt;十字军东征，这游戏挺有意思的，建城堡，造投石车，攻城&amp;hellip;&amp;hellip;。&lt;/p&gt;&#xD;
&lt;p&gt;懒得发展工商业了，做这个修改器锁定金钱吧，只管攻城就行，体验另一种乐趣。哈哈&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="：《要塞：十字军东征》无限金钱修改器" src="http://www.binfensoft.cn/UploadFiles/2011-10/admin/2011100621330690471.jpg" width="362" height="129" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.binfensoft.cn/xgq/7.html" target="_blank"&gt;到这里下载&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2200183.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/10/06/2200183.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html</id><title type="text">ms Sql 数据库出现 “提供的统计信息流已损坏”的解决办法。</title><summary type="text">前几天一数据库有损坏，使用DBCC CHECKDB 命令检测和修复后，再怎么检测都是正常的。程序实现运行时就出现错误“提供的统计信息流已损坏”，用sql管理器运行命令select * from t_tabel却毫无问题，但在附加where 条件时就有问题了。最后经过检测，是其中的一个字段有问题，刚好这个字段建有索引，于是重建索引，问题解决。如下图：这个问题可能很少见，我找遍了百度，谷歌都没有解决办法，现将本解决办法放到网络，供人查询。</summary><published>2011-08-31T08:42:00Z</published><updated>2011-08-31T08:42:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html"/><content type="html">&lt;p&gt;前几天一数据库有损坏，使用DBCC CHECKDB 命令检测和修复后，再怎么检测都是正常的。&lt;/p&gt;&#xD;
&lt;p&gt;程序实现运行时就出现错误&amp;ldquo;提供的统计信息流已损坏&amp;rdquo;，用sql管理器运行命令select * from t_tabel却毫无问题，但在附加where 条件时就有问题了。&lt;/p&gt;&#xD;
&lt;p&gt;最后经过检测，是其中的一个字段有问题，刚好这个字段建有索引，于是重建索引，问题解决。&lt;/p&gt;&#xD;
&lt;p&gt;如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/24092/2011083116404566.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这个问题可能很少见，我找遍了百度，谷歌都没有解决办法，现将本解决办法放到网络，供人查询。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2160925.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/08/31/2160925.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html</id><title type="text">C#+Midi 模拟各种乐器演奏</title><summary type="text">前段时间一时兴起，参考各种资料文档，各种程序代码。连基本乐理知识都去了解了一些，弄清楚了什么是十二平均律，什么是半音、全音等等，终于弄出了这么个东东，如下图：其功能就是输入“简谱”就能演奏出优美的旋律。“连音”奏法一直没办法实现，是较为遗憾的一个事。程序中的简谱也是有规则的：以01234567为基本四分音符，每个音符用英文逗号分开，如：1,2,3,4等，0代表休止符。在音符前输入：“+-#!” 加号表示此音升高八度，减号则降八度，井号升半音，叹号降半音。 在基本音符后加斜杠“/”表示此音时值减一半，半成8分音符，双斜杠则变成16分音符。 可在以上基础上再加入延音线“-”（减号），一个减号表示延</summary><published>2011-07-02T14:11:00Z</published><updated>2011-07-02T14:11:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html"/><content type="html">&lt;p&gt;前段时间一时兴起，参考各种资料文档，各种程序代码。&lt;/p&gt;&#xD;
&lt;p&gt;连基本乐理知识都去了解了一些，弄清楚了什么是十二平均律，什么是半音、全音等等，终于弄出了这么个东东，如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011070221034480.png" /&gt;&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011070221040697.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其功能就是输入&amp;ldquo;简谱&amp;rdquo;就能演奏出优美的旋律。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;ldquo;连音&amp;rdquo;奏法一直没办法实现，是较为遗憾的一个事。&lt;/p&gt;&#xD;
&lt;p&gt;程序中的简谱也是有规则的：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;以01234567为基本四分音符，每个音符用英文逗号分开，如：1,2,3,4等，0代表休止符。&lt;/li&gt;&#xD;
&lt;li&gt;在音符前输入：&amp;ldquo;+-#!&amp;rdquo; 加号表示此音升高八度，减号则降八度，井号升半音，叹号降半音。 &lt;/li&gt;&#xD;
&lt;li&gt;在基本音符后加斜杠&amp;ldquo;/&amp;rdquo;表示此音时值减一半，半成8分音符，双斜杠则变成16分音符。 &lt;/li&gt;&#xD;
&lt;li&gt;可在以上基础上再加入延音线&amp;ldquo;-&amp;rdquo;（减号），一个减号表示延长一倍时值，和简谱里用法一样。 &lt;/li&gt;&#xD;
&lt;li&gt;还可在以上基础上再加入附点音符&amp;ldquo;.&amp;rdquo;（英文的句号），作用与简谱一样（允许双附点）。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;br /&gt;&#xD;
&lt;p&gt;================================&lt;/p&gt;&#xD;
&lt;p&gt;程序中主要使用的Windows API函数&lt;/p&gt;&#xD;
&#xD;
&lt;div onclick="cnblogs_code_show('0a04a73b-b5bb-49d6-84b5-72407943b026')" style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div  id="cnblogs_code_open_0a04a73b-b5bb-49d6-84b5-72407943b026"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 复置midi输出&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutReset(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 向输出端口发送信息&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="message"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutShortMsg(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; message);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 打开midi输出设备&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="deviceID"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="proc"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="instance"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="flags"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutOpen(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ref&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; deviceID,&lt;br /&gt;            MidiOutProc proc, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; instance, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; flags);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 关闭&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="handle"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        [DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;winmm.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; midiOutClose(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; handle);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;最核心的是向midi发送信息的部份，要了解发送指令的格式，请参考&lt;a target="_blank" href="http://baike.baidu.com/view/7969.htm#5"&gt;百度百科&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;当打开设备后就可以发送信息了，用的是上面的midiOutShortMsg函数，以下是经过封装的模拟键盘按下或抬起的函数&lt;/p&gt;&#xD;
&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Send(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iStatus, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            midiOutShortMsg(hndle, iStatus &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; (iData1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt; (iData2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 键盘按下，默认为第一通道&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="iData1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="iData2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_On(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Note_On(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iData1, iData2);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_On(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Send(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0x90&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iChannel, iData1, iData2);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_Off(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Note_Off(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iData1, iData2);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Note_Off(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iChannel, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData1, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; iData2)&lt;br /&gt;        {&lt;br /&gt;            Send(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0x80&lt;/span&gt;&lt;span style="color: #000000;"&gt;, iChannel, iData1, iData2);&lt;br /&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;注音看，0x90代表中的9代表键盘按下（开始发声），0代表第一通道，共16个通道，就是说可以有16个乐器同时演奏,iCannel是通道号，iData1是音符代号，0为最低音，127是最高音，钢琴的键盘中央C是60，iData2是音量或力度（我也不是很明白，一盘用100就行了）。这些信息在Send函数中进行&lt;span style="color: #888888;"&gt;与&lt;/span&gt;运算、移位运算后，得到诸如0x92 48 96 的信息，表示通道3 开始弹奏C2&lt;/p&gt;&#xD;
&lt;p&gt;0x80就表示键盘抬起，作用就是停止发声，一般我们都是用0x90 + 音量为0来实现静音的（具体为什么，忘了，好像是这样的命令能有效减小mid文件的存储长度）&lt;/p&gt;&#xD;
&lt;p&gt;更多命令请百度或谷哥吧，现提供程序及源码下载。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://files.cnblogs.com/gxlxzys/midiplayer.rar"&gt;简谱播放器下载&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://files.cnblogs.com/gxlxzys/SimpleMidiPlayer_SourceCode.rar"&gt;源代码下载&lt;/a&gt;（vs2010)&lt;/p&gt;&#xD;
&lt;p&gt;另外本程序引用一CodeProject中一个项目&lt;a target="_blank" href="http://www.codeproject.com/KB/audio-video/MIDIToolkit.aspx"&gt;C# MIDI Toolkit&lt;/a&gt;部份Api声明的代码，此项目是一个键盘钢琴程序，运行界面如下：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011070221593524.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;还有还在一个&lt;a target="_blank" href="http://www.newxing.com/Code/VB/Multimedia/580.html"&gt;网站&lt;/a&gt;找到了一些VB写的钢琴键盘，也很有参考价值。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2096497.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/07/02/2096497.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html</id><title type="text">如何让DataGridView根据数据“0”或“1”等值显示为“是”或“否”（复选框的使用）</title><summary type="text">DataGridView 中关于DataGridViewComboBoxColumn（复选框控件）的使用方法</summary><published>2011-06-09T01:57:00Z</published><updated>2011-06-09T01:57:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html"/><content type="html">&lt;p&gt;在数据库中，我们经常用一些简单的数值（如0、1、2等）代表一定含义，如：是/否，男/女，正确/错误，已婚/未婚/离异等。&lt;/p&gt;&#xD;
&lt;p&gt;但在DataGridView控件中如何显示呢？&lt;/p&gt;&#xD;
&lt;p&gt;一种办法是使用 select Case 语句。&lt;/p&gt;&#xD;
&lt;p&gt;二种方法就是使用DataGridView 列定制。&lt;/p&gt;&#xD;
&lt;p&gt;这里主要讲的是第二种方法。&lt;/p&gt;&#xD;
&lt;p&gt;在设置DataGridView列属性时，将ColumnType设置为DataGridViewComboBoxColumn，DisplayStyle设置为Nothing，然后是代码：&lt;/p&gt;&#xD;
&lt;p&gt;在窗体加载过程中录入下列代码：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;((DataGridViewComboBoxColumn)gvSaleOrder.Columns["payMode"]).DisplayMember = "text";&#xD;
            ((DataGridViewComboBoxColumn)gvSaleOrder.Columns["payMode"]).ValueMember = "value";&#xD;
            DataTable dtPayMode = new DataTable();&#xD;
            dtPayMode.Columns.Add("text");&#xD;
            dtPayMode.Columns.Add("value", typeof(byte));&#xD;
            dtPayMode.Rows.Add(new object[] { "现金", 0 });&#xD;
            dtPayMode.Rows.Add(new object[] { "刷卡", 1 });&#xD;
            ((DataGridViewComboBoxColumn)gvSaleOrder.Columns["payMode"]).DataSource = dtPayMode;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这样就可以在对DataGridView绑定数据时，自动根据0或1等状态显示相应的中文了。如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011060909514335.png" /&gt;&lt;/p&gt;&#xD;
&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852988.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/1852988.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html</id><title type="text">DataGridView 显示和隐藏DataGridViewButtonCell按钮的办法</title><summary type="text">有时，我们需要在DataGridView中，针对某行数据进行简单的变换操作，且变换后显示的内容要与变换关不一致，不能再变回来，如下图：网上搜索到一个贴子，里面提供了两种办法，我选用了其中一种。http://social.msdn.microsoft.com/Forums/en/winformsapplications/thread/f82ec651-6b22-44b0-8ead-15796387424f就是将这个DataGridViewButtonCell换成 DataGridViewTextBoxCell，非常简单上图的实现代码：private void gvSaleOrder_RowPre</summary><published>2011-06-09T01:04:00Z</published><updated>2011-06-09T01:04:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html"/><content type="html">&lt;p&gt;有时，我们需要在DataGridView中，针对某行数据进行简单的变换操作，且变换后显示的内容要与变换关不一致，不能再变回来，如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/24092/2011060717023896.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;网上搜索到一个贴子，里面提供了两种办法，我选用了其中一种。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/winformsapplications/thread/f82ec651-6b22-44b0-8ead-15796387424f"&gt;http://social.msdn.microsoft.com/Forums/en/winformsapplications/thread/f82ec651-6b22-44b0-8ead-15796387424f&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;就是将这个DataGridViewButtonCell换成 DataGridViewTextBoxCell，非常简单&lt;/p&gt;&#xD;
&lt;p&gt;上图的实现代码：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;private void gvSaleOrder_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)&#xD;
        {&#xD;
            if (gvSaleOrder["writeOff", e.RowIndex].Value.ToString() == "1" &amp;amp;&amp;amp; gvSaleOrder["btnConfirm", e.RowIndex].Value.ToString() != "已销账")&#xD;
            {&#xD;
                gvSaleOrder["btnConfirm", e.RowIndex] = new DataGridViewTextBoxCell();&#xD;
                gvSaleOrder["btnConfirm", e.RowIndex].Value = "已销账";&#xD;
                &#xD;
            }&#xD;
        }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/2074472.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2011/06/09/2074472.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html</id><title type="text">文件隐藏助手，将一个压缩文件隐藏到图片中</title><summary type="text">将一个压缩文件隐藏到图片中，把此图片扩展名改为.rar就能变回压缩文件 ，再改为.gif又变回图片，是不是很神奇？</summary><published>2010-12-19T05:46:00Z</published><updated>2010-12-19T05:46:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html"/><content type="html">&lt;p&gt;有一次在百度贴吧中看到一张签名图片，图的内容是让你把这张图片下载下来，然后把扩展名改为.rar，打开后会有意外惊喜，我认为这肯定是骗人的把戏，文件格式可不是改个扩展名就能改的，把.gif改成.rar就能变成压缩文件，这怎么可能，但看到下面的很多跟贴内容，都说有意外惊喜，于是我也决定试试看。&lt;/p&gt;&#xD;
&lt;p&gt;不试不知道，一试吓一跳，竟然真的能打开，图片变成了压缩包，解压出来是好几个bt种子文件，全是日本爱情动作片的种子。&lt;/p&gt;&#xD;
&lt;p&gt;网上找了一下资料，有的是用16进制编辑器把两个文件合在一起，但更简单的方法是用copy命令，如下命令：&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;copy /b&amp;nbsp;图片1.gif+文件2.rar 隐藏图片3.gif&lt;/span&gt;&lt;br /&gt;这样就能把两个文件合成一个文件，你自己也可以试试，生成的文件&lt;span style="color: #339966;"&gt;&lt;span style="color: #0000ff;"&gt;隐藏图片3.gif&lt;/span&gt;&lt;span style="color: #000000;"&gt;改变扩展名为.gif和.rar都能打开。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;顺便做了个Winfrom小程序，送给有需要的网友。&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/24092/2010121913400852.png" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a href="http://files.cnblogs.com/gxlxzys/%e6%96%87%e4%bb%b6%e9%9a%90%e8%97%8f%e5%8a%a9%e6%89%8b.rar"&gt;点这里下载&lt;/a&gt;&lt;br /&gt;下图是我用此工具生成的图片，你可以下载到你的计算机上改个扩展名看看。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/24092/2010121913440963.gif" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1910499.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/12/19/1910499.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html</id><title type="text">如何让DataGridview控件自动滚动到指定的行或列</title><summary type="text">Datagridview中的数据量一多，就有可能用到滚动条。有些时候新增加一条记录时，DataGridView不会自动滚动到新加记录，这时我们要手工滚动。刚开始时我使用的是FirstDisplayedScrollingRowIndex和FirstDisplayedScrollingColumnIndex等属性，也能实现需求，但滚动太大，效果不理想。后来才发现，通过设置CurrentCell属性效果...</summary><published>2010-10-16T03:57:00Z</published><updated>2010-10-16T03:57:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html"/><content type="html">&lt;p&gt;Datagridview中的数据量一多，就有可能用到滚动条。&lt;/p&gt;&#xD;
&lt;p&gt;有些时候新增加一条记录时，DataGridView不会自动滚动到新加记录，这时我们要手工滚动。&lt;/p&gt;&#xD;
&lt;p&gt;刚开始时我使用的是FirstDisplayedScrollingRowIndex和FirstDisplayedScrollingColumnIndex等属性，也能实现需求，但滚动太大，效果不理想。&lt;/p&gt;&#xD;
&lt;p&gt;后来才发现，通过设置CurrentCell属性效果最好。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852976.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852976.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html</id><title type="text">为Winform程序中DataGridView控件增加自动显示行号功能</title><summary type="text">网上找了几种显示行号的方法，采用了其中一种，在行头显示行号，很实用，如图：代码如下：</summary><published>2010-10-16T03:47:00Z</published><updated>2010-10-16T03:47:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html"/><content type="html">&lt;p&gt;网上找了几种显示行号的方法，采用了其中一种，在行头显示行号，很实用，如图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/24092/2010101611444620.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;代码如下：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;private void gvTransferList_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)&#xD;
        {&#xD;
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, gvTransferList.RowHeadersWidth, e.RowBounds.Height);&#xD;
            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),&#xD;
                gvTransferList.RowHeadersDefaultCellStyle.Font, rectangle, gvTransferList.RowHeadersDefaultCellStyle.ForeColor,&#xD;
                TextFormatFlags.VerticalCenter | TextFormatFlags.Right);&#xD;
        }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852974.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852974.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html</id><title type="text">在Excel Vba程序中自制进度条，显示实时进度信息</title><summary type="text">工作中常常使用Excel + Vba进行一些数据的操作，在读取成千上万行数据时就非常需要一个进度显示。虽然vba自带有Active控件的进度条，但使用后发现效果并不理想。于是自制了一个，在状态栏显示，效果如图：代码：调用方式示例：非常地实用吧，呵呵。</summary><published>2010-10-16T03:35:00Z</published><updated>2010-10-16T03:35:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html"/><content type="html">&lt;p&gt;工作中常常使用Excel + Vba进行一些数据的操作，在读取成千上万行数据时就非常需要一个进度显示。虽然vba自带有Active控件的进度条，但使用后发现效果并不理想。&lt;/p&gt;&#xD;
&lt;p&gt;于是自制了一个，在状态栏显示，效果如图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img style="border: black 1px solid;" src="http://pic002.cnblogs.com/images/2010/24092/2010101611314328.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;代码：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;'自定义的进度条，在状态栏显示&#xD;
Function GetProgress(curValue, maxValue)&#xD;
Dim i As Single, j As Integer, s As String&#xD;
i = maxValue / 20&#xD;
j = curValue / i&#xD;
&#xD;
For m = 1 To j&#xD;
    s = s &amp;amp; "■"&#xD;
Next m&#xD;
For n = 1 To 20 - j&#xD;
    s = s &amp;amp; "□"&#xD;
Next n&#xD;
GetProgress = s &amp;amp; FormatNumber(curValue / maxValue * 100, 2) &amp;amp; "%"&#xD;
End Function&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;调用方式示例：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;rs.Open sql,  connXls, 1&#xD;
    Dim p As Integer: p = 0&#xD;
    Do While Not rs.EOF&#xD;
        p = p + 1&#xD;
        '在状态栏显示&#xD;
        Application.StatusBar = GetProgress(p, rs.RecordCount)&#xD;
    &amp;hellip;&amp;hellip;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;非常地实用吧，呵呵。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1852967.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gxlxzys/archive/2010/10/13/1850608.html</id><title type="text">Winform中的DataGridView控件内容自动保存</title><summary type="text">DataGridView控件在Winform程序中使用相当的普遍，如何能让其输入即保存，而不用另增加一个&amp;ldquo;保存&amp;rdquo;按钮呢？经研究，终于找到解决办法：在DataGridView的RowValidated事件中增加代码以下代码[代码]RowValidated事件为行校验完成事件，当然你也可以在单元格校验事件中进行保存。完成这样的效果，使程序变得傻瓜化。就这是软件易用性的典范.</summary><published>2010-10-13T14:30:00Z</published><updated>2010-10-13T14:30:00Z</updated><author><name>缤纷</name><uri>http://www.cnblogs.com/gxlxzys/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/13/1850608.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gxlxzys/archive/2010/10/13/1850608.html"/><content type="html">&lt;p&gt;DataGridView控件在Winform程序中使用相当的普遍，如何能让其输入即保存，而不用另增加一个&amp;ldquo;保存&amp;rdquo;按钮呢？&lt;/p&gt;&#xD;
&lt;p&gt;经研究，终于找到解决办法：&lt;/p&gt;&#xD;
&lt;p&gt;在DataGridView的RowValidated事件中增加代码以下代码&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取该行绑定数据&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; DataRowView row &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DataRowView)gvProduct.Rows[e.RowIndex].DataBoundItem;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;若数据未改动，则返回 &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (row.Row.RowState &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; DataRowState.Unchanged) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;执行SQL更新数据 &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; sql &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;update t_product set ipri={0},opri={1} where productNO='{2}'&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;DBsql.ExecuteNonQuery(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Format(sql, row[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ipri&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;], row[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;opri&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;], row[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;productNO&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;]));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;告知DataGridView，已接受改动，下次校验时行状态为DataRowState.Unchanged &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;row.Row.AcceptChanges();&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;RowValidated事件为行校验完成事件，当然你也可以在单元格校验事件中进行保存。&lt;/p&gt;&#xD;
&lt;p&gt;完成这样的效果，使程序变得傻瓜化。&lt;/p&gt;&#xD;
&lt;p&gt;就这是软件易用性的典范.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gxlxzys/aggbug/1850608.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gxlxzys/archive/2010/10/13/1850608.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
