﻿<?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>BlogJava-bob-文章分类-delphi</title><link>http://www.blogjava.net/keweibo/category/43927.html</link><description>一专  Java 多能  Delphi,Powerbuilder ... </description><language>zh-cn</language><lastBuildDate>Sat, 07 Apr 2012 01:54:46 GMT</lastBuildDate><pubDate>Sat, 07 Apr 2012 01:54:46 GMT</pubDate><ttl>60</ttl><item><title>VCLSkin第三方包</title><link>http://www.blogjava.net/keweibo/articles/373511.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 07 Apr 2012 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/373511.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/373511.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/373511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/373511.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/373511.html</trackback:ping><description><![CDATA[<pre mb10"="" id="content-449425283" style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; line-height: 24px; background-color: #ffffff; ">按照如下步骤安装：  <br />1、对于单个控件，Componet--&gt;install component..--&gt;PAS或DCU文件--&gt;install；  <br />2、对于带*.dpk文件的控件包，File--&gt;Open(下拉列表框中选*.dpk)--&gt;install即可；  <br />3、对于带*.bpl文件的控件包，Install Packages--&gt;Add--&gt;bpl文件名即可；  <br />4、如果以上Install按钮为失效的话，试试Compile按钮； <br />5、是run time lib则在option下的packages下的runtimepackes加之。  <br />如果编译时提示文件找不到的话，一般是控件的安装目录不在Delphi的Lib目录中，<br />有两种方法可以解决：  <br />1、反安装的源文件拷入到Delphi的Lib目录下； <br />2、或者Tools--&gt;Environment Options中把控件源代码路径加入到Delphi的Lib目录中即可。  注意：所安装的控件是否与你所用的Delphi版本相适应。 </pre><div mt10=""  gray"="" style="margin-top: 10px; word-wrap: break-word; color: #666666; font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="white-space: nowrap; ">参考资料：</span><a href="http://zhidao.baidu.com/question/54630211.html?fr=ala0" target="_blank" style="text-decoration: none; vertical-align: baseline; color: #133db6; ">http://zhidao.baidu.com/question/54630211.html?fr=ala0</a></div><img src ="http://www.blogjava.net/keweibo/aggbug/373511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-04-07 09:17 <a href="http://www.blogjava.net/keweibo/articles/373511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi遍历文件夹及子文件夹</title><link>http://www.blogjava.net/keweibo/articles/321353.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 19 May 2010 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/321353.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/321353.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/321353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/321353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/321353.html</trackback:ping><description><![CDATA[<div class="articalContent" id="sina_keyword_ad_area2">
<h3><span class="style2"><font size="4">copy:http://www.jackfeng.com/archives/276/</font></span></h3>
<p>
{-------------------------------------------------------------------------------<br />
过程名:&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
MakeFileList 遍历文件夹及子文件夹<br />
作者:&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
SWGWEB<br />
日期:&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
2007.11.25<br />
参数:&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Path,FileExt:string&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
1.需要遍历的目录 2.要遍历的文件扩展名<br />
返回值:&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
TStringList</p>
<p>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Eg：ListBox1.Items:= MakeFileList( 'E:\极品飞车','.exe') ;<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
ListBox1.Items:= MakeFileList( 'E:\极品飞车','.*') ;<br />
-------------------------------------------------------------------------------}<br />
function MakeFileList(Path,FileExt:string):TStringList ;<br />
var<br />
sch:TSearchrec;<br />
begin<br />
Result:=TStringlist.Create;</p>
<p>if rightStr(trim(Path), 1) &lt;&gt; '\'
then<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Path := trim(Path) + '\'<br />
else<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Path := trim(Path);</p>
<p>if not DirectoryExists(Path) then<br />
begin<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Result.Clear;<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
exit;<br />
end;</p>
<p>if FindFirst(Path + '*', faAnyfile, sch) = 0 then<br />
begin<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
repeat<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Application.ProcessMessages;<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
if ((sch.Name = '.') or (sch.Name = '..')) then Continue;<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
if DirectoryExists(Path+sch.Name) then<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
begin<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Result.AddStrings(MakeFileList(Path+sch.Name,FileExt));<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
end<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
else<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
begin<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
if (UpperCase(extractfileext(Path+sch.Name)) = UpperCase(FileExt))
or (FileExt='.*') then<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
Result.Add(Path+sch.Name);<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
end;<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
until FindNext(sch) &lt;&gt; 0;<br />
&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>&nbsp;<wbr><wbr>
SysUtils.FindClose(sch);<br />
end;<br />
end;</p>
<p>------------------------------------------------------------------------------------------------------------------------------------</p>
<p>字符截取函数LeftStr, MidStr, RightStr<br />
这几个函数都包含在StrUtils中，所以需要uses StrUtils;<br />
假设字符串是 Dstr := &#8217;Delphi is the BEST&#8217;, 那么<br />
LeftStr(Dstr, 5) := &#8217;Delph&#8217;<br />
MidStr(Dstr, 6, 7) := &#8217;i is th&#8217;<br />
RightStr(Dstr, 6) := &#8217;e BEST&#8217;<br />
<br />
~~~~~~~~~~~~~~~~~~~~~~~~~<br />
function RightStr<br />
&nbsp;&nbsp;&nbsp; (Const Str: String; Size: Word): String;<br />
begin<br />
&nbsp; if Size &gt; Length(Str) then Size := Length(Str) ;<br />
&nbsp; RightStr := Copy(Str, Length(Str)-Size+1, Size)<br />
end;<br />
function MidStr<br />
&nbsp;&nbsp;&nbsp; (Const Str: String; From, Size: Word): String;<br />
begin<br />
&nbsp; MidStr := Copy(Str, From, Size)<br />
end;<br />
function LeftStr<br />
&nbsp;&nbsp;&nbsp; (Const Str: String; Size: Word): String;<br />
begin<br />
&nbsp; LeftStr := Copy(Str, 1, Size)<br />
end;<br />
<br />
这几个函数经常结合Pos, Length, Copy使用<br />
</p>
<p><br />
</p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/321353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-05-19 11:48 <a href="http://www.blogjava.net/keweibo/articles/321353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为TListBox组件添加水平滚动条</title><link>http://www.blogjava.net/keweibo/articles/321352.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 19 May 2010 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/321352.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/321352.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/321352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/321352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/321352.html</trackback:ping><description><![CDATA[<div id="Zoom">
<span lang="EN-US"><font face="Times New Roman">Delphi</font></span><span style="font-family: 宋体;">的</span><span lang="EN-US"><font face="Times
New Roman">TListBox</font></span><span style="font-family: 宋体;">组件会自动添加一
个垂直滚动条，即当列表框的高度容纳不下所有的列表条目时，垂直滚动条就自动显示。但是，当条目的宽度大于列表框的宽度时，水平滚动条不会自动显示。当然</span><span lang="EN-US"><font face="Times New Roman">, </font></span><span style="font-family: 宋体;">可以在列表框中加如水平滚动条，方法是在窗体的</span><span lang="EN-US"><font face="Times New Roman">OnCreate</font></span><span style="font-family: 宋体;">事件处理程序中加入如下代码：</span>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman">procedure TForm1.FormCreate(Sender: TObject);</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman">var</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman"><span>&nbsp; </span>i, MaxWidth: integer;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman">begin</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman"><span>&nbsp; </span>MaxWidth := 0;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman"><span>&nbsp; </span>for i := 0 to
ListBox1.Items.Count - 1 do</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman"><span>&nbsp; </span>if MaxWidth &lt;
ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[i]) then</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp; </span>MaxWidth :=
ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[i]);</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman"><span>&nbsp; </span>SendMessage(ListBox1.Handle,
LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><font face="Times New Roman">end;</font></span></p>
<span style="font-size: 10.5pt; font-family: 宋体;">这段代码先查找列表框中最长的条目的宽度（以象素点表示），然后</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';" lang="EN-US">,
</span><span style="font-size: 10.5pt; font-family: 宋体;">用</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';" lang="EN-US">LB_SETHORIZONTALEXTENT</span><span style="font-size: 10.5pt; font-family: 宋体;">消息来设置列表框的水平滚动条的宽度（以象素点表示），外
加两个额外的象素。</span><br />
<p align="right">（出处：http://www2.delphifans.com/blog
/more.asp?name=caixiaoming&amp;id=392）</p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/321352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-05-19 11:45 <a href="http://www.blogjava.net/keweibo/articles/321352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi中Format与FormatDateTime函数详解</title><link>http://www.blogjava.net/keweibo/articles/321328.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 19 May 2010 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/321328.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/321328.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/321328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/321328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/321328.html</trackback:ping><description><![CDATA[<div>
<p><font size="2">copy:http://hi.baidu.com/yunfanleo/blog/item/0c51d9cdbc0531550eb34558.html<br />
</font></p>
<p><font size="2">Format是一个很常用，却又似乎很烦的方法，本人试图对这个方法的帮助进行一些翻译，让它有一个完整的概貌，以
供大家查询之用：</font></p>
<p><font size="2">首先看它的声明：<br />
function Format(const Format: string; const Args: array of const):
string; overload;</font></p>
<p><font size="2">事实上Format方法有两个种形式，另外一种是三个参数的，主要区别在于它是线程安全的，<br />
但并不多用，所以这里只对第一个介绍：<br />
function Format(const Format: string; const Args: array of const):
string; overload;<br />
<br />
Format参数是一个格式字符串，用于格式化Args里面的值的。Args又是什么呢，<br />
它是一个变体数组，即它里面可以有多个参数，而且每个参数可以不同。<br />
如以下例子：</font></p>
<p><font size="2">Format('my name is %6s',['wind']);<br />
返回后就是my name is wind</font></p>
<p><font size="2">现在来看Format参数的详细情况：<br />
Format里面可以写普通的字符串，比如'my name is',但有些格式指令字符具有特殊意义，比如"%6s"格式指令具有以下的形式：<br />
"%" [index ":"] ["-"] [width] ["." prec] type<br />
它是以"%"开始,而以type结束，type表示一个具体的类型。中间是用来<br />
格式化type类型的指令字符，是可选的。</font></p>
<p><font size="2">先来看看type,type可以是以下字符：<br />
d 十制数，表示一个整型值<br />
u 和d一样是整型值，但它是无符号的，而如果它对应的值是负的，则返回时是一个2的32次方减去这个绝对值的数,如：<br />
Format('this is %u',[－2]);<br />
返回的是：this is 4294967294</font></p>
<p><font size="2">f 对应浮点数<br />
e 科学表示法，对应整型数和浮点数，比如<br />
Format('this is %e',[-2.22]);<br />
返回的是：this is -2.22000000000000E+000,等一下再说明如果将数的精度缩小</font></p>
<p><font size="2">g 这个只能对应浮点型，且它会将值中多余的数去掉,比如<br />
Format('this is %g',[02.200]);<br />
返回的是：this is 2.2</font></p>
<p><font size="2">n 只能对应浮点型，将值转化为号码的形式。看一个例子就明白了<br />
Format('this is %n',[4552.2176]);<br />
返回的是this is 4,552.22</font></p>
<p><font size="2">  注意有两点，一是只表示到小数后两位，等一下说怎么消除这种情况,
二是，即使小数没有被截断，它也不会也像整数部分一样有逗号来分开的</font></p>
<p><font size="2">m钱币类型，但关于货币类型有更好的格式化方法，这里只是简单的格式化,另外它只对应于浮点值<br />
Format('this is %m',[9552.21]);<br />
返回：this is ￥9,552.21</font></p>
<p><font size="2">p 对应于指针类型，返回的值是指针的地址，以十六进制的形式来表示<br />
例如：<br />
var X:integer;<br />
p:^integer;<br />
begin<br />
X:=99;<br />
p:=@X;<br />
Edit1.Text:=Format('this is %p',[p]);<br />
end;<br />
Edit1的内容是：this is 0012F548</font></p>
<p><font size="2">s 对应字符串类型，不用多说了吧<br />
x 必须是一个整形值，以十六进制的形式返回<br />
Edit1.Text:=Format('this is %X',[15]);<br />
返回是：this is F</font></p>
<p><font size="2">类型讲述完毕，下面介绍格式化Type的指令：<br />
[index ":"]这个要怎么表达呢，看一个例子<br />
Format('this is %d %d',[12,13]);<br />
其中第一个%d的索引是0，第二个%d是1，所以字符显示的时候是这样 this is 12 13</font></p>
<p><font size="2">而如果你这样定义：<br />
Format('this is %1:d %0:d',[12,13]);<br />
那么返回的字符串就变成了this is 13 12。现在明白了吗，[index ":"]
中的index指示Args中参数显示的顺序还有一种情况，如果这样<br />
Format('%d %d %d %0:d %d', [1, 2, 3, 4])<br />
将返回1 2 3 1 2。</font></p>
<p><font size="2">如果你想返回的是1 2 3 1 4，必须这样定：<br />
Format('%d %d %d %0:d %3:d', [1, 2, 3, 4])</font></p>
<p><font size="2">但用的时候要注意，索引不能超出Args中的个数，不然会引起异常如<br />
Format('this is %2:d %0:d',[12,13]);<br />
由于Args中只有12 13 两个数，所以Index只能是0或1，这里为2就错了[width] 指定将被格式化的值占的宽度，看一个例子就明白了</font></p>
<p><font size="2">Format('this is %4d',[12]);<br />
输出是：this is&nbsp;&nbsp;  12,这个是比较容易，不过如果Width的值小于参数的长度，则没有效果。<br />
如：</font></p>
<p><font size="2">Format('this is %1d',[12]);<br />
输出是：this is 12</font></p>
<p><font size="2">["-"]这个指定参数向左齐，和[width]合在一起最可以看到效果：<br />
Format('this is %-4d,yes',[12]);<br />
输出是：this is 12&nbsp;&nbsp;  ,yes</font></p>
<p><font size="2">["." prec] 指定精度，对于浮点数效果最佳：<br />
Format('this is %.2f',['1.1234]);<br />
输出 this is 1.12<br />
Format('this is %.7f',['1.1234]);<br />
输出了 this is 1.1234000</font></p>
<p><font size="2">而对于整型数，如果prec比如整型的位数小，则没有效果反之比整形值的位数大，则会在整型值的前面以0补之<br />
Format('this is %.7d',[1234]);<br />
输出是：this is 0001234]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
对于字符型，刚好和整型值相反，如果prec比字符串型的长度大则没有效果，反之比字符串型的长度小，则会截断尾部的字符<br />
Format('this is %.2s',['1234']);<br />
输出是 this is 12,而上面说的这个例子：</font></p>
<p><font size="2">Format('this is %e',[-2.22]);<br />
返回的是：this is -2.22000000000000E+000,怎么去掉多余的0呢，这个就行啦</font></p>
<p><font size="2">Format('this is %.2e',[-2.22]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
好了，第一个总算讲完了，应该对他的应用很熟悉了吧</font></p>
<p><font size="2">///////////////////////////////////////////////////////////////<br />
二 FormatDateTime的用法<br />
他的声明为：</font></p>
<p><font size="2">function FormatDateTime(const Format: string;
DateTime: TDateTime): string;<br />
overload;</font></p>
<p><font size="2">当然和Format一样还有一种，但这里只介绍常用的第一种,Format参数是一个格式化字符串。
DateTime是时间类型。返回值是一种格式化后的字符串,重点来看Format参数中的指令字符</font></p>
<p><font size="2">c 以短时间格式显示时间，即全部是数字的表示<br />
FormatdateTime('c',now);<br />
输出为：2004-8-7 9:55:40</font></p>
<p><font size="2">d 对应于时间中的日期，日期是一位则显示一位，两位则显示两位<br />
FormatdateTime('d',now);<br />
输出可能为1～31</font></p>
<p><font size="2">dd 和d的意义一样，但它始终是以两位来显示的<br />
FormatdateTime('dd',now);<br />
输出可能为01～31</font></p>
<p><font size="2">ddd 显示的是星期几<br />
FormatdateTime('ddd',now);<br />
输出为: 星期六</font></p>
<p><font size="2">dddd 和ddd显示的是一样的。但上面两个如果在其他国家可能不一样。ddddd 以短时间格式显示年月日<br />
FormatdateTime('ddddd',now);<br />
输出为：2004-8-7</font></p>
<p><font size="2">dddddd 以长时间格式显示年月日<br />
FormatdateTime('dddddd',now);<br />
输出为：2004年8月7日</font></p>
<p><font size="2">e/ee/eee/eeee 以相应的位数显示年<br />
FormatdateTime('ee',now);<br />
输出为：04  （表示04年）</font></p>
<p><font size="2">m/mm/mmm/mmmm 表示月<br />
FormatdateTime('m',now);<br />
输出为：8<br />
FormatdateTime('mm',now);<br />
输出为  08<br />
FormatdateTime('mmm',now);<br />
输出为  八月<br />
FormatdateTime('mmmm',now);<br />
输出为  八月</font></p>
<p><font size="2"> 和ddd/dddd 一样，在其他国家可能不同yy/yyyy 表示年<br />
FormatdateTime('yy',now);<br />
输出为 04<br />
FormatdateTime('yyyy',now);<br />
输出为 2004,</font></p>
<p><font size="2">h/hh,n/nn,s/ss,z/zzz 分别表示小时，分，秒,毫秒</font></p>
<p><font size="2">t  以短时间格式显示时间<br />
FormatdateTime('t',now);<br />
输出为 10:17</font></p>
<p><font size="2">tt 以长时间格式显示时间<br />
FormatdateTime('tt',now);<br />
输出为10:18:46</font></p>
<p><font size="2">ampm 以长时间格式显示上午还是下午<br />
FormatdateTime('ttampm',now);<br />
输出为：10:22:57上午</font></p>
<p><font size="2">大概如此，如果要在Format中加普通的字符串，可以用双引号隔开那些特定义的字符，这样普通字符串中如果含特殊
的字符就不会被显示为时间格式啦：<br />
FormatdateTime('"today is" c',now);<br />
输出为：today is 2004-8-7 10:26:58</font></p>
<p><font size="2">时间中也可以加"-"或"\"来分开日期：<br />
FormatdateTime('"today is" yy-mm-dd',now);<br />
FormatdateTime('"today is" yy\mm\dd',now);<br />
输出为： today is 04-08-07</font></p>
<p><font size="2">也可以用":"来分开时间 <br />
FormatdateTime('"today is" hh:nn:ss',now);<br />
输出为：today is 10:32:23</font></p>
<p><font size="2">/////////////////////////////////////////////////////////////////<br />
三.FormatFloat的用法</font></p>
<p><font size="2">常用的声明：<br />
function FormatFloat(const Format: string; Value: Extended): string;
overload;</font></p>
<p><font size="2">和上面一样Format参数为格式化指令字符，Value为Extended类型为什么是这个类型，因为它是所有浮
点值中表示范围最大的，如果传入该方法的参数比如Double或者其他，则可以保存不会超出范围。</font></p>
<p><font size="2">关键是看Format参数的用法<br />
0  这个指定相应的位数的指令。<br />
&nbsp;&nbsp;  比如：<br />
FormatFloat('000.000',22.22);<br />
输出的就是022.220<br />
<br />
注意一点，如果整数部分的0的个数小于Value参数中整数的位数，则没有效果如：<br />
FormatFloat('0.00',22.22);<br />
输出的是：22.22</font></p>
<p><font size="2">但如果小数部分的0小于Value中小数的倍数，则会截去相应的小数和位数如：<br />
FormatFloat('0.0',22.22);<br />
输出的是：22.2<br />
&nbsp;&nbsp;<br />
也可以在整数0中指定逗号，这个整数位数必须大于3个，才会有逗号出句<br />
FormatFloat('0,000.0',2222.22);<br />
输出是：2,222.2</font></p>
<p><font size="2">如果这样<br />
FormatFloat('000,0.0',2222.22);<br />
它的输出还是：2,222.2</font></p>
<p><font size="2">注意它的规律,#和0的用法一样，目前我还没有测出有什么不同。</font></p>
<p><font size="2">FormatFloat('##.##',22.22);<br />
输出是：22.00</font></p>
<p><font size="2">E  科学表示法，看几个例子大概就明白了<br />
FormatFloat('0.00E+00',2222.22);<br />
输出是 2.22E+03<br />
FormatFloat('0000.00E+00',2222.22);<br />
输出是 2222.22E+00<br />
FormatFloat('00.0E+0',2222.22);<br />
22.2E+2<br />
明白了吗，全靠E右边的0来支配的。<br />
&nbsp;&nbsp;<br />
这个方法并不难，大概就是这样子了。</font></p>
<p><font size="2">上面三个方法是很常用的，没有什么技巧，只要记得这些规范就行了。</font></p>
<p><font size="2">总结一下Format的用法:</font></p>
<p><font size="2">Format('x=%d',[12]);//'x=12'//最普通<br />
Format('x=%3d',[12]);//'x=12'//指定宽度<br />
Format('x=%f',[12.0]);//'x=12.00'//浮点数<br />
Format('x=%.3f',[12.0]);//'x=12.000'//指定小数<br />
Format('x=%8.2f'[12.0])//'x=12.00';<br />
Format('x=%.*f',[5,12.0]);//'x=12.00000'//动态配置<br />
Format('x=%.5d',[12]);//'x=00012'//前面补充0<br />
Format('x=%.5x',[12]);//'x=0000C'//十六进制<br />
Format('x=%1:d%0:d',[12,13]);//'x=1312'//使用索引<br />
Format('x=%p',[nil]);//'x=00000000'//指针<br />
Format('x=%1.1e',[12.0]);//'x=1.2E+001'//科学记数法<br />
Format('x=%%',[]);//'x=%'//得到"%"<br />
S:=Format('%s%d',[S,I]);//S:=S+StrToInt(I);//连接字符串</font></p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/321328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-05-19 10:08 <a href="http://www.blogjava.net/keweibo/articles/321328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi+Codesoft 7.0 </title><link>http://www.blogjava.net/keweibo/articles/320939.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 14 May 2010 00:12:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/320939.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/320939.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/320939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/320939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/320939.html</trackback:ping><description><![CDATA[<div>轉:http://download.csdn.net/source/876883<br />
<br />
Delphi+Codesoft 7.0
调用条码格式文件打印<br />
<br />
<br />
procedure
TFormMain.btnPrintClick(Sender: TObject);<br />
Var<br />
s: string;<br />
i :
Integer;<br />
BarApp,BarDoc,BarVars:Variant; // OLE 变量 <br />
Begin<br />
if not
FileExists(edtBClabelName.Text) then<br />
begin<br />
stat.Panels[2].Text := 'The
Barcode Document is not Exists.';<br />
ShowMessage('The Barcode Document is not
Exists.');<br />
Exit;<br />
btnOpen.SetFocus;<br />
end; <br />
<br />
BarApp :=
CreateOleObject('lppx.Application');<br />
//arApp.Visible:=True;<br />
BarApp.Visible:=False;<br />
<br />
BarDoc:=BarApp.ActiveDocument;<br />
BarVars:=BarDoc.Variables;
<br />
BarDoc.Open(edtBClabelName.Text);<br />
<br />
// 变量赋值<br />
if chkParam.Checked
then<br />
begin<br />
BarDoc.Variables.Item('var1').Value:=
edtPN.Text;<br />
BarDoc.Variables.Item('var2').Value:=
edtPartName.Text;<br />
BarDoc.Variables.Item('var3').Value:=
edtDesc.Text;<br />
end;<br />
<br />
// 打印标签<br />
Bardoc.Printlabel(seqty.Value);<br />
//
Feed<br />
BarDoc.FormFeed;<br />
// 关闭<br />
Bardoc.Close;<br />
BarApp.Quit;<br />
End;<br />
<br />
<strong>如果报Undeclare identified 'CreateOleObject' 错误， 则引入ComObj 即可</strong><br />
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/320939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-05-14 08:12 <a href="http://www.blogjava.net/keweibo/articles/320939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ODAC的安装和使用(odac570src_0.28)</title><link>http://www.blogjava.net/keweibo/articles/320231.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 06 May 2010 12:10:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/320231.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/320231.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/320231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/320231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/320231.html</trackback:ping><description><![CDATA[<font color="#ff00ff"><strong>ODAC的安装和使用</strong></font>
<p><font color="#ff00ff"><strong></strong></font><font color="black"> 我下载的ODAC版本是ODAC_5.70.0.28，下載地址:http://www.delphifans.com/SoftView/SoftView_2131.html</font></p>
<p><font color="black">我的Delphi是7.0</font></p>
<p>&nbsp;&nbsp; 第一步：在odac570src_0.28\Source\Delphi7打开<font color="#0000ff">dac70.dpk,然后编译</font>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;第二步：打开<font color="#0000ff">dacvcl70.dpk</font>，然后编译</p>
<p>&nbsp;&nbsp; 第三步：打开<font color="#0000ff">dcldac70.dpk</font>，然后编译</p>
<p>&nbsp;&nbsp; 第四步：打开<font color="#0000ff">odac70.dpk</font>，然后编译</p>
<p>&nbsp;&nbsp; 第五步：打开<font color="#0000ff">odacvcl70.dpk</font>，然后编译（如果你想要创建CLX应用程序的话，那么就要单独编译&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OdacClx.pas）&nbsp;</p>
<p>&nbsp;&nbsp; 第六步：打开<font color="#0000ff">dclodac70.dpk</font>，然后编译，然后点击&#8220;安装&#8221;。
</p>
<p>在使用或编译时也会出现这个错误，&nbsp;&nbsp;解决方法把{$I <strong style="color: black; background-color: #ffff66;">_TrialIntfOld.inc</strong>}注释掉就OK了</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/320231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-05-06 20:10 <a href="http://www.blogjava.net/keweibo/articles/320231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi中关于文件、目录操作的函数 </title><link>http://www.blogjava.net/keweibo/articles/313896.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 25 Feb 2010 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/313896.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/313896.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/313896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/313896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/313896.html</trackback:ping><description><![CDATA[<pre id="prestr">Delphi中关于文件、目录操作的函数 <br />
<br />
<br />
<br />
来源：大富翁 <br />
<br />
<br />
<br />
关于文件、目录操作 <br />
<br />
<br />
<br />
Chdir('c:\abcdir');   // 转到目录<br />
<br />
Mkdir('dirname');     //建立目录<br />
<br />
DirectoryExists('dirname') //判斷目錄是否存在<br />
<br />
Rmdir('dirname');     //删除目录(目錄不存在會報異常)<br />
<br />
GetCurrentDir;        //取当前目录名，无'\'<br />
<br />
Getdir(0,s);          //取工作目录名s:='c:\abcdir';<br />
<br />
Deletfile('abc.txt'); //删除文件<br />
<br />
Renamefile('old.txt','new.txt');         //文件更名<br />
<br />
ExtractFilename(filelistbox1.filename);  //取文件名<br />
<br />
ExtractFileExt(filelistbox1.filename);   //取文件后缀 <br />
<br />
<br />
<br />
<br />
<br />
目录处理函数三则:DelTree,XCopy,Move<br />
<br />
<br />
<br />
private<br />
<br />
{ Private declarations }<br />
<br />
procedure _XCopy(ASourceDir:String; ADestDir:String);<br />
<br />
procedure _Move(ASourceDir:String; ADestDir:String);<br />
<br />
procedure _DelTree(ASourceDir:String);<br />
<br />
<br />
<br />
//----------------------------------------------------------<br />
<br />
procedure TForm1._XCopy(ASourceDir:String; ADestDir:String);<br />
<br />
var<br />
<br />
FileRec:TSearchrec;<br />
<br />
Sour:String;<br />
<br />
Dest:String;<br />
<br />
begin<br />
<br />
Sour:=ASourceDir;<br />
<br />
Dest:=ADestDir;<br />
<br />
<br />
<br />
if Sour[Length(Sour)]&lt;&gt;'\' then Sour := Sour + '\';<br />
<br />
if Dest[Length(Dest)]&lt;&gt;'\' then Dest := Dest + '\';<br />
<br />
<br />
<br />
if not DirectoryExists(ASourceDir) then<br />
<br />
begin<br />
<br />
ShowMessage('来源目录不存在!!');<br />
<br />
exit;<br />
<br />
end;<br />
<br />
<br />
<br />
if not DirectoryExists(ADestDir) then<br />
<br />
begin<br />
<br />
ForceDirectories(ADestDir);<br />
<br />
end;<br />
<br />
<br />
<br />
if FindFirst(Sour+'*.*',faAnyfile,FileRec) = 0 then<br />
<br />
repeat<br />
<br />
if ((FileRec.Attr and faDirectory) &lt;&gt; 0) then<br />
<br />
begin<br />
<br />
if (FileRec.Name&lt;&gt;'.') and (FileRec.Name&lt;&gt;'..') then<br />
<br />
begin<br />
<br />
_XCopy(Sour+FileRec.Name,Dest+FileRec.Name);<br />
<br />
end;<br />
<br />
end<br />
<br />
else<br />
<br />
begin<br />
<br />
CopyFile(PChar(Sour+FileRec.Name),PChar(Dest+FileRec.Name),false);<br />
<br />
end;<br />
<br />
until FindNext(FileRec)&lt;&gt;0;<br />
<br />
<br />
<br />
FindClose(FileRec);<br />
<br />
<br />
<br />
end;<br />
<br />
//------------------------------------------------------------------<br />
<br />
procedure TForm1._Move(ASourceDir:String; ADestDir:String);<br />
<br />
var<br />
<br />
FileRec:TSearchrec;<br />
<br />
Sour:String;<br />
<br />
Dest:String;<br />
<br />
begin<br />
<br />
Sour:=ASourceDir;<br />
<br />
Dest:=ADestDir;<br />
<br />
<br />
<br />
if Sour[Length(Sour)]&lt;&gt;'\' then Sour := Sour + '\';<br />
<br />
if Dest[Length(Dest)]&lt;&gt;'\' then Dest := Dest + '\';<br />
<br />
<br />
<br />
if not DirectoryExists(ASourceDir) then<br />
<br />
begin<br />
<br />
ShowMessage('来源目录不存在!!');<br />
<br />
exit;<br />
<br />
end;<br />
<br />
<br />
<br />
if not DirectoryExists(ADestDir) then<br />
<br />
begin<br />
<br />
ForceDirectories(ADestDir);<br />
<br />
end;<br />
<br />
<br />
<br />
if FindFirst(Sour+'*.*',faAnyfile,FileRec) = 0 then<br />
<br />
repeat<br />
<br />
if ((FileRec.Attr and faDirectory) &lt;&gt; 0) then<br />
<br />
begin<br />
<br />
if (FileRec.Name&lt;&gt;'.') and (FileRec.Name&lt;&gt;'..') then<br />
<br />
begin<br />
<br />
_XCopy(Sour+FileRec.Name,Dest+FileRec.Name);<br />
<br />
<br />
<br />
_DelTree(Sour+FileRec.Name);<br />
<br />
<br />
<br />
FileSetAttr(Sour+FileRec.Name,faArchive);<br />
<br />
RemoveDir(Sour+FileRec.Name);<br />
<br />
end;<br />
<br />
end<br />
<br />
else<br />
<br />
begin<br />
<br />
CopyFile(PChar(Sour+FileRec.Name),PChar(Dest+FileRec.Name),false);<br />
<br />
<br />
<br />
FileSetAttr(Sour+FileRec.Name,faArchive);<br />
<br />
deletefile(Sour+FileRec.Name);<br />
<br />
end;<br />
<br />
until FindNext(FileRec)&lt;&gt;0;<br />
<br />
<br />
<br />
FindClose(FileRec);<br />
<br />
<br />
<br />
FileSetAttr(Sour,faArchive);<br />
<br />
RemoveDir(Sour);<br />
<br />
<br />
<br />
end;<br />
<br />
//-----------------------------------------------------------<br />
<br />
procedure TForm1._DelTree(ASourceDir:String);<br />
<br />
var<br />
<br />
FileRec:TSearchrec;<br />
<br />
Sour:String;<br />
<br />
begin<br />
<br />
Sour:=ASourceDir;<br />
<br />
if Sour[Length(Sour)]&lt;&gt;'\' then Sour := Sour + '\';<br />
<br />
<br />
<br />
if not DirectoryExists(ASourceDir) then<br />
<br />
begin<br />
<br />
ShowMessage('来源目录不存在!!');<br />
<br />
exit;<br />
<br />
end;<br />
<br />
<br />
<br />
if FindFirst(Sour+'*.*',faAnyfile,FileRec) = 0 then<br />
<br />
repeat<br />
<br />
//if (FileRec.Attr = faDirectory) then<br />
<br />
if ((FileRec.Attr and faDirectory) &lt;&gt; 0) then<br />
<br />
begin<br />
<br />
if (FileRec.Name&lt;&gt;'.') and (FileRec.Name&lt;&gt;'..') then<br />
<br />
begin<br />
<br />
_DelTree(Sour+FileRec.Name);<br />
<br />
<br />
<br />
FileSetAttr(Sour+FileRec.Name,faArchive);<br />
<br />
RemoveDir(Sour+FileRec.Name);<br />
<br />
end;<br />
<br />
end<br />
<br />
else<br />
<br />
begin<br />
<br />
FileSetAttr(Sour+FileRec.Name,faArchive);<br />
<br />
deletefile(Sour+FileRec.Name);<br />
<br />
end;<br />
<br />
until FindNext(FileRec)&lt;&gt;0;<br />
<br />
<br />
<br />
FindClose(FileRec);<br />
<br />
<br />
<br />
FileSetAttr(Sour,faArchive);<br />
<br />
RemoveDir(Sour);<br />
<br />
<br />
<br />
end;  <br />
<br />
<br />
<br />
<br />
<br />
利用递归实现删除某一目录下所有文件<br />
<br />
<br />
<br />
var Form1: TForm1;<br />
<br />
rec_stack:array [1..30] of TSearchRec;<br />
<br />
rec_pointer:integer;<br />
<br />
Del_Flag:Boolean;<br />
<br />
---------------------------------------------------------------<br />
<br />
procedure TForm1.DeleteTree(s:string);<br />
<br />
VAR searchRec:TSearchRec;<br />
<br />
begin<br />
<br />
if FindFirst(s+'\*.*', faAnyFile, SearchRec)=0 then<br />
<br />
repeat<br />
<br />
if (SearchRec.Name&lt;&gt;'.') and (SearchRec.Name&lt;&gt;'..') then<br />
<br />
begin<br />
<br />
if (SearchRec.Attr and faDirectory&gt;0) then<br />
<br />
begin<br />
<br />
rec_stack[rec_pointer]:=SearchRec;<br />
<br />
rec_pointer:=rec_pointer-1;<br />
<br />
DeleteTree(s+'\'+SearchRec.Name);<br />
<br />
rec_pointer:=rec_pointer+1;<br />
<br />
SearchRec:=rec_stack[rec_pointer];<br />
<br />
end<br />
<br />
else<br />
<br />
begin<br />
<br />
try<br />
<br />
FileSetAttr(s+'\'+SearchRec.Name,faArchive);<br />
<br />
DeleteFile(s+'\'+SearchRec.Name);<br />
<br />
except<br />
<br />
Application.MessageBox(PChar('Delete file:'+s+'\'+SearchRec.Name+' Error!'),'Info',MB_OK);<br />
<br />
Del_Flag:=False;<br />
<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
until (FindNext(SearchRec)&lt;&gt;0);<br />
<br />
FindClose(SearchRec);<br />
<br />
if rec_pointer&lt;30 then<br />
<br />
begin<br />
<br />
try<br />
<br />
FileSetAttr(s,faArchive);<br />
<br />
RemoveDir(s);<br />
<br />
except<br />
<br />
Application.MessageBox(PChar('Delete Directory:'+s+' Error!'),'Info',MB_OK);<br />
<br />
Del_Flag:=False;<br />
<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
---------------------------------------------------------<br />
<br />
Del_Flag:=True;<br />
<br />
rec_pointer:=30;<br />
<br />
DeleteTree('c:\temp');<br />
<br />
if Del_Flag then Application.MessageBox(PChar('目录c:\temp的内容已成功清除!'),'信息',MB_OK);  <br />
<br />
<br />
<br />
<br />
<br />
轻轻松松查找文件<br />
<br />
在平常的编程当中，经常会碰到查找某一个目录下某一类文件或者所有文件的问题，为了适应不同的需要，我们经常不得不编写大量的类似的代码，有没有可能写一个通用的查找文件的程序，找到一个文件后就进行处理的呢？这样我们只要编写处理文件的部分就可以了，不需要编写查找文件的部分！答案是肯定的。下面的这个程序就能实现这个功能！<br />
<br />
//说明：<br />
<br />
//TFindCallBack为回调函数，FindFile函数找到一个匹配的文件之后就会调用这个函数。<br />
<br />
//TFindCallBack的第一个参数找到的文件名，你在回调函数中可以根据文件名进行操作。<br />
<br />
//TFindCallBack的第二个参数为找到的文件的记录信息，是一个TSearchRec结构。<br />
<br />
//TFindCallBack的第三、四个参数分别为决定是否终止文件的查找，临时决定是否查找某个子目录！<br />
<br />
//FindFile的参数：<br />
<br />
//第一个决定是否退出查找，应该初始化为false；<br />
<br />
//第二个为要查找路径；<br />
<br />
//第三个为文件名，可以包含Windows所支持的任何通配符的格式；默认所有的文件<br />
<br />
//第四个为回调函数，默认为空<br />
<br />
//第五个决定是否查找子目录，默认为查找子目录<br />
<br />
//第六个决定是否在查找文件的时候处理其他的消息，默认为处理其他的消息<br />
<br />
//若有意见和建议请E_Mail：Kingron@163.net<br />
<br />
<br />
<br />
<br />
<br />
type<br />
<br />
TFindCallBack=procedure (const filename:string;const info:TSearchRec;var bQuit,bSub:boolean);<br />
<br />
<br />
<br />
procedure FindFile(var quit:boolean;const path: String;const filename:string='*.*';<br />
<br />
proc:TFindCallBack=nil;bSub:boolean=true;const bMsg:boolean=true);<br />
<br />
var<br />
<br />
fpath: String;<br />
<br />
info: TsearchRec;<br />
<br />
<br />
<br />
procedure ProcessAFile;<br />
<br />
begin<br />
<br />
if (info.Name&lt;&gt;'.') and (info.Name&lt;&gt;'..') and ((info.Attr and faDirectory)&lt;&gt;faDirectory) then<br />
<br />
begin<br />
<br />
if assigned(proc) then<br />
<br />
proc(fpath+info.FindData.cFileName,info,quit,bsub);<br />
<br />
end;<br />
<br />
end;<br />
<br />
<br />
<br />
procedure ProcessADirectory;<br />
<br />
begin<br />
<br />
if (info.Name&lt;&gt;'.') and (info.Name&lt;&gt;'..') and ((info.attr and fadirectory)=fadirectory) then<br />
<br />
findfile(quit,fpath+info.Name,filename,proc,bsub,bmsg);<br />
<br />
end;<br />
<br />
<br />
<br />
begin<br />
<br />
if path[length(path)]&lt;&gt;'\' then<br />
<br />
fpath:=path+'\'<br />
<br />
else<br />
<br />
fpath:=path;<br />
<br />
try<br />
<br />
if 0=findfirst(fpath+filename,faanyfile and (not fadirectory),info) then<br />
<br />
begin<br />
<br />
ProcessAFile;<br />
<br />
while 0=findnext(info) do<br />
<br />
begin<br />
<br />
ProcessAFile;<br />
<br />
if bmsg then application.ProcessMessages;<br />
<br />
if quit then<br />
<br />
begin<br />
<br />
findclose(info);<br />
<br />
exit;<br />
<br />
end;<br />
<br />
end;<br />
<br />
end;<br />
<br />
finally<br />
<br />
findclose(info);<br />
<br />
end;<br />
<br />
try<br />
<br />
if bsub and (0=findfirst(fpath+'*',faanyfile,info)) then<br />
<br />
begin<br />
<br />
ProcessADirectory;<br />
<br />
while findnext(info)=0 do<br />
<br />
ProcessADirectory;<br />
<br />
end;<br />
<br />
finally<br />
<br />
findclose(info);<br />
<br />
end;<br />
<br />
end;<br />
<br />
例子：<br />
<br />
procedure aaa(const filename:string;const info:tsearchrec;var quit,bsub:boolean);<br />
<br />
begin<br />
<br />
form1.listbox1.Items.Add(filename);<br />
<br />
quit:=form1.qqq;<br />
<br />
bsub:=form1.checkbox1.Checked;<br />
<br />
end;<br />
<br />
<br />
<br />
procedure TForm1.Button1Click(Sender: TObject);<br />
<br />
begin<br />
<br />
listbox1.Clear;<br />
<br />
qqq:=false;<br />
<br />
button1.Enabled:=false;<br />
<br />
findfile(qqq,edit1.text,edit2.text,aaa,checkbox1.checked,checkbox2.checked);<br />
<br />
showmessage(inttostr(listbox1.items.count));<br />
<br />
button1.Enabled:=true;<br />
<br />
end;<br />
<br />
<br />
<br />
procedure TForm1.Button2Click(Sender: TObject);<br />
<br />
begin<br />
<br />
qqq:=true;<br />
<br />
end; </pre>
<img src ="http://www.blogjava.net/keweibo/aggbug/313896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-25 15:31 <a href="http://www.blogjava.net/keweibo/articles/313896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi中TApplication类</title><link>http://www.blogjava.net/keweibo/articles/313634.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 22 Feb 2010 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/313634.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/313634.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/313634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/313634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/313634.html</trackback:ping><description><![CDATA[Delphi是一种面向对象的编程语言，由于它采用完全集成OOP的优点，因此使它成为目前十分流行的Windows开发工具。在Delphi包含的众多
类中，TApplication是一个有着十分重要作用的类。TApplication类是用于描述Delphi编制的应用<a href="http://dev.yesky.com/" class="bluekey" target="_blank">程序</a>的一个类。通过对这个类的灵活应用可以编制许多有特点的程序。下面我们就举几个这方面的例子。
<p>　 1 检测当前Windows程序是否被激活：
</p>
<p>　 Tapplication类有一个属性——Active，这个属性就可以描述当前运行的程序是否被激活，成为Windows的焦点。检测的代码如下：
</p>
<pre>	If Application.Active=False then<br />
ShowMessage（&#8217;当前窗口没有被激活&#8217;）；<br />
</pre>
<p>　 2 取得当前程序的名称：
</p>
<p>　 Tapplication类的EXEName属性可以返回这个可执行程序的完整文件名（包含路径）。实现的代码如下所示：
</p>
<p>　 ShowMessage(Application.ExeName);
</p>
<p>　 3 改变程序极小化时的标题
</p>
<p>
如果您细心观察可以发现，一些程序的标题和程序的名称并不一致，尤其是一些英文程序，窗体的标题栏比较长，可以容纳比较多的文字，而在最小化时，往往变成
了很少的几个字母。这中间起作用的就是Tapplication类的Title属性。这个属性决定了程序最小化时的标题，而窗口中标题栏的标题是由
Form的Caption属性来决定的。其代码如下： </p>
<pre>	 Form1.Caption:=&#8217; 窗口的标题&#8217;;<br />
Application.Title:=&#8217;程序的标题&#8217;;<br />
</pre>
<p>　 其实我们也可以在在程序<a href="http://design.yesky.com/" class="bluekey" target="_blank">设计</a>时
指定Tapplication类的Title属性值。操作的方法是在开发环境中拉下Project菜单,选择Options菜单时弹出如图1
(略)的对话框。在这个对话框中的Title栏中填写程序的标题一样也可以达到这种效果。并且因为一般的工程文件都是以英文命名的，所以程序运行过程中弹
出的消息框中的标题是英文。但在指定了这个属性之后，这个程序的所有消息窗口的标题都变为Title的值。这就使得程序看起来更加完整。 </p>
<p>　 4 指明程序的主窗口
</p>
<p>　 Windows系统中的界面都是窗口，但一般来讲有一个主窗口。Tapplication的MainForm属性就可以返回程序的主窗口。
</p>
<p>　 5 显示消息框
</p>
<p>
Delphi有许多显示消息框的函数与过程，比较常用的是ShowMessage，它用起来虽然十分方便，但是却有一个问题，那就是这个消息框的按钮是以
英文显示的。如果要生成一个含有中文显示的按钮就要求助于Tapplication的MessageBox函数了。这个函数的原形如下： </p>
<p>　 function MessageBox(Text,    tion:
Char; Flags: Longint): Integer;
</p>
<p>　 在这个函数中，前两项分别是显示的提示信息和消息窗口的标题，Flags是一个长整值，用来指定按钮的个数及功能。熟悉Delphi的用户可能会注意到，这个函数和Delphi
3所提供的同名函数有一点不同，那不是这个版本中字符串参数都以字符的形式给出，而不再要求将其转化成指针。我们在使用时要注意加以区别。
</p>
<p>　 Application.MessageBox(需要存盘吗？,提示信息,MB_OKCANCEL)；
这个语句在运行时显示的样式如图2 (略) 所示。
</p>
<p>　 最后就这个函数的返回值作一些说明，实际上这个函数返回的是一个整型的数值，而这个数值被系统指定了具体的含义，比如：按下&#8220;确定&#8221;按钮时返回的值是&#8220;1&#8221;，而其它按钮的值列在表
1 中。
</p>
<p>　 表 1 按钮的意义及系统中对其定义的值
</p>
<pre>按钮的意义	按下此按钮时函数返回的值<br />
IDABORT		3<br />
IDCANCEL 	2<br />
IDIGNORE	 5<br />
IDNO		 7<br />
IDOK		 1<br />
IDRETRY		4<br />
IDYES		6<br />
</pre>
<p>　 6 控制窗口的尺寸
</p>
<p>　 一般可以用窗口手柄来调整窗口的尺寸，但是也可以用Application的事件来调整。实现的方法是用以下两个过程：
</p>
<pre>		Application.Minimized;<br />
Application.Restore;<br />
</pre>
<p>　 前一个过程用来将程序的主窗口最小化，而后一个过程用来将最小化的窗口恢复到原来的尺寸。
</p>
<p>　 7 链接联机帮助文件
</p>
<p>　 Application的CurrentHelpFile属性能够指定当前程序所用的联机帮助文件的文件名。这个属性经常与另一个方法联合在一起使用。举例如下：
</p>
<pre>		Application.HelpFile := 联机帮助文件名;<br />
Application.HelpJump(联机帮助文件的主题&#8217;)<br />
</pre>
<p>　 通过这一命令组合，我们就能使系统弹出一个显示某主题的联机帮助文件。
</p>
<p>　 8 在程序运行时动态地创建窗口
</p>
<p>　 一般情况下，窗口是在设计时加入到工程项目中的，但是有时也需要我们在程序运行时动态地加入窗口，这就要用到Application
的CreateForm过程，举例如下：
</p>
<pre>		Form3:Tform3; //声明窗口类<br />
Application.CreateForm(TForm3, Form3); //创建窗口<br />
</pre>
<p>　 9 结束程序
</p>
<p>　 虽然我们可以用关闭主窗口的方法来关闭一个程序，但是更好的办法是用Application的Terminate过程。它能够起到更彻底地关闭程序的效果。
</p>
<p>　 10 Destroy 属性.
</p>
<p>
虽然Delphi提供了这一属性,但是并不提倡使用它,如果要终结程序就要调用Terminate过程，而Destroy过程一般是用来在程序发生悬挂时
来退出程序时才调用，有些类似Windows中的结束任务功能。它不仅能关闭程序实例本身，而且还能释放程序所占用的资源，能够达到将程序彻底清除出系统
的目的。 </p>
<img src ="http://www.blogjava.net/keweibo/aggbug/313634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-22 15:30 <a href="http://www.blogjava.net/keweibo/articles/313634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用鼠标拖动无标题窗口,窗口內放的是Image</title><link>http://www.blogjava.net/keweibo/articles/313591.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 22 Feb 2010 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/313591.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/313591.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/313591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/313591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/313591.html</trackback:ping><description><![CDATA[unit Unit1;<br />
<br />
interface<br />
<br />
uses<br />
&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br />
&nbsp; Dialogs, ImgList, Menus, ExtCtrls, <strong>BmpRgn</strong>,&nbsp; StdCtrls, IniFiles,<br />
&nbsp; Buttons;<br />
<br />
type<br />
&nbsp; TForm1 = class(TForm)<br />
&nbsp;&nbsp;&nbsp; img1: TImage;<br />
&nbsp;&nbsp;&nbsp; bvl1: TBevel;<br />
&nbsp;&nbsp;&nbsp; lbl1: TLabel;<br />
&nbsp;&nbsp;&nbsp; procedure FormCreate(Sender: TObject);<br />
&nbsp; private<br />
&nbsp;&nbsp;&nbsp; { Private declarations }<br />
&nbsp;&nbsp;&nbsp; procedure WMEraseBkGnd( Var Msg: TWMEraseBkGnd ); message WM_ERASEBKGND;<br />
&nbsp;&nbsp;&nbsp; <strong>procedure WMNCHitTest( Var msg: TWMNCHitTest ); message WM_NCHITTEST;</strong><br />
&nbsp; public<br />
&nbsp;&nbsp;&nbsp; { Public declarations }<br />
&nbsp;&nbsp;&nbsp; procedure SetTheRegion;<br />
&nbsp;&nbsp;&nbsp; procedure AppException(Sender: TObject; E: Exception);<br />
&nbsp; end;<br />
<br />
var<br />
&nbsp; Form1: TForm1;<br />
<br />
implementation<br />
<br />
{$R *.dfm}<br />
// This routine takes care of drawing the bitmap on the form.<br />
procedure TForm1.WMEraseBkGnd(var Msg: TWMEraseBkGnd);<br />
var<br />
&nbsp; Brush: TBrush;<br />
begin<br />
&nbsp; Brush := TBrush.Create;<br />
&nbsp; Brush.Color := Color;<br />
&nbsp; FillRect( Msg.DC, ClientRect, Brush.Handle);<br />
&nbsp; Brush.Free;<br />
&nbsp; with img1.Picture.Bitmap do<br />
&nbsp;&nbsp;&nbsp; BitBlt( Msg.DC, 0, 0, Width, Height, Canvas.Handle, 0, 0, SRCCOPY);<br />
&nbsp; Msg.Result := 1;<br />
end;<br />
<br />
// This routine takes care of letting the user move the form<br />
// around on the desktop.<br />
procedure TForm1.WMNCHitTest( var msg: TWMNCHitTest );<br />
var<br />
&nbsp; i: integer;<br />
&nbsp; p: TPoint;<br />
&nbsp; AControl: TControl;<br />
&nbsp; MouseOnControl: boolean;<br />
begin<br />
&nbsp; inherited;<br />
&nbsp; if msg.result = HTCLIENT then begin<br />
&nbsp;&nbsp;&nbsp; p.x := msg.XPos;<br />
&nbsp;&nbsp;&nbsp; p.y := msg.YPos;<br />
&nbsp;&nbsp;&nbsp; p := ScreenToClient( p);<br />
&nbsp;&nbsp;&nbsp; MouseOnControl := false;<br />
&nbsp;&nbsp;&nbsp; for i := 0 to ControlCount-1 do begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not MouseOnControl<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AControl := Controls[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((AControl is TWinControl) or (AControl is TGraphicControl))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and (<strong>AControl.Visible</strong>) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MouseOnControl := PtInRect( AControl.BoundsRect, p);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; if (not MouseOnControl) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg.Result := HTCAPTION;<br />
&nbsp; end;<br />
end;<br />
<br />
procedure TForm1.SetTheRegion;<br />
var<br />
&nbsp; HR: HRGN;<br />
begin<br />
&nbsp; HR := BmpToRegion( Self, img1.Picture.Bitmap);<br />
&nbsp; SetWindowRgn( handle, HR, true);<br />
&nbsp; Invalidate;<br />
end;<br />
<br />
procedure TForm1.FormCreate(Sender: TObject);<br />
begin<br />
&nbsp;&nbsp;&nbsp; Application.OnException := AppException;<br />
&nbsp;&nbsp;&nbsp; SetTheRegion;<br />
end;<br />
<br />
procedure TForm1.AppException(Sender: TObject; E: Exception);<br />
begin<br />
&nbsp; Application.ProcessMessages;<br />
&nbsp; Application.ShowException(E);<br />
&nbsp; Application.Terminate;<br />
end;<br />
<br />
end.<br />
<u><strong>注意:<br />
(1) img1: TImage;的Visible屬性必須設置為false</strong></u><br />
<strong>(2) BmpRgn 為外部dcu文件,需要導入</strong><br />
<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/313591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-22 11:48 <a href="http://www.blogjava.net/keweibo/articles/313591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi 日誌記錄相關</title><link>http://www.blogjava.net/keweibo/articles/313415.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 19 Feb 2010 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/313415.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/313415.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/313415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/313415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/313415.html</trackback:ping><description><![CDATA[procedure TformMain.WriteLog(Err:boolean;sTrLog:string);<br />
var sBackupFile,sDir:string;<br />
&nbsp;&nbsp;&nbsp; vFile: Textfile;<br />
begin<br />
&nbsp; sDir:='指定目錄';<br />
&nbsp; if Copy(sDir, Length(sDir), 1) &lt;&gt; '\' then<br />
&nbsp;&nbsp;&nbsp; sDir := sDir + '\';<br />
&nbsp; //sDir:=ExtractFilePath(Application.ExeName)+'\';<br />
&nbsp; ForceDirectories(sDir + 'TESTLOG');<br />
&nbsp; sBackupFile := sDir + 'TESTLOG\'+FormatDateTime('YYYYMMDDHH',now())+'.log';<br />
&nbsp; AssignFile(vFile, sBackupFile);<br />
&nbsp; if FileExists(sBackupFile) then<br />
&nbsp;&nbsp;&nbsp; Append(vFile)<br />
&nbsp; else<br />
&nbsp;&nbsp;&nbsp; Rewrite(vFile);<br />
&nbsp; if not Err then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn(vFile, FormatDateTime('yyyy/mm/dd hh:mm:ss', Now) +' [Error ]' +' - ' + sTrlog)<br />
&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriteLn(vFile, FormatDateTime('yyyy/mm/dd hh:mm:ss', Now) +' [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]' +' - ' + sTrlog);<br />
&nbsp; CloseFile(vFile);<br />
end;<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/313415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-19 14:50 <a href="http://www.blogjava.net/keweibo/articles/313415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让delphi 的代码显示行号--CnWizards</title><link>http://www.blogjava.net/keweibo/articles/312580.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 11 Feb 2010 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312580.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312580.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312580.html</trackback:ping><description><![CDATA[CnWizards 0.9.5.554
<p>
======================<br />
一、什么是 CnWizards？<br />
======================</p>
<p>
CnWizards 是 CnPack 项目组的主力产品之一，中文全称是 CnPack IDE 专家包，<br />
英文全称是 CnPack IDE Wizards，简称 CnWizards。CnWizards 是一组集成在 <br />
Delphi/C++Builder/BDS 的 IDE 中，用于增强 IDE 功能、提高 IDE 的可用性及<br />
开发效率的免费、开放源码工具。</p>
<p>
==================================<br />
二、CnWizards 主要面对哪类用户群？<br />
==================================</p>
<p>
CnWizards 产品主要面对使用 Delphi 5 6 7、C++Builder 5 6 与 BDS 2005 <br />
2006、RAD Studio 2007 2009 2010 的开发者。<br />
CnWizards 目前的发布版本包括简体中文、繁体中文、英三种语言。</p>
<p>
注：由于编译的兼容性问题，对于 Delphi 2009，CnWizards 只支持其正式版即<br />
12.0.3170.16989 或以上版本，而不支持低于此版本的内测版。如需要在内测版<br />
中安装 CnWizards，需要获取 CnWizards 的代码自行编译。</p>
<p>
==============================<br />
三、CnWizards 主要有哪些功能？<br />
==============================</p>
<p>
CnWizards 在 Delphi / C++Builder / BDS 的 IDE 中提供了十多个可独立设置的<br />
子专家，数十种功能，主要包括：</p>
<p>
* 代码输入助手<br />
* 代码结构匹配高亮与画线<br />
* 增强的单元窗体列表功能<br />
* TabOrder 设置专家<br />
* 窗体设计器的浮动工具栏<br />
* MSDN 帮助集成功能<br />
* 代码编辑器工具栏与功能扩展<br />
* 工程相关的扩展功能<br />
* 组件面板多行显示支持<br />
* 窗体置顶与折叠功能<br />
* 源代码统计功能<br />
* 引用单元清理<br />
* 其他大量增强与改进</p>
<p>
关于界面截图可参考：http://www.cnpack.org/images/cnwizards.gif<br />
此外，CnWizards 还附带下列独立运行的小工具：</p>
<p>
* CnWizards 设置导入导出工具<br />
* DFM 窗体转换工具<br />
* IDE 配置备份/恢复和清除打开文件历史工具<br />
* 调试信息输出单元 CnDebug 与调试信息查看器 CnDebugViewer<br />
* ASCII 字符表<br />
* IDE 外部专家管理工具<br />
* 源码模块关系分析工具</p>
<p>
CnWizards 以与开源协议兼容的 CnPack 协议发布，因而是开源、免费的。<br />
任何个人或商业团体可以免费使用 CnWizards，无需支付任何费用。</p>
<p>
======================<br />
四、关于 CnPack 开发组<br />
======================</p>
<p>
CnPack 是由互联网上一群中国程序员开发的开放源码的自由软件项目，当前主要<br />
的工作成果包括 CnPack 组件包、CnWizards 专家包以及 CVSTracNT 错误跟踪系<br />
统等。2009 年 CnPack 开发组成为了 Embarcadero 的技术合作伙伴。<br />
CnPack 开发团队目前规模有 260 余人，并且还在不断发展壮大中。</p>
<p>
CnPack 网站：http://www.cnpack.org<br />
CnPack 论坛：http://bbs.cnpack.org<br />
每日构建版： http://www.cnpack.org/downbuilds.php<br />
管理员信箱： master@cnpack.org</p>
<p>
======================<br />
五、更新记录<br />
======================</p>
<p>
0.9.5 以 Bug 修复为主，较 0.9.4 的更新：</p>
<p>
* 高亮当前标识符增加前景色与边框色的设置。<br />
* 引用单元清理修正对inline处理失败的问题。<br />
* 增加将IDE设置为单核方式运行的选项。<br />
* 修正BDS的嵌入式设计界面编辑器工具栏设置未保存的问题。<br />
* 在BDS的嵌入式设计界面增加编辑器工具栏。<br />
* 编辑器扩展修正复制并追加功能在D2010下导致乱码的问题。<br />
* 其它的错误修正和改进。<br />
</p>
<br />
相关下载:
<br />
<a target="_blank" title="" href="http://www.cnpack.org/download.php?id=391&amp;lang=zh-cn">CnWizards V0.9.5.554 安装程序</a>&nbsp;(已下载&nbsp;7455&nbsp;次)
<br />
<a target="_blank" title="" href="http://www.cnpack.org/download.php?id=393&amp;lang=zh-cn">CnWizards V0.9.5.554 源代码（包括 CnPack 组件包 CnVcl 内测版）</a>&nbsp;(已下载&nbsp;1355&nbsp;次)
<img src ="http://www.blogjava.net/keweibo/aggbug/312580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-11 14:48 <a href="http://www.blogjava.net/keweibo/articles/312580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi字符串函数大全</title><link>http://www.blogjava.net/keweibo/articles/312577.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 11 Feb 2010 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312577.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312577.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312577.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 轉:http://chinaitpower.net/A/2005-01-18/105341.htmluses StrUtils;【字符串函数大全】 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首部 function AnsiResemblesText(const AText, AOther: string): Boolean; &nbsp;&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/keweibo/articles/312577.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/312577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-11 14:07 <a href="http://www.blogjava.net/keweibo/articles/312577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi 常用函數整理</title><link>http://www.blogjava.net/keweibo/articles/312576.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 11 Feb 2010 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312576.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312576.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312576.html</trackback:ping><description><![CDATA[(1) Pos函数<br />
Delphi提供的字符串函数里有一个Pos函数，它的定义是： <br />
<br />
<table width="674" align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" height="29">
    <tbody>
        <tr>
            <td>function Pos(Substr: <a href="http://www.yesky.com/key/2462/102462.html" class="bluekey" target="_blank">string</a>; S: string): Integer; </td>
        </tr>
    </tbody>
</table>
<br />
它的作用是在字符串S中查找字符串Substr，返回值是Substr在S中第一次出现的位置，如果没有找到，返回值为0。
<img src ="http://www.blogjava.net/keweibo/aggbug/312576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-11 13:59 <a href="http://www.blogjava.net/keweibo/articles/312576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AssignFile Procedure 	Assigns a file handle to a binary or text file</title><link>http://www.blogjava.net/keweibo/articles/312425.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 09 Feb 2010 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312425.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312425.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312425.html</trackback:ping><description><![CDATA[<font face="Courier New" size="2"><strong>var<br />
&nbsp;&nbsp;&nbsp; myFile : TextFile;<br />
&nbsp;&nbsp;&nbsp; text : String;<br />
&nbsp;&nbsp;&nbsp; sFileName : String;<br />
begin<br />
&nbsp;&nbsp;&nbsp; sFileName := 'F:/test.txt';<br />
&nbsp;&nbsp;&nbsp; AssignFile(myFile, sFileName);<br />
&nbsp;&nbsp;&nbsp; if FileExists(sFileName) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Append(myFile)</strong></font><span id="post1" style="color: #555555; font-size: 12px;">// 以追加的方式打开文件</span><br />
<font face="Courier New" size="2"><strong>
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReWrite(myFile);<br />
<br />
&nbsp;&nbsp;&nbsp; Writeln(myFile, 'Hello World, By Bob!');<br />
&nbsp;&nbsp;&nbsp; Writeln(myFile, FormatDateTime('yyyy/mm/dd hh:nn:ss', now));<br />
&nbsp;&nbsp;&nbsp; CloseFile(myFile);<br />
<br />
&nbsp;&nbsp;&nbsp; ReSet(myFile);<br />
<br />
&nbsp;&nbsp;&nbsp; while not Eof(myFile) do<br />
&nbsp;&nbsp;&nbsp; begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Readln(myFile, text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showmessage(text);<br />
&nbsp;&nbsp;&nbsp; end;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; CloseFile(myFile);<br />
end;<br />
</strong><br />
<strong></strong></font>
<img src ="http://www.blogjava.net/keweibo/aggbug/312425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-09 15:42 <a href="http://www.blogjava.net/keweibo/articles/312425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi快捷键</title><link>http://www.blogjava.net/keweibo/articles/312386.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 09 Feb 2010 00:52:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312386.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312386.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312386.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312386.html</trackback:ping><description><![CDATA[下面的快捷键大部分在Delphi的菜单中找不到，其中有一些还是非常有用的。
<br />
Ctrl+PageUp      将光标移至本屏的第一行，屏幕不滚动。
<br />
Ctrl+PageDown    将光标移至本屏的最后一行，屏幕不滚动。
<br />
Ctrl+&#8595;          向下滚动屏幕，光标跟随滚动不出本屏。
<br />
Ctrl+&#8593;          向上滚动屏幕，光标跟随滚动不出本屏。
<br />
Ctrl+Shift+NUM   在光标行设置最多九个临时标志号，对临时切换非常有用。
行的左边将出现一本书，封面有NUM，再按一次取消设置。
<br />
Ctrl+NUM         直接将光标跳到NUM处，NUM是用Ctrl+Shift+NUM设置的标号。
NUM不能用小键盘。
<br />
Ctrl+Home        将光标移至文件头。
<br />
Ctrl+End         将光标移至文件尾。
<br />
Ctrl+B           Buffer List窗口。
Ctrl+I           同Tab键。
Ctrl+M           同Enter键。
Ctrl+N           同Enter键，但光标位置保持不变。
<br />
Ctrl+T           删除光标右边的一个单词。
<br />
Ctrl+Y           删除光标所在行。
<br />
Ctrl+Shift+&#8593;    光标在函数体内时，将光标快速移至当前函数声明处。
<br />
Ctrl+Shift+&#8595;    光标在函数声明行时，将光标快速移至函数定义处。
<br />
<strong>Ctrl+Shift+C     声明一个过程或函数后，直接生成过程或函数的名称、begin、end;
</strong>　<br />
Ctrl+Shift+E     光标在Edit窗口和Explorer窗口间切换。
Ctrl+Shift+G     插入GUID。
<br />
<strong>Ctrl+Shift+J     弹出Delphi语句提示窗口，选择所需语句将自动完成一条语句。
</strong><br />
Ctrl+Shift+T     在光标行加入To-Do注释。
<br />
Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本。
<br />
Ctrl+F3          Call Stack窗口。
<br />
Ctrl+F4          等于File菜单中的Close项。
<br />
Ctrl+鼠标转轮    加速滚屏。
<br />
Shift+F8         调试时弹出CPU窗口。
<br />
Shift+F10        等于鼠标右键（Windows快捷键）。
<br />
Alt+F4           关闭所有编辑框中打开的源程序文件，但不关闭项目。
设置Code Insight 模板，begin...end,以后只要输入be，然后按ctrl+j就可以匹配begin,end;但是从begin到相应的end，就不知道了，匹配括号之类的可以用alt+[,Alt+]
搜索editor keyboard shortcuts可能可以找到，你自己看帮助吧。
在编程序时 unit 右键菜单的properties /Code Insight
设置你喜欢的任何东东
ctr+j即可。
DELPHI IDE中部分操作快捷方式(大部分在Delphi 5.0的菜单中找不到，其中有一些还是非常有用的)
<br />
<strong>1     代码模板：CTRL+J</strong>
<br />
<strong>2     代码整块移动：CTRL+SHIFT+I（右移） CTRL+SHIFT+U（左移）
</strong>　　<br />
3     选中窗体 ： 先选中任一控件，SHIFT+鼠标左键
<br />
<strong>4     将鼠标指向变量名、单元名、类名，再用 CTRL+鼠标左键 可找到相应的说明
</strong>　<br />
<strong>5     在过程、函数、事件内部， SHIFT+CTRL+向上的方向键  可跳跃到相应的过程、函数、事件的定义</strong>
<br />
<strong>6     相反，在过程、函数、事件的定义处，SHIFT+CTRL+向下的方向键 可跳跃到具体过程、函数、事件内部</strong><br />
7      CTRL+ SHIFT + C:编写申明或者补上函数
<br />
8      SHIFT+CTRL+E 显示 EXPLORER
<br />
9      Ctrl+ shift + n (n=1,2,3,4......)定义书签
<br />
10    Ctrl+ n (n=1,2,3,4......)跳到书签n
<br />
11    ALT+鼠标左键可以块选代码，删除对齐的重复代码非常有用
<br />
12    Ctrl+PageUp         将光标移至本屏的第一行，屏幕不滚动。
<br />
13    Ctrl+PageDown    将光标移至本屏的最后一行，屏幕不滚动。
<br />
14    Ctrl+&#8595;                向下滚动屏幕，光标跟随滚动不出本屏。
<br />
15    Ctrl+&#8593;                向上滚动屏幕，光标跟随滚动不出本屏。
<br />
16    Ctrl+Home          将光标移至文件头。
<br />
17    Ctrl+End              将光标移至文件尾。
<br />
18    Ctrl+B                   Buffer List窗口。
<br />
19    Ctrl+I                    同Tab键。
<br />
20    Ctrl+M                 同Enter键。
<br />
21    Ctrl+N                  同Enter键，但光标位置保持不变。
<br />
22    Ctrl+T                  删除光标右边的一个单词。
<br />
23    Ctrl+Y                  删除光标所在行。
<br />
24    Ctrl+Shift+&#8593;      光标在函数体内时，将光标快速移至当前函数声明处。
<br />
25    Ctrl+Shift+&#8595;      光标在函数声明行时，将光标快速移至函数定义处。
<br />
26    Ctrl+Shift+C     声明一个过程或函数后，直接生成过程或函数的名称、begin、end;
<br />
27    Ctrl+Shift+E     光标在Edit窗口和Explorer窗口间切换。
<br />
28    Ctrl+Shift+G     插入GUID。
<br />
29    Ctrl+Shift+J      弹出Delphi语句提示窗口，选择所需语句将自动完成一条语句。
<br />
30    Ctrl+Shift+T     在光标行加入To-Do注释。
<br />
31    Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本。
<br />
32    Ctrl+F3          Call Stack窗口。
<br />
33    Ctrl+F4          等于File菜单中的Close项。
<br />
34    Ctrl+鼠标转轮    加速滚屏。
<br />
35    Shift+F8         调试时弹出CPU窗口。
<br />
36    Shift+F10        等于鼠标右键（Windows快捷键）。
<br />
37  Alt+F4         关闭所有编辑框中打开的源程序文件，但不关闭项目。
<br />
<strong>38 Ctrl+F 查找 , F3為查找下一個</strong><br />
<img src ="http://www.blogjava.net/keweibo/aggbug/312386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-09 08:52 <a href="http://www.blogjava.net/keweibo/articles/312386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Delphi中可用FormatDateTime函数的用法</title><link>http://www.blogjava.net/keweibo/articles/312384.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 09 Feb 2010 00:44:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312384.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312384.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312384.html</trackback:ping><description><![CDATA[function FormatDateTime(const Format: string; DateTime: TDateTime): string; <br />
Format参数是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的字符串，重点来看Format参数中的指令字符：<br />
c以短时间格式显示时间，即全部是数字的表示<br />
FormatdateTime('c',now);<br />
输出为：2004-8-7 9:55:40<br />
d 对应于时间中的日期，日期是一位则显示一位，两位则显示两位<br />
FormatdateTime('d',now);<br />
输出可能为1～31<br />
dd 和d的意义一样，但它始终是以两位来显示的<br />
FormatdateTime('dd',now);<br />
输出可能为01～31<br />
ddd 显示的是星期几<br />
FormatdateTime('ddd',now);<br />
输出为: 星期六<br />
dddd 和ddd显示的是一样的。<br />
但上面两个如果在其他国家可能不一样。<br />
ddddd 以短时间格式显示年月日 <br />
FormatdateTime('ddddd',now);<br />
输出为：2004-8-7<br />
dddddd 以长时间格式显示年月日<br />
FormatdateTime('dddddd',now); <br />
输出为：2004年8月7日<br />
e/ee/eee/eeee 以相应的位数显示年<br />
FormatdateTime('ee',now); <br />
输出为：04 （表示04年）<br />
m/mm/mmm/mmmm 表示月<br />
FormatdateTime('m',now);<br />
输出为：8<br />
FormatdateTime('mm',now);<br />
输出为 08<br />
FormatdateTime('mmm',now);<br />
输出为 八月<br />
FormatdateTime('mmmm',now); <br />
输出为 八月<br />
和ddd/dddd 一样，在其他国家可能不同<br />
yy/yyyy 表示年<br />
FormatdateTime('yy',now);<br />
输出为 04<br />
FormatdateTime('yyyy',now);<br />
输出为 2004<br />
h/hh,n/nn,s/ss,z/zzz 分别表示小时，分，秒,毫秒<br />
t 以短时间格式显示时间<br />
FormatdateTime('t',now);<br />
输出为 10:17<br />
tt 以长时间格式显示时间<br />
FormatdateTime('tt',now);<br />
输出为10:18:46<br />
ampm 以长时间格式显示上午还是下午<br />
FormatdateTime('ttampm',now);<br />
输出为：10:22:57上午<br />
如果要在Format中加普通的字符串，可以用双引号隔开那些特定义的字符，这样普通字符串中如果含特殊的字符就不会被显示为时间格式啦：<br />
FormatdateTime('"today is" c',now);<br />
输出为：today is 2004-8-7 10:26:58<br />
时间中也可以加"-"或"\"来分开日期：<br />
FormatdateTime('"today is" yy-mm-dd',now);<br />
FormatdateTime('"today is" yy\mm\dd',now);<br />
输出为： today is 04-08-07<br />
也可以用":"来分开时间 <br />
FormatdateTime('"today is" hh:nn:ss',now);<br />
输出为：today is 10:32:23
<img src ="http://www.blogjava.net/keweibo/aggbug/312384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-09 08:44 <a href="http://www.blogjava.net/keweibo/articles/312384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi TIniFile 类 操作ini配置文件</title><link>http://www.blogjava.net/keweibo/articles/312322.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 08 Feb 2010 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/312322.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/312322.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/312322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/312322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/312322.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p><font color="#333333" size="2">轉:http://hi.baidu.com/graspa/blog/item/d17d928b4ec949d0fc1f1007.html/cmtid/196abb648679f0fcf73654ae<br />
</font></p>
<p><font color="#333333" size="2">一、有必要了解INI文件的结构：</font></p>
<p><font color="#333333" size="2">;注释</font></p>
<p><font color="#333333" size="2">[小节名]</font></p>
<p><font color="#333333" size="2">关键字=值</font></p>
<p><font color="#333333" size="2">...</font></p>
<p><font color="#333333" size="2">---- INI文件允许有多个小节，每个小节又允许有多个关键字， &#8220;=&#8221;后面是该关键字的值。</font></p>
<p><font color="#333333" size="2">---- 值的类型有三种：字符串、整型数值和布尔值。其中字符串存贮在INI文件中时没有引号，布尔真值用1表示，布尔假值用0表示。</font></p>
<p><font color="#333333" size="2">---- 注释以分号&#8220;;&#8221;开头。</font></p>
<p><font color="#333333" size="2">二、定义</font></p>
<p><font color="#333333" size="2">---- 1、在Interface的Uses节增加IniFiles；</font></p>
<p><font color="#333333" size="2">---- 2、在Var变量定义部分增加一行：</font></p>
<p><font color="#333333" size="2">myinifile:Tinifile;</font></p>
<p><font color="#333333" size="2">---- 然后，就可以对变量myinifile进行创建、打开、读取、写入等操作了。</font></p>
<p><font color="#333333" size="2">三、打开INI文件</font></p>
<p><font color="#333333" size="2">myinifile:=Tinifile.create('program.ini');</font></p>
<p><font color="#333333" size="2">--- 上面这一行语句将会为变量myinifile与具体的文件 program.ini建立联系，然后，就可以通过变量myinifile，来读写program.ini文件中的关键字的值了。</font></p>
<p><font color="#333333" size="2">---- 值得注意的是，如果括号中的文件名没有指明路径的话，那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是：为其指定完整的路径及文件名。下面的两条语句可以完成这个功能：</font></p>
<p><font color="#333333" size="2">Filename:=ExtractFilePath(Paramstr(0))+'program.ini';</font></p>
<p><font color="#333333" size="2">myinifile:=Tinifile.Create(filename);</font></p>
<p><font color="#333333" size="2">四、读取关键字的值</font></p>
<p><font color="#333333" size="2">--- 针对INI文件支持的字符串、整型数值、布尔值三种数据类型，TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。</font></p>
<p><font color="#333333" size="2">--- 假设已定义变量vs、vi、vb分别为string、 integer、boolean类型。</font></p>
<p><font color="#333333" size="2">vs:=myinifile.Readstring('小节名','关键字',缺省值);</font></p>
<p><font color="#333333" size="2">vi:=myinifile.Readinteger('小节名','关键字',缺省值);</font></p>
<p><font color="#333333" size="2">vb:=myinifile.Readbool('小节名','关键字',缺省值);</font></p>
<p><font color="#333333" size="2">--- 其中缺省值为该INI文件不存在该关键字时返回的缺省值。</font></p>
<p><font color="#333333" size="2">五、写入INI文件</font></p>
<p><font color="#333333" size="2">---- 同样的，TInifile类也提供了三种不同的对象方法，向INI文件写入字符串、整型数及布尔类型的关键字。</font></p>
<p><font color="#333333" size="2">myinifile.writestring('小节名','关键字',变量或字符串值);</font></p>
<p><font color="#333333" size="2">myinifile.writeinteger('小节名','关键字',变量或整型数值);</font></p>
<p><font color="#333333" size="2">myinifile.writebool('小节名','关键字',变量或True或False);</font></p>
<p><font color="#333333" size="2">---- 当这个INI文件不存在时，上面的语句还会自动创建该INI文件。</font></p>
<p><font color="#333333" size="2">六、删除关键字</font></p>
<p><font color="#333333" size="2">---- 除了可用写入方法增加一个关键字，Tinifile类还提供了一个删除关键字的对象方法：</font></p>
<p><font color="#333333" size="2">myinifile.DeleteKey('小节名','关键字');</font></p>
<p><font color="#333333" size="2">七、小节操作</font></p>
<p><font color="#333333" size="2">--- 增加一个小节可用写入的方法来完成，删除一个小节可用下面的对象方法：</font></p>
<p><font color="#333333" size="2">myinifile.EraseSection('小节名');</font></p>
<p><font color="#333333" size="2">--- 另外Tinifile类还提供了三种对象方法来对小节进行操作：</font></p>
<p><font color="#333333" size="2">--- myinifile.readsection('小节名',TStrings变量);可将指定小节中的所有关键字名读取至一个字符串列表变量中；</font></p>
<p><font color="#333333" size="2">--- myinifile.readsections(TStrings变量);可将INI文件中所有小节名读取至一个字符串列表变量中去。</font></p>
<p><font color="#333333" size="2">---- myinifile.readsectionvalues('小节名',TStrings变量);可将INI文件中指定小节的所有行（包括关键字、=、值）读取至一个字符串列表变量中去。</font></p>
<p><font color="#333333" size="2">八、释放</font></p>
<p><font color="#333333" size="2">在适当的位置用下面的语句释放myinifile：</font></p>
<p><font color="#333333" size="2">myinifile.distory;</font></p>
<p><font color="#333333" size="2">九、一个实例</font></p>
<p><font color="#333333" size="2">----
下面用一个简单的例子(如图)，演示了建立、读取、存贮INI文件的方法。myini.ini文件中包含有&#8220;程序参数&#8221;小节，和用户名称（字符串）、是否
正式用户（布尔值）和已运行时间（整型值）三个关键字。程序在窗体建立读取这些数据，并在窗体释放时写myini.ini文件。</font></p>
<p><font color="#333333" size="2">--- 附源程序清单</font></p>
<p><font color="#333333" size="2">unit Unit1;</font></p>
<p><font color="#333333" size="2">interface</font></p>
<p><font color="#333333" size="2">uses </font></p>
<p><font color="#333333" size="2">Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,</font></p>
<p><font color="#333333" size="2">inifiles, //配置操作文件</font></p>
<p><font color="#333333" size="2">StdCtrls, ExtCtrls;</font></p>
<p><font color="#333333" size="2">type</font></p>
<p><font color="#333333" size="2">TForm1 = class(TForm)</font></p>
<p><font color="#333333" size="2">Edit1: TEdit;</font></p>
<p><font color="#333333" size="2">CheckBox1: TCheckBox;</font></p>
<p><font color="#333333" size="2">Edit2: TEdit;</font></p>
<p><font color="#333333" size="2">Label1: TLabel;</font></p>
<p><font color="#333333" size="2">Label2: TLabel;</font></p>
<p><font color="#333333" size="2">Timer1: TTimer;</font></p>
<p><font color="#333333" size="2">Label3: TLabel;</font></p>
<p><font color="#333333" size="2">procedure FormCreate(Sender: TObject);</font></p>
<p><font color="#333333" size="2">procedure FormDestroy(Sender: TObject);</font></p>
<p><font color="#333333" size="2">procedure Timer1Timer(Sender: TObject);</font></p>
<p><font color="#333333" size="2">private</font></p>
<p><font color="#333333" size="2">{ Private declarations }</font></p>
<p><font color="#333333" size="2">public</font></p>
<p><font color="#333333" size="2">{ Public declarations }</font></p>
<p><font color="#333333" size="2">end;</font></p>
<p><font color="#333333" size="2">var</font></p>
<p><font color="#333333" size="2">Form1: TForm1;</font></p>
<p><font color="#333333" size="2">implementation</font></p>
<p><font color="#333333" size="2">var</font></p>
<p><font color="#333333" size="2">myinifile:TInifile;</font></p>
<p><font color="#333333" size="2">{$R *.DFM}</font></p>
<p><font color="#333333" size="2">procedure TForm1.FormCreate(Sender: TObject);</font></p>
<p><font color="#333333" size="2">var</font></p>
<p><font color="#333333" size="2">filename:string;</font></p>
<p><font color="#333333" size="2">begin</font></p>
<p><font color="#333333" size="2">filename:=ExtractFilePath(paramstr(0))+'myini.ini';</font></p>
<p><font color="#333333" size="2">myinifile:=TInifile.Create(filename);</font></p>
<p><font color="#333333" size="2">edit1.Text:= myinifile.readstring('程序参数','用户名称','缺省的用户名称');</font></p>
<p><font color="#333333" size="2">edit2.text:= inttostr(myinifile.readinteger('程序参数','已运行时间',0));</font></p>
<p><font color="#333333" size="2">checkbox1.Checked:= myinifile.readbool('程序参数','是否正式用户',False);</font></p>
<p><font color="#333333" size="2">end;</font></p>
<p><font color="#333333" size="2">procedure TForm1.FormDestroy(Sender: TObject);</font></p>
<p><font color="#333333" size="2">begin</font></p>
<p><font color="#333333" size="2">myinifile.writestring('程序参数','用户名称',edit1.Text);</font></p>
<p><font color="#333333" size="2">myinifile.writeinteger('程序参数','已运行时间',strtoint(edit2.text));</font></p>
<p><font color="#333333" size="2">myinifile.writebool('程序参数','是否正式用户',checkbox1.Checked);</font></p>
<p><font color="#333333" size="2">myinifile.Destroy;</font></p>
<p><font color="#333333" size="2">end;</font></p>
<p><font color="#333333" size="2">procedure TForm1.Timer1Timer(Sender: TObject);</font></p>
<p><font color="#333333" size="2">begin</font></p>
<p><font color="#333333" size="2">edit2.Text:=inttostr(strtoint(edit2.text)+1);</font></p>
<p><font color="#333333" size="2">end;</font></p>
<p><font color="#333333" size="2">end.</font></p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/312322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-02-08 14:36 <a href="http://www.blogjava.net/keweibo/articles/312322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>