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

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;

CocoaPods 0.36正式发布,实现Swift和iOS 8动态框架支持 C++入门学习书籍推荐 GitHub是如何征服Google、微软和其它公司的 约见越狱大神!2015 MSS移动安全峰会议程披露 Spark 1.3更新概述:176个贡献者,1000+ patches 从游戏设计到星际探险,微软HoloLens全息技术将改变什么? 触摸屏技术未来?详解Apple新手段Force Touch 专访云适配CEO陈本峰:紧跟HTML5热潮,Web组件化知多少? QQ音乐5.0全新设计过程要点解析 GDC 2015感悟:从0到1,VR投入手游开发路漫漫 TestBird发布手游真人众测平台——附中国手游兼容性测试白皮书 与用户的再一次连接,微软的免费升级计划背后 颠覆App!LayaBox用Flash开发重度HTML5游戏 WinHEC:微软小娜与小冰正式登陆Windows 10平台 Coursera工程师董飞:典型硅谷公司大数据实战分析 微软开源Visual Studio构建工具MSBuild 死而复生!下架6月,Launcher重回App Store 虚拟投影、高保真耳机!新型可穿戴家庭影院Dashbon Mask 【程序员电子刊精选】躺枪的互联网思维 Algolia的分布式搜索网络架构 对抗苹果?豪雅联合Google、Intel开发智能奢表 VR产品技术解析之三星Gear VR 雅虎北研即将关闭 人才抢夺战迅速拉响 移动应用中的AR开发,5款最受欢迎工具推荐! 中国黑客Pwn2Own再创佳绩 Keen Team三年五夺魁 星环CTO孙元浩:技术解析Transwarp Inceptor是怎样炼成的 第七届中国云计算大会将于6月3-5日在北京召开 两大设计模式 塑造高可读性的网页布局 IP争夺战:任天堂与DeNA联手意味着什么? UNITE 2015干货不断,三天日程抢先看! iOS 8发布近一年,苹果HomeKit都带来了什么? 我收到的信都是?号,怎么看???? VB中是否有移位操作符??是否有_能够得到数据类型宽度的函数? 哪里有core java的e版down啊? 有事好商量!请进! DLL编程错误,请高手指教一下!! 活见鬼,真气人....... 问一个trigger问题? 问一下:我的char*都用_T("asdfsafd")表示了,资源也没任何问题,可有时候运行程序显示乱码 在论坛里,发一个帖子新开一个窗口,当发完后让原来那个窗口刷新一下 我的机子到底怎么回事???? 我试试.. CListCtrl中如何选定整个一行? 来到济南天气太热,特来送分 ★★★★★ 见于现在伪ID和盗用密码的现象十分嚣张,我提议…… ★★★★★ 请教各位,我用vb6.0访问ms sql7.0数据库,为什么有时出现,“过期,数据已超时?” 请问COM和DLL有什么区别和联系?(30分) 关于侯老师 win95-a-developers-guide 一书的源配书... ISAPI中不能存取ASP中的Session、Application变量?高手你老人家在哪里? 大家来看看这些招聘题目合不合适 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一 activeskin里的skinbuilder有谁用过???来讨论吧 我在msdn上看到vb中的字符串有两种:定长字符串和变长字符串。请问如何分别声明这两种类型? 怎样在ADO中引用已打开的recordset的某一字段值,请给几个例,谢谢了! seedundersnow and holyfire help me!about 8253! 谁有cute ftp 4.2.6 beta的注册码 请问如何把页面查询到的记录导入到Excel中呢? 有用过TAdvStringGrid的吗?OnGetEditorType( )为何不被调用? 请教高手如何用Xsl编制函数控制Xml??急急 哪位给一个MD5的例子!谢谢了 长春的李延生来领分 求救:一个VC中多线程的问题 提个问题,原来对VC尤其是界面和C++语法这一块比较熟,现在由于公司需要转C++BUILDER,难不难,需要熟悉哪些 [总300分,会继续加分]哪位大哥用编程实现过创建SQL Server的DTS package并且run the package的全过程[急] 能不能使用html 压缩中提到的文件头有什么作用 , 保含哪些信息 菜鸟问题1 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一。。。。。。。 关于:import java.util.StringTokenizer; 问题! 如何实现在某特定时间(如每月1号,或7天后)执行特定asp程序? 在开发工具中如:(vc,jsp)中如何得到oracle中自定义函数的返回值 当form被移动的时候会相应什么事件的? 关于使用mscomm32.ocx中的一些问题 类似股票信息显示系统的问题(图形显示) 强烈抗议:无怨无仇,为什么冒用我的ID 写一些乱七八糟的东西????? 一个简单的线程问题! 请问高手:两个类之间的关联关系如何实现? 各位请问, 我的系统要求支持三种语言, BIG5,GB2312,ENGLISH,数据库应该怎样设计!! 求救!!!vfp ,控件 optiongroup1, 属性 ButtonCount=N,如何给第N个OPtionN.Caption赋值 假如上天给你一个机会。。。请看过来。。。 如何配置IIS 使其利用TOMCAT 支持JSP AND SERVLET ? 请问:ORACLEH中保存每列的数据类型的系统表名叫什么? 设x1,x2是关于x的一元二次方程x的平方-2mx+m-1=0的两个实根,则(x1+5x2)(x2+5x1)的最小值为? 解方程:5x2+7x+12=0五x的平方+七x+12=0 (2012•台湾)判断下列哪一组的a、b、c,可使二次函数y=ax2+bx+c-5x2-3x+7在坐标平面上的图形有最低点?(  )A.a=0,b=4,c=8 B.a=2,b=4,c=-8 C.a=4,b=-4,c=8 D.a=6,b=-4,c=-8 设X1,X2为方程x²(平方)+X-3=0的两个根,求X1³(立方)-X2²(平方)+30的值 x减0.7x等于3.6 分解2x四次+3x三次减5x2次+3x+2 设函数f(x)=x3-6x+5,xεR1;求函数fx的单调区间2,求函数fx在区间[-2,2]上的最值 x-0,7x等于什么 若x3+5x2-12x+m有因式x-3.则m=? 求函数f(x)=x3-5x2+8x-4在【0,3】上的值域 X-0.7x等于多少 下列何式为5x^2+17x-12的因式?A:x+1 B:x-1 C:x+4 D:x-4 说出理由啊 , 设函数f(x)=x3-6x+5,xεR 1;求函数fx的单调区间 2,求函数fx在区间[设函数f(x)=x^3-6x+5,xεR 1;求函数fx的单调区间2,求函数fx在区间[-2,2]上的最值 5x2=1打 成语5x2=1打一成语 分解因式5x2+6xy-8y2 已知sinθ,cosθ是关于x的方程x^2-ax+a=o的两个根 θ求1.sin^3(θ)+cos^3(θ)的值2.tanθ+1/tanθ的值 f(x)=2^2x-5x2^x-1+1,它的最小值是?RT.实在算不出来了,只能求助各位大大了0.0f(x)=(2^2x)-(5x2^x-1)+1 1分之1等于1是什么成语 已知关于x的方程2x^2-〔(根号3)+1〕x+m=0的两根为 sin θ,cos θ ,θ∈(0,2π)1.sinθ/(1-cotθ)+cosθ/(1-tanθ)的值2.m的值3.方程的两根及此时θ的值 用秦九韶算多项式f(x)=6x2+3x2-5x2+4当X=4的值时需要把多项式改写成什么 5x2 =1打一成语 已知 θ∈【0,2π】sinθ,cosθ是关于X的方程X方-KX+K+1=0的根,求角θ 已知函数f(x)=0.5x2-x+1.5的定义域和值域都是[1,-b],求b的值. 1*1等于1,根据提示写成语还有12345679 已知关于x的方程2x^2-(√3+1)x+m=0的两个实数根为sinθ和cosθ,θ属于(0,2π)求方程的根及θ的值 已知f(x)是二次函数,且f(x)+f(2x)=5x2+3x+2,求f(x) 0+0等于一什么成语 设x1、x2 是一元二次方程x2+4x-3=0的两个根,2x1(x22+5x2-3)+a =2,  则a = .设x1、x2是一元一次方程X平方+4x-3=0的两根,2x1(x2的平方+5x2-3)+a=2,则a=我知道怎么算了 a=8 心情好啊 f(x)=5(x≤1) f(x)=1/x-1(x﹥1) f(5)= f(1/2)=f(x)=5(x≤1)f(x)=1/x-1(x﹥1)f(5)=f(1/2)= 拍立得相机拍出来的照片效果相当于数码相机的多少像素 设X1、X2是一元二次方程 X - 4X - 3 = 0 的两个根,2X1(X2+5X2-3)+a=2,则a=___ f(x)=x(1-x)(x大于等于0) f(x)=x(1+x)(x小于0)判断f(x)奇偶性 9 8 7 6 5 4 3 2 1中间加上加减号等于21咋写 急 设x1,x2是一元二次方程x²+4x-3=0的两个根,2x1(x2²+5x2-3)+a=2,则a= 已知f(x)=x(1/2x-1+1/2)⑴判断f(x)的奇偶性 ⑵求证:f(x)大于0 5X^2-2根号15X+3等于0, 关于x的实系数一元二次方程x²+ax+2b=0的两个实数根分别位于区间(0,1)(1,2)则b-2/a-1的取值范围是 已知函数f(x)=1/2^x-1+1/2 求f(x)的定义域 判断函数f(x)的奇偶性 证明当X大于0时f(x)大于0 若y等于根号下5x减1再加根号下1减5x,则5x加y等于几 关于x的一元二次方程5x²-ax-1=0有两个不同的实根 一个位于区间(-1,1)另一个(1,2关于x的一元二次方程5x²-ax-1=0有两个不同的实根 一个位于区间(-1,1)另一个(1,2) 则实数a的取值范围 求 函数f(x)=x(x大于-1小于等于1)的奇偶性是A :奇函数非偶函数B:偶函数非奇函数C:奇函数且偶函数D:非奇函数偶函数 已知A=4x²-10x+8,B=5x²-6x+8,C=2x²-3,①求(a-b)*C②当X=-2时,求(A-b)*C 设实系数一元二次方程x^2+ax+2b-2=0有两个相异实根,其中一根在区间(0,1)内,另一根在区间(1,2)内,则(b-4)/(a-1)的取值范围是我知道这题可用线性规划做.想问下,为什么不能用韦达定理,也就是 已知函数f(x)对任意实数X,y恒有f(x+y)=f(x)+f(y)且当x大于0f(x)小于0 判断f(x)奇偶性并证明判断f(x)的单调性,并证明之 4/5x2=4x2一5x2=8/10=4/5是对还是错 实系数一元二次方程x²+ax+2b=0有两个根,一个根在区间(0,1),另一个根在区间(1,2)内,求:(1),点(a,b对应的区域的面积?(2).b-2/a-1的取值范围.(3).(a-1²)+(b-2)²的值域 请计算 +8!+9!+...+2006!的第十位+8!+9!+...+2006!的和的第十位,谢谢楼下的回答!请问是怎样得出n=45时最后的10位数据已经是全0了呢? 当x变化时,分式3x2+6x+5/0.5x2+x+1的最小值为多少3x2,0.5x2指3倍的x的平方,0.5倍的x的平方尽量按一元二次方程格式 把一元二次方程-5x2+x-3=0的二次项系数变为正数,且使方程的根不变,则变形后的方程为().这是选项:A.5x2-x-3=0 B.5x2-x+3=0 C.5x2+x-3=0 D.5x2+x+3=0 (-30)除以(3/1-5/1-15/1)等于多少 已知A=4x²-10x+8,B=5x²-6x+8,C=2x²-3,求(A-B)C分解因式 已知sina是方程5x2+7x-6=0的根求[sin(3π/2-a)tan(2π-a)]/[cos(π/2-a)cos(π/2+a)]的值 48*(7/12+5/600)除以2/3 1/8+(1/8+1/30)*1548*(7/12+5/600)除以2/3 1/8+(1/8+1/30)*15 6x-6.5x2=8求方程 已知方程5x2+kx-6=0的一个根式2,求它的另一个根及K的值 -30除以(3分之1—5分之1—15分之一) 已知A=1-x2,B=x2-4x-3,C=5x2+4,求多项式A-2[A-B-2(B-C)]的值,其中x=-1 超急! 设X1,X2是方程X的平方+X-3=0的两个根,则X1的立方-4X2的平方+19的值是 若sina是5x2-7x-6=0的根,则 已知多项式x2-(a-1)x^3+5x2-(b+3)x-1中不含x^3和x项,求a、b的值
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn