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

Delphi程序制作要点

HTML文档下载 WORD文档下载 PDF文档下载
Delphi程序制作要点

一、为什么选择Delphi

在开始任何一个项目之前,总会碰到选择开发工具的问题。各式各样的工具有其各自的特点,各有利弊。选择Delphi,各人有各人的理由,有的人是听说好,跑来看看;有的人是被迫的。什么时候人们会被迫使用Delphi呢? 对于我来说,

1)我不想在一个小Project中使用ODBC,我发现BDE效率很不错,于是很高兴。

2)我很讨厌OCX

VBX,一大堆别人的东西拷入用户的机器,让我很没有成就感。

3)我很少有机会作CView/CDocument形式的程序,而MFC对其它的支持差得惊人。

4)我很喜欢Pascal,我敲begin....end不见得比敲{ ...}慢多少。

5)C和C++网上资源太少,只能偶尔找到一些snippet

二、一些基本概念

A.面向对象的概念简单地说,Pascal原有的record类型,加上procedure和function就成了class 因此,一个class类的东东本质上是一个变量,Implementation里定义了这个变量的Details

Interface是变量的定义,告诉编译器在别人引用我时到哪里找具体的代码。一个Form引用另一个Form中的变量,实际上是两个Form型变量的元素的引用。B. Delphi的Class三大元素这三大元素是Property

Method

Event 这是你要使用一个控件最重要的信息。Property可读可写,Method引发一个procedure或function

Event允许用户定义回调函数。Property在Design Time时在Object Inspector中设,Method在程序中调用了解了这个概念,有助于你在看Help时不会晕头转向。C.关于Property的说明切记,Property的修改并不一定只是读写了一个变量,它有可能引发一大堆代码。在Property的定义中,一般是这样写的property Lookup: Boolean read GetLookup write SetLookup; 在这里,GetLookup和SetLookup是function,因此,有可能属性一改,事实上作了很多工作。D.代码的位置有时很重要在什么时候调用特定的代码是很重要的,Window整个都是由消息驱动的,永远不会被触发的代码根本不被编译到程序中去。你在Delphi 3中会看到它根本不被打上蓝点。而且代码是可以重入的!!!!以后会详细讨论这个问题。

三、从一个通讯录程序开始

不使用Delphi的数据库功能,对于初学者来说,实在有点可惜,Borland花了大量精力使数据库编程变得简单。数据库编程最好的教程是Delphi 1.x中带的Interactive Tutor(Delphi 3中好象没有)

它讲述得非常生动,每一位初学者都应该看一看。

看过这个教程,可以自己试着作一个通讯录程序。这样一个程序大家都有感性的认识,容易上手。

第一步,用Database Desktop建一个数据库,开一些Name

Tel

Addr

Memo 等字段,记住,千万不要用中文作字段名哦。

第二步,用Database/Form Wizard作一个坯子看看再说。你会生成一个Form

上面有一个DBNavigator

一堆Data-aware的控件和相应的Label(这个例子中,不建议用DBGrid) 第三步,右键单击Table1控件,打开Field Editor

选择Name字段,在Object Inspector中将它Display Name属性改为'姓名'

Transliterate属性改为False. 这是为了使StringField显示中文。依此类推,把你要改的字段都改过来。Label 的Caption也都改成中文。

第四步,把DBNavigator的VisibleButton中的除<-

->

<<

>>

+

-

之外的Button都去掉。

第五步,再运行这样你就作成了你的第一个中文通讯录。这个通讯录没有什么查找功能,显然很没市场,下面你给它加一个简单的查询功能。

第一步,加一个Button,Caption设为'查找姓名' 第二步,New一个Form

如Form2

上面加一个Edit

两个BitBtn

一个Kind设为bkOK

另一个Kind设为bkCancel

按你的需要修改显示的文字。

第三步,双击第一步中的Button

跳出代码段。写下以下代码:

if Form2.ShowModal = mrOK then begin

Table1.DisableControls;

Table1.First;

while not Table1.EOF and

(Pos(Form2.Edit1.Text

Table1Name.Value)>0) do begin

Table1.Next;

end;

Table1.EnableControls;

end; 第四步,在Unit1中的Uses中加入unit2;运行

四、写代码的一些要素

A.尽可能不要在(对新手来说,是绝不要) TMyForm=class(TForm)

.....

.....

..... end; 之外定义变量,尽量在Private段定义自己的变量和Procedure等。

B.任何情况下,不论多么艰难的调试情况,在begin回车之后,先打两个空格再写程序代码。end一定要和相应的begin呼应在同一列上。

C. Delphi是大小写不敏感的,但是多处引用时尽量保持相同的拼写。

D.不要自己去删Delphi自动生成的代码,解铃还需系铃人,如果不小心在哪里Double Click了一下,Delphi生成的程序会在Save Project和Build时自动删掉。(只要begin...end中间没写你自己的代码) E. FormCreat之前,它所包含的控件都还没有建立,是不能引用的。在Form1OnCreat 时,你不能用Form1.ListBox1....... 但是你可以写:

ListBox1......... 这是Delphi的约定,所以不要问我为什么。

F. Form1如果是MainForm

在OnCreat时是不能去引用Form2的变量的,因为这时Form2还不存在。

G. Form2.ShowModal后,程序会在Form2返回后才执行后面的代码,而用Show 可不是这样。

H.任何一段消息回调函数的代码都不要执行过长时间,如果迫不得已,在大循环的间隙,一定要调用Application.ProcessMessages 要不,程序会象死机一样。

五、Windows编程的重入问题

TTimer是用于定时反复执行一些代码,可是千万记住如果一段代码执行时间过长时,下一次Timer触发会重入这段代码,就是说如果Timer1Timer中没有Timer1.Enabled := False; 的话,可能会有两个进程在执行这段代码,如果共同访问一个变量,一个有可能在改,一个有可能在读,那么就会出现意想不到的问题。

类似的重入问题其它时候也会碰到,比如你在Show(而不是ShowModal)一个Form时,两个Visible的Form在共同访问同一变量,就会出现一些奇怪的现象。

新手最好先避开这类问题,省得麻烦。

用Delphi实现禁止用户关闭Window9X 用Delphi制作能够干净地删除自己的程序 用DELPHI 做一个简单的屏幕保护程序 用Enter键代替Tab键-Delphi资料 用修改文件时间的方法来加密文件-Delphi资料 用最原始的方法编制程序-Delphi资料 运用Delphi编写Windows NT中服务程序 在DELPHI编程中确定系统运行模式 在Delphi程序中调用控制面板设置功能 在DELPHI下读取与设置系统时钟 在Delphi中避免2000年问题的捷径 在Delphi中调用API函数 在Delphi中获取和修改文件的时间 在Delphi中控制扫描仪 在Delphi中实现对WIN9X应用程序使用权限的设置 在Delphi中实现对目录拷贝、删除和搬移的操作 在Delphi中使用自定义光标 在Delphi中用拼音首字符序列来实现检索功能。 在DELPHI中用线程排序 在Delphi中制作背景音乐 在Dephi中使用TStream读写数据的技巧-Delphi资料 在应用程序中跟踪MOUSE的坐标-Delphi资料 怎样建立回调函数-Delphi资料 怎样显示自定义鼠标光标(Cursor)-Delphi资料 找出消失的 Delphi 窗口 执行外部程序-Delphi资料 执行一程序并等待其结束-Delphi资料 制作一个不在任务栏及任务列表中显示的幽灵程序-Delphi资料 抓获全屏-Delphi资料 子目录级的文件查询的实现-Delphi资料 Delphi中ChartFX构件使用详解 一个关于udp重发的问题 如何在delphi程序里调用vc写的exe执行文件。 如何将query中的内容输出到文本文件,然后还能将该文本文件再导入进来?急急急!!!!!!!!!!! 急急急!!我的计算机找不到硬盘了45分 如何求任意多边形的重心 紧急求助:请问java有没有比较丰富的多媒体控件?比如录音的控件??? 急急急!!!我的计算机找不到硬盘了,45分 如何把一个字段的内容求和,然后把结果存入另一表! 请教,怎样把一个记录数组用VB读入ACCESS 2000数据库中? 关于货币类型的问题? the script too large ????????我快疯了。 什么地方有Sybase与Oracle的比较资料? 急急急!!!我的计算机找不到硬盘了,40分 问一下大家 复活节彩蛋 win2000 professional下如何配置weblogic6.0 jsp和javasript如何通讯? 急!!!如何把'¥100'字串转化为浮点型100.00 用OleContainer1将一个WORD文档存进数据库后如何将它从数据库中取出??? 关于SNMP的问题(请高手回答,送40分) 谁想过要戒水?戒成了吗?又渴了吗? 我用在各种机器上使用Win2000,从来没有down过, 真是太奇怪了??? 请问如何确定操作系统系统是中文的还是英文的? 向外国用户发注册码时候应该说些什么,才能让别人觉得你比较专业? 如何捕获ADO的异常信息 struct结构的数据存储是用的什么顺序方式呀? 能介绍几本关于BCB的适合初学者阅读的书吗? 高手进来,struct结构的数据存储是用的什么方式呀 高分!高手请进!!! Newton 有关StoredProc的 各位大虾进来看看,Debug时的错误~~~~~~~ First-chance exception 和 User breakpoint ,帮帮我啊!!! 虽然我也回复没有分,但有意思的帖子,但我对分数高的帖子更有热情,我是不是很势利?? 我的服务器是unix 哪位提供最简单的图片存入库中的代码 谁能得到拨号上网所使用的电话的号码? 关于视中图形(非图像)的缩放问题! 想不通啊~~ 谁来帮帮我~~~?? 哪里可以宕到:Robohelp Office(亚洲版),急!! 谁能告诉我PWS怎么用 小弟刚下载了j2sdkee1.2.1 ,但不知道如何配置,那位大哥愿意帮忙,详细讲一讲如何配置。 TOleContainer怎么没有滚动条呀 在哪里可以找到mschart5.cab? 明天在莫斯科将产生2008年奥运主办国,请猜是哪个城市主办!答对者有分!(可加到204) 请问有没有做电力系统方面开发的? IIS是什么 如何用VB向串行口发送一个数据? 如何隐藏CScrollView中的Scrollbar? Image控件放大后其ClipRect不跟着放大,问题之二: 请教VC高手:如何存取SQL Server中的Image类型数据? 想见你 —— 大勇,你在哪里? 请帮我把“一切因你而存在、一切因你而精彩”用英语翻译一下!急、简洁点就行、 英语翻译我梦想中的房子是要建在山水环绕的地方,那里山清水秀.采用中西,故现代结合的建筑风格.房子的主体部分用的材料以玻璃木材为主.房子外形与大自然融为一体,给人以赏心悦目的感 英语翻译做为一名自愿者,应当待人礼貌、友好,避免不得体的言行.要做到坚守岗位,热忱服务,不望履行自己的职责,热情的向旅游者介绍文化,历史和科学成就. 你永远是我最美好的曾经 英语翻译 英语翻译The housing area____ ____ ____ _____3,000 square metres. 英语翻译当2001年7月13号,国际奥委会主席萨马兰奇宣布2008年奥运会举办城市是北京的时候,全中国人民都特别兴奋和激动.这一天对中国人来说是永生难忘的日子!中国人盼望了100多年的奥运梦 太棒了!(英文翻译) 用英语翻译:1.最大的那个房间是他的. 英语翻译Pop is the short form of the word "popular".The pop revolution of the 1960s changed the pattern of English life .And pop has become part of British life .And pop has become part of British and American history .There has always been a clo 我认为我英语很棒.英语翻译 英语翻译前面还有一句:Here is my( )后面的中文就是"这是我理想的房间 英语翻译顾问设计策划工程经纪执行总监项目总监策划总监制作总监董事首席 英语翻译:我认为他们很棒. 英文作文《我理想的房间》 名片英文翻译以下职务: 国内部副经理 英语翻译(你们的孩子永远是最棒的) 我们的理想房间(用英语怎么说?) 名片上面英文翻译的职务怎么排序啊,高的在前面还是低的在前面;另外不同的职务并列间用什么标点隔开? 英语翻译 你本来看上去很棒 英语翻译请帮他们列一智囊长购物计划.Plase help( ) ( ) ( ) ( ) ( ). 名片上的职务用英语怎么写?团队主管客户经理 英语翻译This movie __is __ .He is __ it,__. 求英文翻译:感谢李明制作了这张手抄报 名片上公司名称英文翻译:浙江永东电器制造有限公司 中国的北京故宫真的很棒!用英语翻译 "制作一张电子贺卡"用英语翻译一下(跪求) 名片厂名的英文我想制作名片,不知道怎么把厂名改为英文的,例子:东莞市石排正大橡塑制品厂,在下面英文是这样的:DONGGUANSHIPAIZHENGDARUBBERPLASTICMANUFACTUREFACTORY我现在想做的名片是:东莞市厚 英语翻译1.to show how much we're going to miss her,let's have a surprise party for her next Friday the 28th.2.bring Ms.Steen to the party without telling her so that she can be surprised.3.I look forward to hearing from you all. 英语翻译急需翻译以下内容:设计说明,本设计从所给用地周边情况出发,合理安排了出入口位置,并结合水域设计,设计了主要交通路线.在水与主要道路的交汇处设置了中心境观.此外,我们将其 英语翻译北京市海淀区花园东路32号花园公寓A座1302 我将要离开你,希望你要过的很好用英语翻译怎么讲 英语翻译“因为它是某一个公司制作的” 名片地址英文翻译西安市南关正街大南门 3号楼18-A2室 我不是寄生虫,离开你我也会活的很好的英语翻译 英语翻译过得愉快乘游览车到山顶打字和接电话报时相当多负责掌管 英语翻译北京市大兴区滨河东里19栋1单元502室 玛丽正在等待她的生日蛋糕.英语翻译! 有真厉害 用英语翻译 英语翻译1.现在我们将为你介绍一些关于我们身边的插画,而这些插画都是我们现代80后以及90后的人普遍比较接受和认识的插画.2.现在为你们介绍的是在中国插花界以及在国外颇有影响力的著 生日蛋糕用英语怎样说 也许单身很好 怎么用英语翻译 英语翻译building scale 和 element scale有什么不同 能不能举个例子 在element scale里面的the public face,the approach又是指什么plan of the building - a diagrammatic plan showing the main funtions 屋子的主要功能?section o 我想要一个插着蜡烛的生日蛋糕英文翻译 希望你过得好点用英语翻译 英语翻译要是大家之作的! 英语翻译they _____ the birthday of their motherland _____ _____ songs 英语翻译The teacher tries many ways to ____ ____ not difficult for us ____ ____ ____. 建筑学062班 英语翻译怎么写呀 (急!) 英文翻译 "祝愿所有11月生日的朋友生日快乐" 这是学英语的好机会 英语翻译 英语翻译她身着粉色上衣,红色包裙,脚踏一双醒目的红色高跟鞋,远远看些就像一个圆圆的双层草莓蛋糕.乌黑的短发下有一张丰满的脸颊,鲜红的厚嘴唇格外突出,就像两根熟透的热狗.她的眼睛 英语翻译注意是将要. 英语翻译:“学英语是很好的,但得慢慢来,循序渐进” 谁能帮我用英语翻译一下面这篇文章.谢谢大家呢.我一直在等一个我深爱的人.不管是女子,还是男子,我从不寻找.因为我知道落空后的失望.我不怕相遇,不怕争吵.不怕离开,我只怕你站在我 翻译 最后,人们吃了她妈妈亲手做的生日蛋糕 英语翻译“你经常犯什么样的错误呢?”和“你认为学英语的最好建议是什么?” 英语翻译最后一周了,在这周里,我用三天时间把作业做完了,感觉真的很轻松.我参加了初中的同学举办的一次聚会,见回老同学,我真的很高兴,我们聚在一起烧烤,聊天,喝酒.可能因为太久不见面 其实大家都知道,我们都不是彼此的那杯茶 上句求英文翻译..麻烦了 有什么很好学英语的方法?对女孩子来说. 英语翻译不要用百度词典,错误太多┄我最喜欢的动物是松鼠,它们很可爱,也很聪明.它们喜欢吃松子,它们有一条大大的的尾巴和小小的身子.它们的颜色是棕色的,经常在树林里出没.我喜欢它
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn