<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[小宇飞刀的BLOG]]></title> 
<link>http://vir.jxstnu.edu.cn/xieyunc/index.php</link> 
<description><![CDATA[小宇的网上家园 飞刀的技术博客]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[小宇飞刀的BLOG]]></copyright>
<item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?290</link>
<title><![CDATA[图像旋转控件TRotateImage Ver1.54(支持D3~D2010)]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Tue, 20 Jul 2010 05:16:23 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?290</guid> 
<description>
<![CDATA[ 
	非常优秀的图像旋转控件（最新版）---TRotateImage Ver1.54，支持从Delphi 3 到最新的 Delphi 2010。<br/><a href="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=58" target="_blank"><img src="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=58" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>另附安装过程中出现 File Not found 'DesignIntf.dcu'和File Not found 'Proxies.dcu'在Delphi 7~2007下的解决方法：<br/>1、File Not found 'DesignIntf.dcu'在Delphi 7~2007下的解决方法：<br/>在Library中加入$(BDS)&#92;Lib&#92;ToolsAPI 的搜索路径。<br/><br/>2、File Not found 'Proxies.dcu'在Delphi 7~2007下的解决方法：<br/>把uses DsgnIntf 改为 uses DesignIntf，并且在Package Requires列表中加入DesignIDE.dcp，该文件在$(BDS)&#92;Lib目录下。<br/><a href="attachment.php?fid=57">点击这里下载文件</a>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?289</link>
<title><![CDATA[File Not found DesignIntf.dcu或者Proxies.dcu 的解决方法]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Fri, 16 Jul 2010 14:43:35 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?289</guid> 
<description>
<![CDATA[ 
	1、File Not found 'DesignIntf.dcu'在Delphi 7~2007下的解决方法：<br/>在Library中加入$(BDS)&#92;Lib&#92;ToolsAPI 的搜索路径。<br/><br/>2、File Not found 'Proxies.dcu'在Delphi 7~2007下的解决方法：<br/>把uses DsgnIntf 改为 uses DesignIntf，并且在Package Requires列表中加入DesignIDE.dcp，该文件在$(BDS)&#92;Lib目录下。<br/>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?287</link>
<title><![CDATA[Delphi2009中智能指针(Smart Pointer)的实现[转]]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Sat, 29 May 2010 03:30:00 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?287</guid> 
<description>
<![CDATA[ 
	好帖一张，作个记号先！<br/><span style="color: #4169E1;"><a href="http://www.anqn.com/dev/delphi/2009-07-17/a09113204.shtml" target="_blank">http://www.anqn.com/dev/delphi/2009-07-17/a09113204.shtml</a></span>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?286</link>
<title><![CDATA[Delphi中的指针用法]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Sat, 29 May 2010 03:11:06 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?286</guid> 
<description>
<![CDATA[ 
	先看一个指针用法的例子：<br/><textarea name="code" class="delphi" rows="15" cols="100">
var
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X,&nbsp;&nbsp; Y:&nbsp;&nbsp; Integer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; X&nbsp;&nbsp; and&nbsp;&nbsp; Y&nbsp;&nbsp; 整数类型
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P:&nbsp;&nbsp; ^Integer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; P&nbsp;&nbsp; 指向整数类型的指针
begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X&nbsp;&nbsp; :=&nbsp;&nbsp; 17;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 给&nbsp;&nbsp; X&nbsp;&nbsp; 赋值
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P&nbsp;&nbsp; :=&nbsp;&nbsp; @X;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp; 把&nbsp;&nbsp; x的地址赋给p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y&nbsp;&nbsp; :=&nbsp;&nbsp; P^;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp; 取出p所指向的数值赋给y
end;
</textarea><br/>第二行定义了两个变量X,y.&nbsp;&nbsp; 第三行声明了p是指向整数类型的指针;意味着p能够指向x或者y的地址.第五行赋给x值,第六行把x的地址赋给p.最后通过p指向的变量赋值给y.此时,x和y有相同的值.<br/><br/>操作符@用来取出变量的地址,也可以取出过程和函数的地址.而符号^有两个目标,当它出现在类型定义的前面时如 ^typename 表示指向这种类型的指针;当它出现在指针变量后边时&nbsp;&nbsp; 如 point^ 返回指针指向的变量的值;<br/><br/>理解指针比较容易理解面向对象的pascal语言,因为指针经常在幕后操作.任何要求动态分配大的内存空间的类型可以用指针类型.例如,long-string变量,实际在使用指针进行操作.另外一些高级的编程技术需要使用指针类型.有时指针是适应object&nbsp;&nbsp; pascal严格的类型限制的唯一方法.同过一个通用的指针类型,通过类型转换成不同的指针类型,如下面的例子:<br/><textarea name="code" class="delphi" rows="15" cols="100">type

&nbsp;&nbsp;&nbsp;&nbsp;PInteger&nbsp;&nbsp; =&nbsp;&nbsp; ^Integer;
var
&nbsp;&nbsp;&nbsp;&nbsp;R:&nbsp;&nbsp; Single;
&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp; Integer;
&nbsp;&nbsp;&nbsp;&nbsp;P:&nbsp;&nbsp; Pointer; //通用的指针
&nbsp;&nbsp;&nbsp;&nbsp;PI:&nbsp;&nbsp; PInteger;
begin
&nbsp;&nbsp;&nbsp;&nbsp;P&nbsp;&nbsp; :=&nbsp;&nbsp; @R; //取出R的内存地址
&nbsp;&nbsp;&nbsp;&nbsp;PI&nbsp;&nbsp;:=&nbsp;&nbsp; PInteger(P); //把通用类型转换成指向整数类型的指针
&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp; :=&nbsp;&nbsp; PI^;
end;
</textarea><br/><span style="color: #FF0000;">注意：由于实数和整数的存储格式不同.这种赋值只是把原始的二进制数据从R拷贝到I,而不进行转换，故I的值和R的值是不相同的.</span><br/><br/>保留字nil是一个特殊的常量可以赋给任何指针类型,当nil赋給一个指针时,指针什么也不指向,是一个空指针.<br/>@操作符返回变量的内存中的存储地址,或者是过程&#92;函数&#92;方法;<br/><br/>1.如果变量,@X返回的是x的地址。如果编译选项&#123;$T-&#125;没有打开,着返回的事一个通用的指针,如果编译选项打开了,着返回的是x的类型对应的指针.<br/><br/>2.如果是例程(过程&#92;函数),@F返回的是F的入口点，@F的类型是一个指针。<br/><br/>3.当@用在类的方法中时,则方法的名称必须有类名,例如@TMyclass.Dosomething指针指向TMyclass的dosomething方法。<br/><br/>当一个过程变量在赋值语句的左边时，编译器期望一个过程值在赋值语句的右边。这种赋值使得左边的变量可以指向右边定义的过程或者函数入口点。换句话说，可以通过该变量来引用声明的过程或者函数，可以直接使用参数的引用。<br/><textarea name="code" class="delphi" rows="15" cols="100">
var

&nbsp;&nbsp;&nbsp;&nbsp;F:&nbsp;&nbsp; function(X:&nbsp;&nbsp; Integer):&nbsp;&nbsp; Integer;
&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp; Integer;
function&nbsp;&nbsp; SomeFunction(X:&nbsp;&nbsp; Integer):&nbsp;&nbsp; Integer;
&nbsp;&nbsp;...
F&nbsp;&nbsp; :=&nbsp;&nbsp; SomeFunction;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 给f赋值
I&nbsp;&nbsp; :=&nbsp;&nbsp; F(4);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 调用所指向的函数
</textarea><br/>在赋值语句中，左边变量的类型决定了右边的过程或者方法指针解释。<br/><textarea name="code" class="delphi" rows="15" cols="100">
var
&nbsp;&nbsp;&nbsp;&nbsp;F,&nbsp;&nbsp; G:&nbsp;&nbsp; function:&nbsp;&nbsp; Integer;
&nbsp;&nbsp;&nbsp;&nbsp;I:&nbsp;&nbsp; Integer;
function&nbsp;&nbsp; SomeFunction:&nbsp;&nbsp; Integer;
begin
&nbsp;&nbsp;//...
end;
&nbsp;&nbsp;//...
F&nbsp;&nbsp; :=&nbsp;&nbsp;SomeFunction;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 给f赋值
G&nbsp;&nbsp; :=&nbsp;&nbsp; F;&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;&nbsp;//&nbsp;&nbsp; 把F的值拷贝给G
I&nbsp;&nbsp; :=&nbsp;&nbsp; G;&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;&nbsp;//&nbsp;&nbsp; 调用函数
</textarea><br/>第一句获得函数的入口，第二句将指针复制，第三句获得函数的返回值。<br/><br/>有时候还可以这样使用 <br/>if&nbsp;&nbsp; F&nbsp;&nbsp; =&nbsp;&nbsp; MyFunction&nbsp;&nbsp; then&nbsp;&nbsp; ...;<br/>在这里，F的出现导致一个函数调用；编译器调用F指向的函数，然后调用Myfunction，比较结果。这个规则是无论何时一个过程变量（procedural&nbsp;&nbsp; variable）出现在一个表达式中，它表示调用所指向的函数或者过程。有时F指向一个过程（没有返回值），或者f指向一个需要参数的函数，则前面的语句会产生一个编译错误。要比较F和Myfunction需要用<br/>if&nbsp;&nbsp; @F&nbsp;&nbsp; =&nbsp;&nbsp; @MyFunction&nbsp;&nbsp; then&nbsp;&nbsp; ...;<br/>@F把F转换成一个包含地址的无类型的指针变量,@myfunction返回myfunction的地址。获得一个过程变量的内存地址使用@@。例如，@@F返回F的地址。<br/><br/>@操作符通常把一个无类型的指针值赋给一个过程变量，例如：<br/>var&nbsp;&nbsp; StrComp:&nbsp;&nbsp; function(Str1,&nbsp;&nbsp; Str2:&nbsp;&nbsp; PChar):&nbsp;&nbsp; Integer;<br/>&nbsp;&nbsp;...<br/>@StrComp&nbsp;&nbsp; :=&nbsp;&nbsp; GetProcAddress(KernelHandle,&nbsp;&nbsp; 'lstrcmpi ');<br/>调用GetProcAddres函数,用strcomp指向这个值任何过程变量可以赋成nil，表示指证什么也不指向。但是试图调用一个nil值的过程变量导致一个错误，为了测试一个过程变量是否可以赋值，用标准的赋值函数Assigned<br/><textarea name="code" class="delphi" rows="15" cols="100">if&nbsp;&nbsp; Assigned(OnClick)&nbsp;&nbsp; then&nbsp;&nbsp; OnClick(X);</textarea><br/>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?277</link>
<title><![CDATA[Delphi优秀免费资源-[精]]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Tue, 22 Dec 2009 10:01:15 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?277</guid> 
<description>
<![CDATA[ 
	先感谢一下hi上面的"幸福苹果",本文转自"幸福苹果"。<br/>１、FastMM <br/>主页：<a href="http://fastmm.sf.net" target="_blank">http://fastmm.sf.net</a> Delphi 2006 中一个重要的更新就是使用开源内存管理器 FastMM 替调了使用了 N 年的老内存管理器。<br/><br/>FastMM 在外国 Delphi 社区非常有名，其主要目的就是重新实现一个高效、安全、稳定的内存管理器（Borland 的内存管理器问题多多，如 Dll 和 Exe 间无法共享，多线程下效率底－－一些情况下甚至于低一个数量级！），在代号为 Dexter 的 Delphi 2006 没 release 之前已经听李维大肆鼓吹说 Dexter 如何出色，还在 CSDN 上说他 Demo 证明 FastMM 在 Delphi 和 BCB <br/>下能提高 NNN% 的效率！<br/>相对旧内存管理器，FastMM 有诸多的优点：<br/><br/>a、彻底实现了 Borland 的内存管理器，可以完全取代现有的内存管理器（“取代”就是第一个 uses FastMM4，that is all ...） b、实现了内存管理器共享机制，Exe 和 Dll 间共享内存管理器不需要任何 Dll 支持 c、集成了内存泄漏检测功能 d、充分兼容现有的代码、Delphi 旧内存管理器模式 e、为了加速 Delphi IDE（如 Delphi 5/6/7、Delphi 2005）的启动速度、管理内存占用等，他提供了 BorlndMM.dll 的替代，直接替换 Bin 中的 Dll 即可！<br/><br/>２、FastCode <br/>主页：<a href="http://fastcode.sf.net" target="_blank">http://fastcode.sf.net</a> 国外一个非常知名的delphi项目，是一个高效的可代替delphi的rtl的函数库，里面的函数<br/>大多都是用汇编写成的，Delphi2006中就有很多代码就是参考了fastcode（或者直接拷贝过去）。 它就特点就是一个字：快！<br/><br/>３、VirtualTreeview <br/>主页：<a href="http://www.delphi-gems.com" target="_blank">http://www.delphi-gems.com</a> 最强大的树形控件，到底有多强，自已去体会吧！ 这个控件也是<br/>Delphi2006的IDE使用的控件之一（里面的所有树形相关控件都是用的这个），Delphi2006之所以速度快，很大程序上也有这个控件的一部分功劳！<br/><br/>４、graphics32 <br/>主页：<a href="http://www.graphics32.org" target="_blank">http://www.graphics32.org</a> Graphics32图像控件是专门用于Windows Bitmap快速绘脊辜及函式库，能够轻易制作半透明视觉效果，可以作出图层效果，缩放，Alpha混合，角度旋转等多种图像效果。 带有六个控件：TPaintBox32, TImage32, TBitmap32List, TRangeBar, TGaugeBar, TImgView32.<br/><br/>５、GraphicEx <br/>主页：<a href="http://www.delphi-gems.com" target="_blank">http://www.delphi-gems.com</a> Delphi的图形增强控件，为Delphi增加数十种图形格式的支持<br/><br/>TIFF images (*.tif; *.tiff), extended base line implementation<br/>1..16 bits per sample<br/>indexed, grayscale, RGB(A), CMYK, L*a*b*<br/>uncompressed, packed bits, LZW, CCITT T.4, Thunderscan, Deflate, new style JPEG<br/>GFI fax images (*.fax), uses TTIFFGraphic to read<br/>SGI images (*.bw, *.rgb, *.rgba, *.sgi)<br/>1..16 bits per sample<br/>indexed, grayscale, RGB(A)<br/>uncompressed, RLE<br/>Autodesk images files (*.cel; *.pic) old style only<br/>8 bits per sample, indexed and uncompressed<br/>Truevision images (*.tga; *.vst; *.icb; *.vda; *.win), write support included<br/>5 and 8 bits per sample<br/>grayscale, indexed, 15 bits RGB (555), 24 bits RGB(A)(888)<br/>uncompressed, RLE<br/>ZSoft Paintbrush images (*.pcx, *.pcc; *.scr)<br/>1..8 bits per sample<br/>grayscale, indexed, RGB<br/>uncompressed, RLE<br/>Kodak Photo-CD images (*.pcd)<br/>8 bits per sample in YCbCr in any resolution (192 x 128 up to 6144 x 4096)<br/>Portable pixel/gray map images (*.ppm, *.pgm, *.pbm)<br/>1 and 8 bits per sample<br/>grayscale, indexed, RGB uncompressed<br/>Dr. Halo images (*.cut, *.pal)<br/>8 bits per sample indexed, RLE compressed<br/>CompuServe images (*.gif)<br/>1, 4, 8 bits per sample indexed, LZW compressed<br/>SGI Alias/Wavefront images (*.rla, *.rpf)<br/>8 bits per sample RGB(A), RLE compressed<br/>Standard Windows bitmap images (*.bmp, *.rle, *.dib)<br/>Photoshop images (*.psd, *.pdd)<br/>1, 8, 16 bits per sample<br/>indexed, RGB, CMYK, CIE L*a*b*<br/>uncompressed and packed bits<br/>Paintshop Pro images (*.psp)<br/>1, 4, 8 bits per sample<br/>indexed, grayscale, RGB<br/>uncompressed, RLE and LZ77<br/>single-layered files only!<br/>Portable network graphic images (*.png)<br/>1, 2, 4, 8, 16 bits per sample<br/>indexed, grayscale alpha, RGB(A), LZ77 compressd <br/><br/>６、Toolbar 2000 <br/>主页：<a href="http://www.jrsoftware.org/" target="_blank">http://www.jrsoftware.org/</a> 强大的工具栏控件，delphi自带的Toolbar和它一比简直就是鸡肋！<br/><br/>７、CoolTrayIcon <br/>主页：<a href="http://subsimple.com/delphi.asp" target="_blank">http://subsimple.com/delphi.asp</a> <br/>CoolTrayIcon：在任务栏放置图标的控件，是同类空间中功能最为完善和强大的。 <br/>1、支持动态图标 <br/>2、交互式气球样式的提示框 <br/>3、支持bitmaps到icons的转换 <br/>4、支持设计状态预览 <br/>5、提供继承的TextTrayIcon可以让你直接显示Text文本 <br/>6、8个代码例子1个exe例子。<br/><br/>它的网站还有其它优秀资源若干！　　<br/><br/>８、PicShow <br/>主页：<a href="http://www.delphiarea.com" target="_blank">www.delphiarea.com</a> TPicShow是一套图形平滑特效控制组件，包含150多种特效。 TDBPicShow是数据感知的TPicShow组件。<br/><br/>９、simplegraph <br/>主页：<a href="http://www.delphiarea.com" target="_blank">www.delphiarea.com</a> 一个简单易用的开源矢量控件,比较适合做工作流和其它一些简单的需要矢量图形的场合. <br/><br/>１０.EssModel <br/>主页：<a href="http://essmodel.sourceforge.net/index.html" target="_blank">http://essmodel.sourceforge.net/index.html</a> 将代码转换为UML图形的工具，支持Delphi和Java<br/><br/>１１.GDI+ Plus <br/>HomePage: <a href="http://www.progdigy.com/modules.php?name=gdiplus" target="_blank">http://www.progdigy.com/modules.php?name=gdiplus</a><br/><br/>１２JVCL、JCL <br/>主页：<a href="http://jvcl.sf.net" target="_blank">http://jvcl.sf.net</a> <a href="http://jcl.sf.net" target="_blank">http://jcl.sf.net</a><br/><br/>JVCL JEDI-VCL 是开放源码的 Delphi 控件库，有 300 多个控件。很多知名的控件 Rxlib/Ralib/DockPresident等等都加入了JVCL的队伍，作为开放源码项目，这些控件附带源码，而说有原码采用相同的编码标准 (Coding standard)，保持了程序格式的统一。另外，这有300 多个控件的控件库使用 Mozilla Public Licence("MPL") 。 Delphi 程序员如果需要什么控件，建议先去 JVCL <a href="http://jvcl.sourceforge.net" target="_blank">http://jvcl.sourceforge.net</a> 找找，说不定已经有现成的可以用了。<br/><br/>JCL：大量的函数库让人爱不释手，基本你用的函数在这里都能找到！<br/><br/>１３TMPHexEditor <br/>主页：<a href="http://www.mirkes.de/en/delphi/vcls/hexedit.php" target="_blank">http://www.mirkes.de/en/delphi/vcls/hexedit.php</a><br/><br/>优秀的十六进制编辑控件<br/><br/>１４SynEdit <br/>主页：<a href="http://synedit.sourceforge.net" target="_blank">http://synedit.sourceforge.net</a> 最好的代码编辑控件，支持语法高亮显示，品质超过所有同类的商业控件！<br/><br/>１５LOG4J<br/>主页：<a href="http://log4delphi.sourceforge.net/" target="_blank">http://log4delphi.sourceforge.net/</a><br/><br/>用过java的人，应该很熟悉log4j吧？<br/><br/>What is Log4Delphi? Log4Delphi is an Open Source project that aims to produce a high quality and usable <br/><br/>logging suite for Borland's Delphi based on the Log4J package from the Apache <br/><br/>Software Foundation.<br/><br/>The main goals of the project are:<br/><br/>Simplicity. Simplicity should drive everything, the suite should be simple to <br/><br/>understand and simple to use. Loosely based on Log4J. The Log4J package is a mature logging package for the Java <br/><br/>Platform. Log4Delphi is based on that package in such a way that those who know and <br/><br/>understand Log4J will easily pick up and learn Log4Delphi. Finally, Log4Delphi should be flexible enough to easily integrate into new and <br/><br/>existing Delphi projects, by following standard Delphi practices. Those interested in the Log4J package can find more information here.<br/><br/>１５ DUnit Xtreme testing for Delphi 单元测试 EurekaLog 异常 DelForEX 代码排版<br/><br/>１６ 还有dspack，N多视频相关软件都是用dspack写的。Asphyre免费开源的delphi游戏引擎，也是用directx的。<br/><br/>１７ zeoslib（免费的数据库引擎） <br/>主页：<a href="http://zeoslib.sf.net" target="_blank">http://zeoslib.sf.net</a><br/>不但可以访问免费的小型的数据库如：mysql,postgresql,interbase,firebird,而且mssql,db2,oracle,sybase 也同样支持！<br/>更愉快的： 访问任何数据库都是统一的控件，只要选择不同的Protocol就可以了<br/><br/>１８ 开源的xml读写控件 <br/>1.XMLParser <a href="http://www.destructor.de/" target="_blank">http://www.destructor.de/</a> <br/>2.omnixml <a href="http://www.omnixml.com/" target="_blank">http://www.omnixml.com/</a> <br/>3.XDOM <a href="http://www.philo.de/xml/&nbsp;&nbsp;" target="_blank">http://www.philo.de/xml/&nbsp;&nbsp;</a>功能一个比一个强，就看你喜欢哪一个了，都不需要dll<br/><br/>１９ Tbx <br/>主页：<a href="http://www.g32.org/tbx/" target="_blank">http://www.g32.org/tbx/</a> <a href="http://www.rmklever.com/delphitbx.html" target="_blank">http://www.rmklever.com/delphitbx.html</a><br/>tbx是一套非常优秀的ToolBar2000的界面增强控件，虽然比devexpress功能稍弱，但是界面上却比它更为漂亮，而且是免费的<br/><br/>２０ 用于支持多语言的VCL孔件组 TntWare Delphi Unicode Controls <br/>主页：<a href="http://www.tntware.com/delphicontrols/unicode/" target="_blank">http://www.tntware.com/delphicontrols/unicode/</a><br/><br/>２１ Fundamentals <br/>主页：<a href="http://fundementals.sourceforge.net/" target="_blank">http://fundementals.sourceforge.net/</a><br/>Delphi Fundamentals是一套综合的Delphi代码模块。包括用于处理Unicode,字符串，日期结构，Socket 组件和数学运算的类库<br/><br/>２２ Pascal Script 3.0 (原ifps III) <br/>主页：<a href="http://www.remobjects.com" target="_blank">http://www.remobjects.com</a><br/><br/>Innerfuse Pascal Script 3 是一款免费的用Delphi编写的脚本引擎，IFPS允许你在程序运行时使用Object Pascal语言，是一套能够编译到exe文件的单元，使用脚本引擎的好处：能够让你的程序让用户的自定义而不需要重新编译，你能够发布升级程序只需要发布脚本文件即可。<br/><br/>品质优秀，即使和商业的脚本引擎相比是有过之而无不及（如fastscript，tms script）曾有人评价说：它是除了delphi以外最强大的，虽然有些夸张，但也从某些方面印证了它的强大！<br/><br/>２３ TDelphiWebScript <br/>主页：<a href="http://www.dwscript.com/" target="_blank">http://www.dwscript.com/</a><br/><br/>TDelphiWebScript(DWS)提供类似Delphi中Pascal语言的Script语言，可用于编写Web服务器端的cgi、 ISAPI、NSAPI应用程序，其包含的TdwsFunc控件能够为DelphiWebScript增添新函数。<br/><br/>DelphiWebScript语言和 PERL相比易读易学，可以象PHP或ASP一样被综合在HTML代码中<br/><br/>２４ turbopower<br/><br/>主页：<a href="http://www.turbopower.com/" target="_blank">http://www.turbopower.com/</a> 曾经最优秀的商业控件，今天的开源产品<br/><br/>Abbrevia：数据压缩控件<br/><br/>Async Professional：最好的通讯控件 Async Professional CLX<br/><br/>B-Tree Filer：看名字就知道是做什么的了<br/><br/>Essentials：漂亮的界面开发控件<br/><br/>FlashFiler：优秀的数据库引擎<br/><br/>Internet Professional： 开发Internet的利器<br/><br/>LockBox：加密控件，支持多种加密算法<br/><br/>OfficePartner：Office自动化的对象的封装<br/><br/>OnGuard： 实现软件的Demo版设置,过期等<br/><br/>Orpheus：完成类似Outlook功能的控件<br/><br/>ShellShock：Windows Shell的功能封装<br/><br/>SysTools：优秀的函数库，甚至包含二维条码控件 SysTools for Kylix<br/><br/>Visual PlanIt：日程,日历控件<br/><br/>XML Partner：这个就不用说了<br/><br/>２５ 推荐了那么多的国外资源，现在来介绍一下国内的精品，看过你就会知道，国内的Delphi人员的开发水平丝毫不比国外逊色！<br/><br/>1.CnPack <br/>主页：<a href="http://www.cnpack.org" target="_blank">http://www.cnpack.org</a> CnPack 组件包是一个涵盖不可视工具组件、界面控件、网络通讯组件、多语言处理等多个方面的 Delphi/C++ Builder 组件包。<br/><br/>2.　CnWizards IDE 专家包是一组集成在 Delphi/C++ Builder 的 IDE 中，用于增强 IDE 功能、提高 IDE 的可用性及开发效率的工具<br/><br/>3.AAFont 平滑特效字体控件包 <a href="http://www.cnpack.org/showdetail.php?id=152&#9001;=zh-cn" target="_blank">http://www.cnpack.org/showdetail.php?id=152&#9001;=zh-cn</a> CnPack 开发组管理员 周劲羽 个人作品。 平滑特效字体控件包是一个基于平滑（Anti-aliasing）和特效（Effect）字体技术的控件包，支持透明、半透明、阴影、模糊、渐变色、字体纹理、噪声、轮廓字等特效。 该控件包为开放源码的免费控件包！<br/><br/>4.应用程序病毒免疫器 <a href="http://www.cnpack.org/showdetail.php?id=151&#9001;=zh-cn" target="_blank">http://www.cnpack.org/showdetail.php?id=151&#9001;=zh-cn</a> CnPack 开发组管理员 与月共舞 个人作品。 用于给可执行文件增加一个病毒免疫头，当文件被非法修改后，允许自动进行文件修复。 该软件为开放源码的自由软件！<br/><br/>5.DockPresident 停靠窗口控件包 <a href="http://www.cnpack.org/showdetail.php?id=153&#9001;=zh-cn" target="_blank">http://www.cnpack.org/showdetail.php?id=153&#9001;=zh-cn</a> CnPack 开发组成员 鲁小班 个人作品。 功能强大的停靠窗口开发控件包，支持多种停靠效果，使用简便.<br/><br/>6.JediEdit 绝地程序编辑器 <a href="http://jediedit.sf.net" target="_blank">http://jediedit.sf.net</a><br/><br/>7.DGL：Delphi版的stl实现 <a href="http://dev.cq118.com/web" target="_blank">http://dev.cq118.com/web</a><br/><br/>8.数学函数动态编译器TCompile类 <a href="http://www.tomore.com/1/2613.html" target="_blank">http://www.tomore.com/1/2613.html</a><br/><br/>２６ EasyGrid 优秀的国产表格控件<br/><br/><a href="http://www.2ccc.com/article.asp?articleid=773" target="_blank">http://www.2ccc.com/article.asp?articleid=773</a><br/><br/>２７ <a href="http://www.freebyte.com/programm" target="_blank">http://www.freebyte.com/programm</a> ... phiunicodelibraries 
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?275</link>
<title><![CDATA[快速地删除一个目录]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Sun, 25 Oct 2009 02:54:31 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?275</guid> 
<description>
<![CDATA[ 
	以往删除目录时，都需要先用递归删干净目录下的文件和子文件夹，这样做的时候，如果文件数量大，那么删除会非常慢，于是找了个方便一点的方法，直接使用API将目录删除。<br/><br/>代码如下：<br/><textarea name="code" class="delphi" rows="15" cols="100">function DelDirectory(const Source: string): boolean;
var
&nbsp;&nbsp;&nbsp;&nbsp;fo: TSHFILEOPSTRUCT;
begin
&nbsp;&nbsp;&nbsp;&nbsp;FillChar(fo, SizeOf(fo), 0);
&nbsp;&nbsp;&nbsp;&nbsp;with fo do
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wnd&nbsp;&nbsp;&nbsp;&nbsp;:= 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wFunc := FO_DELETE;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFrom := PChar(Source + #0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTo&nbsp;&nbsp;&nbsp;&nbsp;:= #0#0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFlags := FOF_NOCONFIRMATION + FOF_SILENT;
&nbsp;&nbsp;&nbsp;&nbsp;end;
&nbsp;&nbsp;&nbsp;&nbsp;Result := (SHFileOperation(fo) = 0);
end;</textarea>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?274</link>
<title><![CDATA[DBGridEH表格区填满表格线的问题[转帖]]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Sat, 24 Oct 2009 13:58:33 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?274</guid> 
<description>
<![CDATA[ 
	这是网络上的一个转帖，本文来源：<a href="http://blog.csdn.net/Rzhghost/archive/2007/05/22/1620235.aspx" target="_blank">http://blog.csdn.net/Rzhghost/archive/2007/05/22/1620235.aspx</a><br/>表格区填满表格线的问题，修改如下(经博主实践，①内容在EHLib 3.6版本，②内容在EHLib 4.1.4和4.2.16版本中均验证通过)：<br/><span style="color: #0000FF;"><strong>①3.6版本中修改DBGridEh.pas单元的UpdateRowCount过程：</strong></span><br/><textarea name="code" class="delphi" rows="15" cols="100">procedure TCustomDBGridEh.UpdateRowCount;
var BetweenRowHeight, t: Integer;
 OldRowCount, OccupiedHeight, VisibleDataRowCount, NewRowCount: Integer;
&nbsp;&nbsp;//。。。。。。。。。。。。。。
begin
&nbsp;&nbsp;//...............................
 with FDataLink do
&nbsp;&nbsp; if not Active or (RecordCount = 0) or not HandleAllocated then
&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp; //.................
&nbsp;&nbsp; end else
&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp; VisibleDataRowCount := (ClientHeight - OccupiedHeight &#123;- LineHeight&#125;) div DefaultLineRowHeight;
&nbsp;&nbsp;&nbsp;&nbsp; if VisibleDataRowCount <= 0 then VisibleDataRowCount := 1;

&nbsp;&nbsp;&nbsp;&nbsp; FDataLink.BufferCount := VisibleDataRowCount;
&nbsp;&nbsp;&nbsp;&nbsp; if FFooterRowCount = 0 then&nbsp;&nbsp;//增加的一个条件，用户可以用FooterRowCount值来决定是否填满表格线
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VisibleDataRowCount := FDataLink.RecordCount;
&nbsp;&nbsp;&nbsp;&nbsp; Inc(OccupiedHeight, DefaultLineRowHeight * VisibleDataRowCount);
&nbsp;&nbsp;&nbsp;&nbsp; NewRowCount := VisibleDataRowCount + TopDataOffset;

&nbsp;&nbsp;&nbsp;&nbsp; if FooterRowCount > 0 then
&nbsp;&nbsp;&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewRowCount := NewRowCount + FooterRowCount + 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(NewRowCount);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BetweenRowHeight := ClientHeight - OccupiedHeight &#123;- LineHeight&#125;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if BetweenRowHeight < 0 then BetweenRowHeight := 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //RowHeights[TopDataOffset + VisibleDataRowCount] := BetweenRowHeight;//原代码行
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowHeights[TopDataOffset + VisibleDataRowCount] := 0;//修改后的代码行
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把多余的不足一行的高度加在最后一行,增加下面一行代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowHeights[FTitleOffset + VisibleDataRowCount] := DefaultRowHeight+BetweenRowHeight;
&nbsp;&nbsp;&nbsp;&nbsp; end else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(NewRowCount);

&nbsp;&nbsp;&nbsp;&nbsp; UpdateActive;
&nbsp;&nbsp; end;
 if OldRowCount <> RowCount then Invalidate;
end;</textarea><br/><br/><span style="color: #0000FF;"><strong>②4.14版本中也是修改DBGridEh.pas单元的UpdateRowCount过程：</strong></span><br/><textarea name="code" class="delphi" rows="15" cols="100">procedure TCustomDBGridEh.UpdateRowCount;
var
 BetweenRowHeight,&#123;恢复被注释掉的变量BetweenRowHeight&#125; t: Integer;
 OldRowCount, OccupiedHeight, VisibleDataRowCount, NewRowCount: Integer;
。。。。。。。。。。。。。
begin
...........................
 with FDataLink do
&nbsp;&nbsp; if not Active or (RecordCount = 0) or not HandleAllocated then
&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp; //MoveColRow(Col, TitleOffset, False, False);

&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(1 + TopDataOffset);
&nbsp;&nbsp;&nbsp;&nbsp; ContraRowCount := FooterRowCount;
&nbsp;&nbsp;&nbsp;&nbsp; //恢复原代码中被注释掉的语句行
&nbsp;&nbsp;&nbsp;&nbsp; (*========================================================================*)
&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(1 + TopDataOffset);
&nbsp;&nbsp;&nbsp;&nbsp; Inc(OccupiedHeight, DefaultLineRowHeight);
&nbsp;&nbsp;&nbsp;&nbsp; if HandleAllocated then
&nbsp;&nbsp;&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (FooterRowCount > 0) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(RowCount + FooterRowCount + 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BetweenRowHeight := ClientHeight - OccupiedHeight &#123;- LineHeight&#125;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if BetweenRowHeight < 0 then BetweenRowHeight := 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowHeights[TopDataOffset + 1] := BetweenRowHeight;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;
&nbsp;&nbsp;&nbsp;&nbsp; end;
&nbsp;&nbsp;&nbsp;&nbsp; (*========================================================================*)
&nbsp;&nbsp; end else
&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp; VisibleDataRowCount := (ClientHeight - OccupiedHeight &#123;- LineHeight&#125;) div DefaultLineRowHeight;
&nbsp;&nbsp;&nbsp;&nbsp; if VisibleDataRowCount <= 0 then VisibleDataRowCount := 1;

&nbsp;&nbsp;&nbsp;&nbsp; FDataLink.BufferCount := VisibleDataRowCount;
&nbsp;&nbsp;&nbsp;&nbsp; if FFooterRowCount = 0 then&nbsp;&nbsp;//增加的一个条件，用户可以用FooterRowCount值来决定是否填满表格线&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VisibleDataRowCount := FDataLink.RecordCount;
&nbsp;&nbsp;&nbsp;&nbsp; Inc(OccupiedHeight, DefaultLineRowHeight * VisibleDataRowCount);
&nbsp;&nbsp;&nbsp;&nbsp; NewRowCount := VisibleDataRowCount + TopDataOffset;

&nbsp;&nbsp;&nbsp;&nbsp; if FooterRowCount > 0 then
&nbsp;&nbsp;&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(NewRowCount);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ContraRowCount := FooterRowCount;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //恢复原代码中注释掉的部分
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*========================================================================*)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NewRowCount := NewRowCount + FooterRowCount + 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(NewRowCount);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BetweenRowHeight := ClientHeight - OccupiedHeight &#123;- LineHeight&#125;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if BetweenRowHeight < 0 then BetweenRowHeight := 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //RowHeights[TopDataOffset + VisibleDataRowCount] := BetweenRowHeight;//这一行仍然不要，改成下面的代码
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*========================================================================*)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowHeights[TopDataOffset + VisibleDataRowCount] := 0;//修改后的代码行
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把多余的不足一行的高度加在最后一行,增加下面一行代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowHeights[FTitleOffset + VisibleDataRowCount] := DefaultRowHeight+BetweenRowHeight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp; end else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetRowCount(NewRowCount);

&nbsp;&nbsp;&nbsp;&nbsp; UpdateActive;
&nbsp;&nbsp; end;
 if OldRowCount <> RowCount then Invalidate;
end;</textarea><br/><br/>Tags - <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=dbgrideh" rel="tag">dbgrideh</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E8%25A1%25A8%25E6%25A0%25BC%25E5%258C%25BA%25E5%25A1%25AB%25E6%25BB%25A1" rel="tag">表格区填满</a>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?273</link>
<title><![CDATA[在Delphi如何实现模拟组合按键，如发送Ctrl_F的按键消息]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Sat, 24 Oct 2009 13:13:15 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?273</guid> 
<description>
<![CDATA[ 
	利用 keybd_event函数可实现，如下面的代码用以实现在一个公共菜单中模拟Ctrl_F按钮以调用DBGridEH的查找对话框功能：<br/>这是在一个ActionList中的某一Action的OnExecute事件代码。<br/><textarea name="code" class="delphi" rows="15" cols="100">procedure TDM.act_LocateExecute(Sender: TObject);
var
&nbsp;&nbsp;myPopupMenu:TPopupMenu;
&nbsp;&nbsp;MyDBGridEH:TDBGridEh;
begin
&nbsp;&nbsp;//ShowMessage(TMenuItem(TAction(Sender).ActionComponent).GetParentComponent.Name);
&nbsp;&nbsp;if (TAction(Sender).ActionComponent).GetParentComponent is TPopupMenu then
&nbsp;&nbsp;&nbsp;&nbsp;myPopupMenu := (TAction(Sender).ActionComponent).GetParentComponent as TPopupMenu
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;Exit;

&nbsp;&nbsp;//ShowMessage(MyPopupMenu.PopupComponent.Name);
&nbsp;&nbsp;if (MyPopupMenu.PopupComponent is TDBGridEh) then
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;MyDBGridEH := TDBGridEh(MyPopupMenu.PopupComponent);
&nbsp;&nbsp;&nbsp;&nbsp;MyDBGridEH.SetFocus;
&nbsp;&nbsp;&nbsp;&nbsp;keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //按下Ctrl键
&nbsp;&nbsp;&nbsp;&nbsp;keybd_event(ord('F'), MapVirtualKey(ord('F'), 0), 0, 0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按下F键
&nbsp;&nbsp;&nbsp;&nbsp;keybd_event(ord('F'), MapVirtualKey(ord('F'), 0), KEYEVENTF_KEYUP, 0);&nbsp;&nbsp;&nbsp;&nbsp;//放开F键
&nbsp;&nbsp;&nbsp;&nbsp;keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); //放开Ctrl键
&nbsp;&nbsp;end;
end;</textarea><br/><br/>Tags - <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=keybd_event" rel="tag">keybd event</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=dbgrideh" rel="tag">dbgrideh</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=ctrl_f" rel="tag">ctrl f</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E6%259F%25A5%25E6%2589%25BE" rel="tag">查找</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E7%25BB%2584%25E5%2590%2588%25E9%2594%25AE" rel="tag">组合键</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E6%25B6%2588%25E6%2581%25AF" rel="tag">消息</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E6%258C%2589%25E9%2594%25AE" rel="tag">按键</a>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?271</link>
<title><![CDATA[DBGridEH点击标题自动排序的设定及排序标志相反BUG的修正]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Sat, 24 Oct 2009 03:17:18 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?271</guid> 
<description>
<![CDATA[ 
	<span style="color: #0000FF;"><strong>一、DBGridEH点击标题自动排序的设定</strong></span><br/>①按DataSet源类型的不同，在工程中引用EhLib相应排序单元文件，如uses EhLibAdo，uses EhLibCDS，uses EhLibBDE、uses EhLibDBX等，我一般都会在一个公共文件中进行引用，这样就无须在所有用到DBGridEH的单元中都城加入引用语句了，如在DataModule之类的公共窗体中uses EhLibXXX;一次就行了。<br/>②设置DBGridEH的OptionsEH.dghAutoSortMarking := True;如果希望多列排序还可设置OptionsEH.dghMultiSortMarking := True;<br/><a href="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=48" target="_blank"><img src="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=48" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>③如果你的DataSet源是TClientDataSet，且只想对已下载到本地的数据进行排序的话，则请设置DBGridEH的SortLocal := True;<br/><a href="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=49" target="_blank"><img src="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=49" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>④设置DBGridEH中所有希望进行排序的列标题的按钮属性为True，即Columns[i].Title.TitleButton := True;字段类型为LookUp类型或计算字段不能排序，故这类字段 列的TitleButton应设置为False，否则点击标题进行排序时会发生异常。<br/><a href="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=50" target="_blank"><img src="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=50" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>至此，点击DBGridEH标题就可以自动排序了，多列排序需按下Ctrl键。<br/>但是有一个小 BUG（我使用的是EhLibCDS），那就是标题列上的排序图标和排序结果不相符，当升序排列时出现的不是向上的箭头，而是向下的箭头，降序则相反。这应该是EhLib中的设置标题重画方法时赋反了一个逻辑标志值。如何修正它呢？<br/><span style="color: #0000FF;"><strong>二、排序标志相反BUG的修正</strong></span><br/>方法一、最佳方法，找到问题源，修正它！可惜，我没找到。<br/>方法二、修改DBGridEH.res，把两个bmp图标文件对换一下，有点麻烦。<br/>方法三、大致翻阅一下DBGridEH源码，发现排序图标文件标志是由两个常量定义的，<br/>const <br/>...<br/>&nbsp;&nbsp;bmSmDown = 'DBSMDOWNEH';&nbsp;&nbsp;<br/>&nbsp;&nbsp;bmSmUp = 'DBSMUPEH'; <br/>...<br/>这就好办了，在此对换一下，又安全又快捷<br/>&nbsp;&nbsp;//bmSmDown = 'DBSMDOWNEH';&nbsp;&nbsp;//这是原始内容<br/>&nbsp;&nbsp;//bmSmUp = 'DBSMUPEH';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这是原始内容<br/>&nbsp;&nbsp;bmSmDown = 'DBSMUPEH';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Modified by 小宇飞刀 2009-10-24 10:31:26<br/>&nbsp;&nbsp;bmSmUp = 'DBSMDOWNEH';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Modified by 小宇飞刀 2009-10-24 10:31:26<br/><br/>至此，一切OK！<br/><a href="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=47" target="_blank"><img src="http://vir.jxstnu.edu.cn/xieyunc/attachment.php?fid=47" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a>&nbsp;&nbsp;<br/>Tags - <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=dbgrideh" rel="tag">dbgrideh</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E8%2587%25AA%25E5%258A%25A8%25E6%258E%2592%25E5%25BA%258F" rel="tag">自动排序</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E5%259B%25BE%25E6%25A0%2587" rel="tag">图标</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=bug" rel="tag">bug</a>
]]>
</description>
</item><item>
<link>http://vir.jxstnu.edu.cn/xieyunc/read.php?270</link>
<title><![CDATA[使用Web Service 下载档案时如何显示进度条]]></title> 
<author>xieyunc &lt;xieyunc@jxstnu.cn&gt;</author>
<category><![CDATA[Delphi]]></category>
<pubDate>Wed, 23 Sep 2009 11:48:19 +0000</pubDate> 
<guid>http://vir.jxstnu.edu.cn/xieyunc/read.php?270</guid> 
<description>
<![CDATA[ 
	<br/>可使用HTTPRIO.HTTPWebNode.OnPostingData 与 OnReceivingData 两个事件。<br/><textarea name="code" class="delphi" rows="15" cols="100">procedure TForm1.HTTPRIO1HTTPWebNode1PostingData(Sent, Total: Integer);
begin
&nbsp;&nbsp;Gauge1.MinValue:=0;
&nbsp;&nbsp;Gauge1.MaxValue:=Total;
&nbsp;&nbsp;Gauge1.Progress:=Sent;
&nbsp;&nbsp;Refresh;;
end;

procedure TForm1.HTTPRIO1HTTPWebNode1ReceivingData(Read, Total: Integer);
begin
&nbsp;&nbsp;Gauge2.MinValue:=0;
&nbsp;&nbsp;Gauge2.MaxValue:=Total;
&nbsp;&nbsp;Gauge2.Progress:=Read;
&nbsp;&nbsp;Refresh;;
end;
</textarea><br/>默认是32K为一个单位<br/>Tags - <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=web" rel="tag">web</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=service" rel="tag">service</a> , <a href="http://vir.jxstnu.edu.cn/xieyunc/tag.php?tag=%25E8%25BF%259B%25E5%25BA%25A6%25E6%259D%25A1" rel="tag">进度条</a>
]]>
</description>
</item>
</channel>
</rss>