说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi编程技巧十则

HTML文档下载 WORD文档下载 PDF文档下载
Delphi编程技巧十则

Delphi作为一门新起的Windows编程语言,由于其集众多的优秀特性于一身,因而越来越得到广大编程人员和发烧友的青睐。以下十则技巧涉及的面比较广泛,希望能够对Delphi的爱好者有所裨益。

1.类似于vb.中的doevents功能。

大家或许发现,在Delphi中没有类似于vb.中的doevents 函数,这样有的时候,我们将无法使Windows响应多个同时发生的事件。其实,在Delphi的application对象中包括类似的一个方法:ProcessMessage,你可以通过调

用Application.ProcessMessage来完成象vb.中的doevents一样的功能。

2.在Delphi中调用NetscapeNavigator。

随着Internet的火爆,有没有想过在你的Delphi程序中启动Netscape浏览器,显示出你指定的WWW地址的主页。下面这个程序能够完成这一功能。

programNetscape;

usesDDEMan;

procedureGotoURL(sURL:string);

var

dde:TDDEClientConv;

begin

dde:TDDEClientConv.Create(nil);

withddedo

begin

//specifythelocationofnetscape.exe

ServiceApplication:′c:ιns32ιprogramιnetscape.exe′;

//activatetheNetscapeNavigator

SetLink(′Netscape′,′WWW—Activate′);

RequestData(′0xFFFFFFFF′);

//gotothespecifiedURL

SetLink(′Netscape′,′WWW—OpenURL′);

RequestData(sURL+′,,0xFFFFFFFF,0x3,,,′);

CloseLink;

end;

dde.Free;

end;

begin

GotoURL(′http://www.yahoo.com/′);

end.

3.格式化整数输出。

比较大的数字在输出时会显得不易阅读,在Delphi中显示带分节号的数字是相当简单的一件事,如下即可:xxxxx.caption:ΚFormatFloat(′#′,524667500)。

4.在编译时获得提示。

在Delphi2.0中,编译时,可以让编译器告诉你一些提示,比如哪些变量声明了,却从来没有使用过。我们知道,可以通过菜单中的选项来控制是否要Delphi这样做,但如果由于一些特殊需要,你只要在指定的代码段需要Delphi这样的提示,怎么办呢?请参考如下的程序。

{$HINTON}

procedureTform1.Button1Click(Sender:TObject);

var

X:integer;

begin

end;

Reg.WriteString(′desktop′!洌?′);

Reg.Free;

SystemParametersInfo(SPI—SETDESKWALLPAPER,0

,nil,SPIF—SENDWININICHANGE);

end;

6.获得最后使用文件的日期。

在Win95中有一项新的功能,就是可以获得访问文件的最后日期。著名的CleanSweapforWin95软件中就是靠这一功能来作为判断某个文件是否被经常访问的依据之一。

在Delphi中,我们可以通过下面的程序来达到此功能。

functionGetFileLastAccessTime(sFileName:string)

:TDateTime;

var

ffd:TWin32FindData;

dft:DWord;

lft:TFileTime;

h:THandle;

begin

//getfileinformation

h:ΚWindows.FindFirstFile(PChar(sFileName),ffd);

if(INVALID—HANDLE—VALUEΙΛh)then

begin

//we′relookingforjustonefile,socloseour″f

ind″

Windows.FindClose(h);

//converttheFILETIMEtolocalFILETIME

FileTimeToLocalFileTime(ffd.ftLastAccessTime,lft);

//convertFILETIMEtoDOStime

FileTimeToDosDateTime(lft,LongRec(dft).Hi

,LongRec(dft).Lo);

//finally,convertDOStimetoTDateTimeforusein

Delphi′snativedate/timefunctions

Result:FileDateToDateTime(dft);

end;

end;

GetFileLastAccessTime()将会以Delphi的TdateTime

格式返回你所指定的文件的最后访问日期。

7.丰富多彩的标签。

我们已经不满足于Delphi提供的简单的标签,能不能在标签中有不同的字体,有不同的颜色,以此来丰富我们的表现能力。回答是肯定的,并且用不着第三方提供的控件,我们只要巧妙的利用Delphi自己提供的TRichEdit就可以了。首先将TRichEdit控件的边框去除:RichEdit1.BorderStyle:bsNone;同时设置只读属性为真:RichEdit1.ReadOnly:ΚTrue;然后,你利用write之类的软件制作好RichText格式的文本,通过以下语句就可以显示出来了:

RichEdit1.PlainText:False;

RichEdit1.Lines.LoadFromFile(′c:ιtest.rtf′);

8.如何防止Win95显示严重错误。

不管你的程序如何反复调试,交给用户之后,总有可能发生你意想不到的错误,如何避免Win95显示出白色的窗口,告诉你的用户发生了难堪的意外错误呢?我们可以这样做:

var

wOldErrorMode:Word;

begin

//tellwindowstoignorecriticalerrorsandsavecurrenterrormode

wOldErrorMode:SetErrorMode(SEM—FAILCRITICALERRORS);

try

//codethatmightgenerateacriticalerrorgoeshere...

finally

//gobacktopreviouserrormode

SetErrorMode(wOldErrorMode);

end;

end;

主要是利用SetErrorMode()来完成这一功能。

9.刚才用鼠标击了哪一个对象。

在Win95中,鼠标的右键起到了很大的作用,但是,由于历史的原因,对于右键的使用即使在Delphi中,也还不够有效,下面的程序可以告诉你如何知道刚才鼠标右击的对象名称。首先建立一个popmenu,然后以下的代码就可以告诉你刚才右击的对象名称:PopupMenu1.PopupComponent.ClassName。

10.检测CD-ROM或是其他磁盘是否有过变化。

最简单的检查CD-ROM或是磁盘是否有过变化的方法是检查其volume号码。你可以简单地运用下面的函数来返回磁盘的volume系列号码GetDiskVolSerialID(′E′),函数代码如下:

functionGetDiskVolSerialID(cDriveName:char)

:DWord;

var

dwTemp1,dwTemp2:DWord;

begin

GetVolumeInformation(PChar(cDriveName+′:ι′),

Nil,

0,

ΝResult,

dwTemp2,

dwTemp2,

Nil,

0);

end;

高德携手阿里云发布“LBS云”,账户打通只是第一步 最后2天!2013移动开发者大会5折抢票倒计时 大数据如何改变在线广告业? 摩托罗拉推开源硬件平台计划Project Ara 七个垂手可得的敏捷开发工具 微信新版公众平台调整细节381处 300/次认证费引争议 libgit2:纯C语言实现的Git开发包 MongoDB的得与失 开箱即用!Android四款系统架构工具 谁说Kinect只是玩物?微软研究院使用它实现口语手语实时翻译 新浪微博推出粉丝服务平台 引发两微PK大战 MDCC2013移动开发者大会最新日程发布 门票优惠最后1天 英特尔CEO:EUV光刻技术或助力芯片突破摩尔定律 从微软大数据日看到的,银行、交通、医疗实践之路 IDC:iPad市场份额遭Android平板蚕食 滑至29.6% [TUP第30期]直击移动应用开发难点 探讨跨平台最佳解决方案 用动态语言编写程序,命名更重要 命中率80%,磁盘I/O减半,Flashcache的发展史 这次它很低调:谷歌正式发布Android4.4和Nexus 5 iPhone 5S来了,iPhone 6还会远吗?概念机来袭 [开源推荐]PhysicsJS:基于JavaScript的强大的物理引擎 望虚窥实!专访Oculus Rift创始人Palmer Luckey 利益至上,开源也不免于此 开发者必备,超实用的PHP代码片段! 福利来了!AngularJS资源大集锦 移动周报:“360儿童卫士”手环的是与非 Ion Stoica和他的数据故事(上) 开发者必备:测试网站速度的五个免费在线工具 谷歌员工曝光在谷歌工作那些最糟糕的事情 MDCC 2013全民移动 玩转智能硬件展 如何降低白噪声对网站用户体验的影响? 请教啦! 投影仪投出的图像中间部分呈粉红色,是不是投影仪坏了? 在MYSQL中我想修改root密码,可是总报错说user表是read only,如何把只读的属性去掉? 关于开发网络麻将游戏需求的问题。。谢谢。 关于jsp或applet调用本地DLL的问题 在BCB中如何添加自己的类? 关于APPLET从服务器下载图片的问题! 建议下一次改版的时候考虑一下这个问题:CSDN 的很多页面好像用NetScape不能浏览? 我不用IE很多年了, 因为太容易死机 有没有做股票的朋友? 急!!!50分求购一个在程序中实现按下按钮功能的小程序,多谢了 在图象上的汉字显示问题 请问谁知道把AVI文件转换成BMP位图数据的算法 圣诞快乐 用什么工具可以从exe文件中把资源文件,如图像、图标提取出来? Word与Delphi的结合!高手请进! 贴子为什么掉到第二页上再UP就回不到第一页去了?见龟!——千山一刀 ^^^^^^^^^如何配置sybase的clinet端????^^^^^^^^^^^^^^^^^^^^ 进程与线程 在win2000系统下,构建asp+sql的web站点,但在web页中无法显示出小数点前的零? 如何配置sybase的clinet端? 关于webbrowser。 TO:riolee(随风) 关于directshow的 开始菜单中的运行找不到 请问各位谁能提供 CString 里有一个operator LPCTSTR,难道这个LPCTSTR也可以被重载,它不是操作符啊,也不在可被重载的范围中啊? 请问到何处用蚂蚁下载photoshop6.01软件 在UPDATE的时候,如何返回受影响的记录个数?[Oracle8i] 请问各位谁能提供jpeg文件格式的中文说明??????????????????? [question]tmd的,有人惹我,怎么办 Windows CE, Windows NT Embedded等嵌入式操作系统和相关开发工具在上海如何购买??? mobile web application 里的softkey到底是怎么回事呀 [心情不好]砂粉阿 告他[我好伤心] 将2进制(16位)转为16进制(4位),怎么做? 请教!( VC.NET 里面怎么使用 MSFlexGrid ? JAVA的版本问题 哪儿有C#单独的编译器下载啊 ASP新手提问! 有谁知道在DELPHI中得到包括硬盘、多媒体、主板等信息? 请问小新,以及其它delphi高手一个简单问题,我从网上下载了一个报表控件,请问该如何使用? 一个关于TWinSocketStream的问题 scjp考题一道!!!!!!!! 小弟初学,如何从CString 转化到 int .thanks a lot. 我要学习数据结构,算法,离散数学..... [不爽阿]今天圣诞,有人惹我 关于临时表的共享问题? 是不是我的问题太难了,没有人回答? 请举例说明:接口是怎样实现多重继承的? 听说最近由于IT行业不景气,程序员的工资缩水了?是真的么? 这样写有什么不对?? delphi的dll库返回后调用程序出错!加了一行无关代码却正常!求教各位大狭! 塔尼包姆出了不1本计算机结构的书,还有1本MICROSOFT的 Microsoft Windows 用户界面开发 请问是否很好 周记是概括的写一周的事 还是写一周中其中一天的事 36种动物猜谜语大全 谁帮我猜猜不走山路走险路 愿走斜路和直路 阳春三月它行走 四季花开到处走 从1月21日起到3月4日一共有几个星期零几天 《手指》中的描写外形的词语六年级下册的第五课 36种动物猜谜语大全.,.急第一题;家里山下溪里溪.鬼谷仙师称兄弟.爷娘养它太希奇.长年赤膊过光阴.第二题;生当济世做雄男.厚禄高管不可贪.酒色钱财羞论取.忠肝义胆乃为先.第三题;野营 10月份有31天,合几个星期零几天 周记可以写什么事?日常生活中的事 36种动物猜谜语答案笑一笑来十年少,劝君千万节省笑,如果高兴不停笑,年龄大概没有了. (1+根号2)分之1+.(根号99+根号1000)答案等于9 讲解一下!谢谢 扳一扳手指就数得清,形容数量少,是什么词语 36种动物猜谜语大全要谜面和谜面相对应的谜底 一个谜面最少3个谜底我要谜面和对应的迷底 一个迷面2个谜底以上 .36种动物猜谜语全部 稍微放松一下便立即消失了.请用意思相同的词语或成语 猜谜语大全及答案三十六种动物 36动物猜谜寺庙旁边一头牛,二人抬着哑木头,未曾出门先开口,不知该往哪里走.送信哨音报喜讯,东去春来又逢春,三把青菜两把米,换来元宝一大堆.一物好像猫儿头,有时行走赛过猴,白日黑夜到 1,2,3打一成语快 猜猜谜语什么锁没有孔/疑问 什么书没有字/疑问 什么心不会跳/疑问 什么情说不出/疑问 什么灯不会亮/疑问 ,答案会连成\x0c一句浪漫的话,/抓狂 求答 01.绿叶绿苗开绿花,六角六棱六丫叉,若要向我真姓名,正宫娘娘是我妈.02.十八女人八个丑,还有两个爱养狗,十个男人八个强,还有两个婚外恋.03.莫说生前赡养差,死后三天有吹打,莫说生前吃的差 最早把一年分成十二个月,把一年定位365天的是() 帮忙猜猜谜语二画大,二画小.打一字短一些,再短一些.打一字约十二时.打一姓后羿介绍拿手功夫 打一姓上面小山,下面才是山 打一姓头在海里游水,尾在天上放光.打一姓左边绿,右边红;右边 一小时为什么是六十分钟,而不是一百分钟?一天为什么二十四小时?一小时为什么分为六十分钟,而不是一百分钟?一天为什么会使二十四小时,而不是别的? 小学三年级周记是不是一周写一次,就是写这一周中的一件事? 一个真分数乘真分数,积一定() A 大于1 B等于1 C 小于1 D无 法判断 据测算,我国每天土地沙漠化造成的经济损失约为1.5亿元,按一年365天计算,我国一年因土地沙漠化造成的经据测算,我国每天土地沙漠化造成的经济损失约为1.5亿元,按一年365天计算,我国一 三次根号1570保留三个有效数字是多少 谁把一年分为12个月的、一年分为365天?请说明白! 猜谜语,不难哦,猜猜~成语1.家家有房住,人人有工作.2.欲穷千里目,更上一层楼.字1.明月高照2.三日当中,只有一日有空3.气管炎4.千里一线穿 周记 写一周发生的所有事还是? 几个真分数连乘的积与这几个真分数连除的商相比()A积大于商 B 积小于商 C 积等于商 D 无法比较 我国每天因土地沙漠化造成的经济损失约1.5亿元,若1年按365天计算,用科学记数法表示,我国一年造成的经济损失损失约为多少元? 三次根号7分之25得多少,保留4个有效数字 一年分为12个月,大月30天,小月29天,闰年增加一个月,是哪部历法规定的A 夏历 B 殷历 C 公历 D 太阳历 猜猜谜语第一个:有耳能听到,第二个:画时圆,第三个:哑巴有,聋子无;有口能请教,写时方,跛子有,麻子无;有手能摸索,冬时短,和尚有,道士无.有心就烦恼.夏时长.以下字作答:日、个、门 写一篇周记,有关一周内发生的事,300字以上 一年365天,又分为12个月,每月30天……如此周而复始,连续不断.它是怎样算出来的?一定要是比较详细的内容,也要保证准确 我国每天土地沙漠化造成经济损失为1.5亿元,若一年按365天计算,我国一年因土地沙漠化造成经济损失相当于多少个年收入为10000元的劳动力的收入?(用科学记数法表示) 求周记500字 写一周发生的事情 两个真分数相除,商一定大于1对吗 据测算,我国每天因土地沙漠化造成的经济损失为1.5亿元.据测算,我国每天因土地沙漠化造成的经济损失为1.5亿元,若一年按365天计算,用科学计数法表示,我国一年因土地沙漠化造成的经济损失 周记是写一件事还是一周的事啊?我看的范文都是想日记一样,但还说要记录下一周的收获,到底怎么办啊?我很急啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 两个真分数相除,商一定大于其中任何一个真分数.(判断) ( )怎么判断? 1997分之1等于A分之1加B分之1(A>B>0),求A除以B等于? 怎么写周记?(一星期的总结.事物等)谢谢了! 两个真分数相除的商,一定大于这两个真分数对么? 猜谜 猜中者高赏不要江山美人(打一汽车名)拦河坝(打一字) 周记!一周的事已经忘了!怎么写啊最好多来几篇 两个真分数相除,商一定大于被除数.对还是错? 据测算,我国每天因土地沙漠化造成的经济损失约1.5亿元,若1年按365天计算,用科学记数法表示,我国一年造成的经济损失相当多少年收入为5000劳动力? 周记是写一周7天的事情还是一天的呀 判断题 两个真分数相除,商一定大于被除数. 猜谜语:哥有弟没有,高有矮没有,河有山没有,吃有穿没有 弯着手指头计算数目,形容数量很少.是什么词 把一年分为十二个月,把一年定为365天,编制出古代太阳历的是?有哪些? 猜谜语,然后用谜底组几个描写秋天的四字词语.1.太阳照着北京.( )---------------2.头上一顶帽,忠诚又可靠.( )-----------3.左边绿,右边红,右怕水,左怕冲.( )--------- 什么是周记?周记可以写哪些内容? 一年12个月,一天12时辰,24小时,东西方时间一致性是巧合吗? 猜谜语什么车不能载人 可以弯着手指头计算数目.请用意思相同词语或成语 一年有多少个月?一年有12个月.英语 四位数除以80最减去整数最乘以80等于48的有那些
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn