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

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在共同访问同一变量,就会出现一些奇怪的现象。

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

生存还是毁灭:Facebook惨败真是HTML5的错? OpenStack基金会主席:一年后成熟度超越CloudStack 在线学习新编程 技巧全攻略 “英特尔杯”HTML5程序开发邀请赛侧记 C#编译器组首席工程师Eric Lippert离职 加盟Coverity Testacular:Google开源的JavaScript测试执行过程管理工具 黑莓亚洲开发者大会报道:BB10将敲开亚洲应用市场大门 挑战Google!传Facebook与Yahoo要联手开发搜索引擎 揭秘Android 4.2 开发者的天堂与地狱 11大黄金法则:顶级移动UX设计心髓 库克时代:苹果已经不是苹果 设计师必备:极简风格的Fluid UI快速原型图工具 iPhone 5发布,后乔布斯时代苹果乏善可陈 牛人妙计:HTML5应用也能像原生一样跑得快 移动周报:OpenFeint难逃关闭命运 细数与苹果恩怨史 FlyingDaggers团队专访:不浮躁,用心做真正的原创游戏! IT巨头混战:谷歌、苹果、Facebook以及亚马逊的四国演义 乐视TV:智能电视平台——Android 开发者的新空间 TIOBE 2012年12月编程语言排行榜:Objective-C冲刺卫冕年度语言 11月份浏览器市场份额 IE10已占据0.51% 亚洲高科技公司正在分享惠普、戴尔和IBM的云“午餐” Groupon创业启示:进军海外,请三思 天才之为责任:Unity CEO谈论Unity 4.0游戏引擎 中文版Evernote百宝箱上线:开发者海外推广新渠道 360产品被爆收集用户隐私 桌面安全路在何方 销售额达一万亿元 阿里巴巴成世界最大电商 共享软件海外营销策略与实战分析(武汉站)成功落幕 你未必知道的CSS故事:揭开leading的面纱 2013年 影响Web发展的5类API 《Warcraft是怎样炼成的》:多人对战、战争迷雾以及AI HBTC精彩回顾 Hadoop专家分享大数据技术工具与最佳实践 刚才的没解决 找工作, 上海。 请帮忙啊 关于在delphi中Dll的创建和调用,象登陆界面一类,dll中有窗体,求例子。 哪家网上书店信誉高,C++ builder书质量高? 关于rs.MovePrevious 100分问题:如何在sdi的view的(0,0,NULL,20)区域固定显示一定内容 VB中使用ADO连接远程数据库时的事务处理问题 在weblogic中,这个错误是怎么回事?(在线等待) 怎么用SOCKET传送一个自定义类型的数据 szbug大哥请进来拿分 幸福女人的小小要求(zt) 各位好,请问一个问题:存储过程的作用是什么,能不能举例说明一下,看了半天书,也没能明白,多谢了! 我想用循环来实现这样的语句,怎么写呢? 请问xml元素内容部分的html代码如何处理 怎样定义rect数组? 一道考试题目:考考你们自己的C++水平。 怎样用代码遍历DBGrid中的记录?急!在线等待! 为什么mov eax, [0x400000h]和mov eax 400000h汇编结果一样? 网络报表最好的解决方法是什么 高分求购web 打印控件?还有一个远程数据库,客户端打印问题帮忙解决一下 哪位高手能给一个简单的TOOLBAR控件应用的原代码?(非常需要) 哪些有钱途?哪些有前途? 讨论:MSE(软件工程)对中国目前的开发现状真的有帮助吗?来者有分 ACCESS查询语句中的DATEPART函数为什么不能执行??? php为什么安上后不能用 在VS.Net中如何使注释生成已编译的HTML帮助文件? 我想更改Win2000的开机画面,请高手指点 ADO连接数据库时的事务处理问提 对于动态生成的控件,如何确定它的名字? vb 中使用select 的问题 想把post的变量遍历,怎样实现 小问题 关于参数 如何通过一个计算机名来查出它在局域网中的IP !!!!!~~~ 急,哪里可以下载IeWebControl? 有没有方法通过分布式连接直接从sql server写数据到oracle数据库。 郁闷问题:有谁知道Textbox在运行时如果没有任何输入,它是否空值? 如何用vb做一个启动程序(在windows启动运行) 请问,怎样将一个已分好区的电子盘格式化成ext2格式??? 请教web services问题 高分求购H261解码算法 子类中怎么用基类中的一个属性? 请问有没有JB7的中文教程,高分相求!(400分) 怎样在下拉列表框中显示数据表?具体怎么做? 请教,各位是如何实现对SQL SERVER的记录加密的? Datagrid中的HyperLinkColumn如何传递两个变量值给下一页? 高手请进:怎样将一个值传递到datagrid模板列的一个textbox中?问了好久,没有人会吗? ACCESS中的DATEPART函数为什么不能执行? 怎样在下拉列表框中显示数据表?具体怎么做? davidnim(天道酬勤) ,谢谢你了! EA 哥们们想你! 过年了你还好不? 听说你去了米国。。。。。。 刘诗诗郑元畅吴奇隆 盘点令人羡慕的荧陈乔恩杨幂蔡少芬 揭秘众女星无法直视嫁入豪门未必幸福 盘点遭遇家暴的悲惨《新笑傲江湖》完结 比较各大版本的东盘点山寨明星黎丹神似杨幂 李星版杨钰赵薇姚晨蒋勤勤 北影十大校花的幸福生一个演员毁掉一部经典范冰冰杨幂古力娜扎 盘点演配角走红的新《笑傲江湖》大结局一秒变恐怖片 东日本小姐出炉 日本环球小姐松尾幸实私2013众多日本小姐出炉 哪个日本小息影11年46岁王祖贤复出 重温没有《我们结婚了》世界篇:鬼鬼吴映洁身穿2013日本小姐出炉 25岁模特夺冠日本小姐出炉:冠军松尾幸实疑似混血儿《西游降魔篇》票房破11亿 能否超《2013日本小姐出炉 25岁模特夺冠《那年冬天风在吹》9集宋慧乔赵寅成虐陈冠希谢霆锋张国荣梅艳芳 盘点明星超2013日本小姐出炉 25岁模特夺冠2013日本小姐松尾幸实夺冠 盘点历公共场所要向公众免费“送凉”买菜时遇商户斗殴公安局长徒手夺刀大河实战账户(7月21日星期一)“我是恁哥,给你捐肾的事儿听我的”以色列轰炸加沙至少 530人死亡成都出发全场5折起,3天满千返百 九火烧云 金镶玉 不走锦官城 哪有飞来全市专项治理住宅质量你看见的舌尖,是垂涎欲滴 你未见的舌20名责任人被控制 其中10人被刑拘我是一只懒小鸟 有机可乘闯成都这1个多小时 2岁半娃娃去了哪儿?快贷 帮您快速贷款 贷款利息低至5厘名人家书,分享子女教育“参考答案”30个好项目“坐镇” 本周五连锁加盟拿出实际行动 形成工作支撑中国反对在朝鲜半岛部署末端高空区域防再坚持一天明天高温暂歇 台风“麦德姆高温红色预警信号一旦发布 户外工人停余杭两幼女被杀案告破 嫌犯臧纪超昨晨联合国安理会:追究马航MH17坠毁肇
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘