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

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

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

“2013年度中国优秀开源项目征集”活动最后三天 为什么开发者倾向于使用杂乱无章的免费工具 EMC合作伙伴销售经理杜术清:实现云的三种途径 开发者想走向海外:你融入老外的圈子了吗? 前微软工程师:美国监控和直接访问服务器?这不太可能 代码、TDD速查表 如何选择前端架构:服务器端HTML vs. JS部件 vs.单页Web应用 世界上最高深的Android特洛伊病毒 招聘iOS开发,老板必问的5个问题 护航科技吴伟湘:IT离线安全体检服务将带来颠覆 百度王继平:移动互联网时代云平台思路 “第八届开源中国开源世界高峰论坛”火热开启 微软发布SQL Server 2014预览版,展示内存数据库技术 帮助软件开发者提高效率的10个小窍门 我想做个程序员:Technovation Challenge圆女孩编程梦想 未来我们开发的Google Glass应用将会是什么样? 独家:前RIM大中华区总经理刘征宇,加入Appconomy 用一个API搞定一切 Segment.io为移动开发者提供便利的分析数据分发服务 TIOBE 6月编程语言排行榜:JavaScript回归前十 《Kingdom Rush Frontiers》上线后 迅速抢占27个国家游戏榜首 移动周报:85后程序员,iOS开源项目,细数7天大事件! Instagram:从Redis到Cassandra 成本节省1/4 乐元素CTO凌聪访谈:游戏引擎技术选型之王道 iOS 7的新设计并非止于外表 WWDC 2013大会10大启示:正向开发者支付大量现金 云计算大会微软专场成功举办 Windows Azure公众预览版上线 IBM全球大裁员 在美国裁员已经开始 动动鼠标,决定“中国十大优秀开源项目”的归属 为改善Flickr 雅虎收购拍照应用开发商GhostBird 让你轻松学习新代码库的六个步骤 RESTful API 设计最佳实践 代理Type分别为transparent,anonymous,high anonymity,优劣? 为感谢computersim在大力相助,特奉送100分,快来拿啊 请教网上书店系统的设计思想和例子。 VC中使用FLASH的OCX控件如何取得Movie的原始大小,且如何按指定比例缩放?问题解决后必给分。 有关“隐藏”,“覆盖”的一些问题: 如何把A库中A表原样复制到B库中去? 怎样取得鼠标点击DataGrid控件时是哪一行,哪一列呢?(C#) ISA 2K发布多个WEB 服务器问题,(我都要疯了)高分求救 这个问题怎么办?? (ADO OPEN) Up 有分! 母亲生日,你觉得送什么礼物为好? 用c++ 写的 hello 程序在unix g++ 编译通过后,运行出错 如下几个初级问题要问,高手们请进-> SQLSERVER高手进来聊聊........ 怎样用代码实现两台电脑之间的文件传输? 哪位知道Microsoft Firewall Client 的下载地址? 关于RECORDset的问题,求教 如何在web页面使用 Windows 窗体控件,最好有例子! 使用DOM的XMLHttpRequest对象来发送xml请求,但当返回的响应带有中文时候,在PDA上无法正常显示,我使用MultiByteToWideChar也没用。有人 请问在窗口中放置控件时,PB是否有靠近格线对齐的功能。如果有,在哪设置? DELPHI中FASTNET组件使用方法 请问在SELECT查询中怎样娶得行号? 在一般的类中如何得到当前文档的指针? 巨菜问题:重装xp后grub启动菜单消失,怎么办? FIP上传问题,非常着急,在线等,解决就结贴, 用javaScript打开窗口后,原窗口的gif动画不动了 FindWindow的用法 反正没几个人能回答,发来玩玩。 在当前文档中如何实现刷新操作? 构造sql语句时,表名或字段有可能是sql的保留字段,如何解决? 小弟急需文件操作和线程管理方面方法技巧的资料,望各位英雄赐教 怎么将power point打包成exe 如何恢复execl中vba的密码 怎样在ISA中设置带宽限制? 如何实现数据库的更新?? 搜胡首页是<<美英百架战机空袭伊拉克 攻伊序幕已拉开>>,但... string 读取的问题。 正在看c++primer的请看(高手当然也能看拉) 有哪位高手用过bcp_exec导入数据吗? vb数据库安全问题 大学新生师弟师妹们很快要来报告了,大家能不能帮我想想一些迎新的宣传标语? 数据窗口中dddw下拉前触发的事件是哪一个(使用pbm_dwndropdown无效)? 有关的vs.net的简单问题! 下周可能要去勞動局!矛盾激化! 博士,硕士,教授等请进,关于前途的问题: 如果明天csdn也被封了,我们还能做什么???? 请问SQL SERVER区分大小写吗 关于lcc-win32 winme下如何调整显示器的刷新率 大家练练手,征集下面这个小程序的算法!!!(很有趣的阿!!) 消失的古代王朝---亚述 Web services 的应用。 请问大一无机化学中电动势为何一定要这样表示:E(Cu离子/Cu),有什么含义吗? 连词成句.We,music,on,have,and,P.,E.,Wednesdays(.) 奥运五环为什么红色代表美洲,蓝色代表欧洲请看清楚问题. 环太平洋里面提到机甲,会说像是“也噶”一样的音,单词是怎么拼写的? 影响铁吸收的因素有哪些? 减法运算的意义是什么? “冧”字噶拼音系?.. 磷化膜很光滑会对喷塑涂层的附着力有影响吗?划格试验还没有用胶布,涂层一吹就脱落了,脱落涂层下面钢材很干净,无油无锈.烘烤温度也加高了还是不行,影响因素有哪些?钢材、磷化、塑粉、 有理数减法的定义 先回24字的采纳,要是一句话. 喷塑附着力问题附着力差 关于中国历史上所签署的各个不平等条约的时间,地点,原因,以及影响在中国18世纪中后期到辛亥革命时签署的所有条约都对中国造成了很大的影响,那么他们的时间,地点,原因,影响分别是什么 先回23字的采纳,要是一句话. 有哪个兄弟知道,测量喷塑漆层附着力的工具是什么啊?以前见过,不知道叫什么名字,类似螺纹塞规的样子. 英语翻译刚开始进公司的时候,我协助经理组建销售部门,我的主要工作是收集市场信息,走访相关企业,了解市场供求信息,并写市场分析报告.之后我开始负责公司项目推广工作,主要是定期召开 Cu在化学中代表什么 一定量的Na2CO3和NaHCO3的混合物跟足量的盐酸反应,共耗酸0.8摩,生成CO20.5摩,求Na2CO3`NaHCO3的质量各多 ‘升’字的英文翻译? 先回先采要有15个字的一句话. 吸盘式挂钩只能挂在玻璃上的原因 铁元素在食品中生理功能 化学式Cu能否表示分子? 为什么NaHCO3 ,Na2CO3与酸反应时,NaHCO3反应的更剧烈? 影响Fe吸收的主要因素有哪些? 晟 这个字的拼音是什么?这个字的拼音是什么? 这幅图你能看到几个字?听说最多的能看到18个字. 这个用系统命名法怎么念?为什么不念做3,5-二甲基-5-乙基庚烷? ‘晟’这个字怎么念?拼音和几声?不好意思,我身边没有字典,又遇到这个平时不用的字,谢谢帮助者. 求一张写着字的图片.上面写着一句话的就是张爱玲的那一句"明明不相干的,也会在心中拐好几个弯想到你"把图片贴出来或者把网址交出来~额.是手写的. 系统命名法问题2-二甲基戊烷对吗?是不是应该写成2,2-二甲基戊烷 Na2CO3和NaHCO3与酸的化学反应速率那一个快一些? 如果这幅图旁边要配上一句话或一个词,大家认为配什么好一些?最好是偏现代些的,不要太长,一句话或一个词,也可以是小说动漫电影各种各种的语录什么的,也可以是原创的,只要合适意境, 关于系统命名法的问题命名时-CH2C(CH3)3和-CH(CH3)CHCH3哪个在前面?前一个更大,后一个取代基的取代基更靠前打错了,是-C(CH3)2CH2CH3和-CH2CH(CH3)CH3 这个字“晟”读什么? 图像PS,一句话前面加几个字,急帮PS一下,把请你吃哈根达斯改成请全班吃哈根达斯,急 噶的读音 Na2CO3和酸反应生成等质量CO2消耗的酸一定比NaHCO3多吗?除了盐酸外,还有其它酸可以和NaHCO3和Na2CO3反应? 准噶尔盆地和塔里木盆地的成因是什么? 噶的读音为 请用下列两个词各写一句话造就;练就; 几个字或者一句话加上一个美女的图,叫什么像这个 准噶尔盆地 怎么读 为什么淋巴细胞所处的内环境是淋巴和血浆,毛细淋巴管壁细胞的内环境是淋巴和组织液 请用下列两个词各写一句话.急造就;练就; 奥运五环中的绿环代表的是澳洲还是大洋洲?越详细越好,最好把国际规定也弄上来. 淋巴细胞生活液体环境是淋巴血浆,为什么不像毛细淋巴管壁细胞液体环境内有组织液?毛细淋巴管壁细胞和淋巴细胞有什么关系?淋巴细胞生活液体环境是淋巴,血浆,却没有组织液,而毛细淋巴 Cu 可不可以表示 铜元素但我觉得可以 三个不平等条约的签订对近代中国社会性质的影响是什么 组织液是怎样进入淋巴管的?淋巴为何又是单向到血浆的? Cu是什么元素 电磁吸盘吸在玻璃上为什么要排干空气 雅鲁藏布江,该河谷地处 板块和 板块交界处,因此 资源雅鲁藏布江,该河谷地处 板块和 板块交界处,因此 资源丰富.这里农业发展类型属于 农业 4Cu4Nb是什么意思,cu,nb,是代表什么元素的 ps中ctrl+shift+6什么意思? 雅鲁藏布江流域处于板块交界处,但火山活动较少,其原因可能是 近代中国第一批不平等条约 名称和内容 ps里ctrl+a+c+v是什么意思? 化学名称Sb、Cu、Mn、Zn各代表什么金属 列举近代签订的不平等条约的名称 有理数减法概念谁能给我一些有理数减法的概念,越多越好,
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘