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

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 6)....

二、一些基本概念

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在共同访问同一变量,就会出现一些奇怪的现象。 新手最好先避开这类问题,省得麻烦。

Cocos2D-X成全球第二大游戏引擎 仅次于Unity 亲爱的苹果,能不能别让应用太廉价? 陈晓影:一位女海归曲折的拓荒故事 IDG李丰:在中国,创业公司最好是一个One Man Company Google Drive新增“保存到Drive”按钮功能 可自行添加 腾讯CDC创始人唐沐加盟小米 总经理陈妍接任 老板我想辞职:因为小米100万元征集一张壁纸 移动周报:GitHub上最火的Android开源项目 免费才是王道:盘点开发者须知的25个免费数据可视化工具 Pivotal获通用电气1.05亿美元支持 或将改变大数据和物联网的游戏规则 大掌门与阿里云和解:云生态系统呼之欲出 刘有涛:恩信科技云计算大潮中扬帆起航 Cloudera释放Impala 1.0:与Hadoop完全整合,各方面完爆Hive 云通讯平台:让你的应用会说话 触宝用户过亿,CEO王佳梁常说的词是“创新” 全国电脑健康日启动 360搭建电脑维修开放平台 C语言实现归并排序 360石晓虹:针对移动Apps的DDoS攻击将成重大威胁 更社交化:谷歌将推出Google Play平台服务 C语言对磁盘文件进行快速排序 传Google已关闭短信搜索服务 PayPal首席安全官:靠密码验证身份即将寿终正寝 DRM你又赢了:其API纳入HTML5标准 豌豆荚王俊煜:洗白白其实是一个计划外的产物 抢Google等巨头生意,纽约大学小伙挖掘并出售自己数据 noBackend:前端优先的开发模式 C、CPP const 详解 三星5G技术获得突破性进展 未来传输速度可达10Gbps 5月14日:1984年美国社交网站Facebook创办人Mark Zuckerberg出生 Chartkick:一行代码即可绘制出漂亮的图表 用友UAP将打造开放平台 建应用商店销售企业级应用 有用过poolman的吗,为什么我的配置文件找不到? 如何在IBM ThinkPad R32 C7C 上装RH8。0 请问struct{}的结构问题? 我用JB7,可是Edit的时候,光标总是对不齐,怎么解决啊,,急急急 急救!怎样把光标移到TextBox已有的内容后面? 为什么对数据库1没有操作权限???急急急急 高分请教高手:关于MDI中父对子的控制及datagrid(window应用)中的自动update 请问struct{}的结构问题,如何变成delphi的结构? 帮我看看这段代码怎么不行, 求救!!有那位ASP的高手可以帮我编出在dreamweaver mx上可以运行的简单留言板,给分很多的啊,快来帮帮忙了! xp 仍然支持 NetBEUI 协议吗? 关于向型网络架设问题! 我的windows2000怎么了? 我想设定IE的大小,总是有缺憾。 中了什么病毒 请教关于XML验证的问题 高分求MS Systems Management Server 2。0 有会用pgAdminII的没有? 大家一般怎样统计代码行数标准是怎样的 局域网连接的问题(网中网) 寻免费杀毒软件,要能更新的,中英不限。 如何模拟键盘输入。。模拟过程中的一些问题。。有实践的朋友,讨论一下。 一个很笨的问题关于程序中的重新登陆 路过的走过的都进来看看我,珠海的或北京的帮个忙~ 如何让Form2成为Form1的真正子窗体? 对于我来说是个难题,高手请看看。急用。 用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!! 用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!! ftp可用,但http站点却不能用,为什么?急急急!!! 兄弟寻求ActiveX文档方面的帮助,先谢了 用到水晶报表控件的工程在发布时要用到哪些动态库? 大讨论:到底要不要考高程? 学好c++ builder还要掌握pascal??? 如何做"标签窗口"????请高手明示!! 急救!怎样用shell 命令读取 *.chm 格式的帮助文件? 请教各位高人哪种51单片机抗干扰性能好点。 回答就有高分!一个简单的问题! 急!Word档案变成X档案了!-------请微软专家也过来帮忙 双重系统引导的问题 现在网上还有没有好的免费个人主页空间?最好支持asp等等,空间小点没关系,高分求! 请问什么地方有PPP over Ethernet(PPPoE)协议 技术资料!!! 请问为何我的程序在Release版本下出错? 再帮忙看看这段代码,即使密码正确也显示"错误:请确认阁下的身份!" 怎么回事啊? 请教这个API(ShowWindow)怎么使用? 谁能告诉我 virtual(虚) 析构函数目的何在干什么用的? 救急 装一个rose要多大空间啊 关于CJ60库实现Visual stduio的界面的问题! 请问要实现在空表上建立数据时,如何做到text1.text能显示“1000”,即Number的“标识种子”值! 这个UDL文件错在哪? 推荐一篇文章《麦子的颜色》 荣誉和名誉是什么意思 万事如意和心想事成是一个意思吗 he is happy,because he is g_____ on a trip.怎么填求人帮 名利、荣耀的真正含义是什么?真正的含义! 求祝福语中的词汇 四个字的 如心想事成 万事如意 合家欢乐最好是16组以上希望各位文学朋友们 能帮兄弟 提供几组 祝福语中的词汇 四个字的 如心想事成 万事如意 合家欢乐最好是16组以上 昨天傍晚下了一夜的雨 修改病句 该怎么改? 名誉和荣誉有什么区别 群星?成语 He is rich,_____he isn\'t happy.怎么填? When are you going to be when you grow up? 某人计划骑车以每小时12千米的速度由a地到b地,这样可在规定时间到达b地,但因事情将原计划推迟20分钟只好改为每小时15千米前进,结果比规定时间早4分钟到达b地 求距离 校园里屹立着一棵棵白杨.修改病句) 真理英语用什么时态? 求一段爱情的英文对话 男女各十句左右感人的 搞笑的均可 越多越好 修改病句 校园里耸立着一棵棵高大的白杨树. 口碑互动的IWOM是什么意思? 求一段英文爱情的文字或对白要求4~8句`` 修改病句:校园里屹立着一棵棵白杨. Are you going to take a trip by 连词成句:trousers,here's,pair,for,of,a,you(.) 相处的很好能说get along very well with.这里的very well Are you going take a trip summer怎么回答 A pair of trousers 作主语算第三人称单数吗?The trousers A pair of shoes 青花瓷属于白瓷还是青瓷?我们历史书上把中国瓷器分成了青瓷与白瓷2种,请问中国瓷器的分类到底有哪些角度?(除了五大瓷窑的分法……) 月球绕地球运行的平面与赤道平面重合吗?如果不重合那夹角是多少度? 跨文化交际中英语口语能力的培养 青花瓷、白瓷、青瓷、粉彩瓷有何区别?它们都产自哪里?如何辨别? 名誉的含义 he is poor .he si very happy.合并一句 青瓷 青花瓷 白瓷 彩瓷的特点各是什么?这个是美术鉴赏只要简单告诉我特点就好了!谢谢! 我说的是韩国一部电视剧《花样男子》里,金丝草对尹智厚说的这个名誉消防员... ____he is very poor,_____he feels very happy.快A.Although;but B.Although;/ C.Because;so D.Because;/ 各种青花瓷、白瓷、骨质瓷等等的,都什么属于陶瓷啊,骨质瓷和陶瓷是什么关系呢? 名利之命什么意思 He is very happy 否定句 青花瓷的出现早于青瓷, 有关星辰的成语 什么漆可以涂在白瓷胶上,防止厨房台面缝隙的白瓷胶霉变? lie和lay的区别 When are you going to return the balls?改为Shally asks us……的句型 This T-shirt is not large enough.Please show me a one. lay lay三者的区别lie-lay-lainlay-laid-lainlay-laid-laid三者有啥区别啊~ 漫山遍野想起了激动人心的口令 是病句吗 when you are nice to people they are nioe in return _______ me your new T-shirt,please 满山遍野响起了激动人心的口令.这个病句怎么改? 扑克牌里大小王是JoKer那么其他的英文是什么扑克牌有54张,大王小王叫JoKer 那么KQJ.等等其他的又都是什么 北极星为什么一直在地球的北方? Guiyang is a beautiful and clean city.There are many fiowers on___sides of the streesA either B neither Cboth 嫦娥三号环月轨道是在赤道么 现在科学家借助望远镜系统,对宇宙更深的认识,其中主要有写3个, last came here 语法表达对不How long has it been since he last came here?How long has it been since he came here last time 两个句子,是不是都对呢?第一句,不确定,last 放在 came 前面 这么写 , 嫦娥3号能再入月球轨道吗嫦娥3号在使命结束后,它的燃料还足够使它重新升空进入环月轨道,成为月球的卫星吗? 宇宙飞船和航天飞机在作用上有什么区别?另外,有载人与不载人的区别吗 2012年七月到八月的月相图 月球公转轨道面与赤道面有固定的夹角吗? 问题:请问白瓷漆和白漆有什么区别? 求2012年8月份的月相 盛开的盛什么意思 怎么改昨天傍晚下了一夜的雨
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘