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

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

不得不看,苹果Pay技术大起底! 详解Apple Pay:一大波iOS原生应用正在逼近! 高性能微信公众平台开发 【先锋】事务、高性能,王涛谈打造超越MongoDB的NoSQL 浅谈互联网数据中心海量运营之道 一篇文章读懂开源web引擎Crosswalk Facebook创建新开源组织TODO,Google、Twitter等继续捧场 微软明日将启动第二轮裁员 涉及所有的事业部 IBM推出Watson Analytics 将人机对话带进企业决策 参与2014中国移动开发者大调查 MDCC门票等你拿 手游开发经验谈:付费体系决定游戏收成好与坏? 惠普推出全新ProLiant Gen9服务器 腾讯安全出杀手锏 搭建全国最大Wi-Fi开放平台帮助网友免费蹭网 云与数据安全实践尽在ISC 2014(免费门票) 开源的对决,MapR将Apache Drill引入企业应用 令程序员费解的10个语言特性 走进雅虎北京全球研发中心:五年光阴缔造雅虎全球创新引擎 超强集成游戏编辑器!开源跨平台引擎Wave 求别再侵犯儿童隐私!FTC狠罚Yelp和TinyCo 华为应用市场助力开发者 软硬结合造就强大生态系统 【CTO俱乐部看板研修班北京站现场速递】看板方法:渐进变革的过程 《近匠》不背单词,用“沉浸”征服英语学习 ETpl——强复用、灵活、高性能的JavaScript模板引擎 MDCC 2014大会日程概览发布 最新嘉宾议题揭秘 终于来了,微信企业号正式开启公测! 【问底】王帅:深入PHP内核(一)——弱类型变量原理探究 谷歌Kubernetes专访:未来BigTable开发只是课后习题 首届“最具价值CTO”评选来啦!我们在找你! 【CTO俱乐部走进顺丰总部】活动图文直播进行中 中国第一个云主机评测发布:天翼云性价比第一、青云质量第一 Ruby 2.1.3发布,降低内存消耗、修复众多Bug! 诚征解答,我的家当全部奉上!关于解释器语法分析中分析方法的选择问题! 如何动态数据窗口分组?急急急!!!! 给分!!请提供一下netCDF的文件格式 outlook 无法写新邮件,提示,无法创建信纸,通讯薄加载失败,请指点! syntaxfromsql的问题 简单问题! java中可以使用类似于 X + =10;的语句? JSP中文存储问题!(高分求教) 如何得到当前日期的前一个月,结果是如‘200204’格式的字符串? 我该从哪里学起? 两个CDC问题,每个50分,不搞平均主义,先提出可^行^意见的拿分。 请问有没有湖北汉川市的朋友? 如何把一个自定义的类对象写进一个文件 INSERT时的一个小问题。 请求支援,一个初级问题,关于动态加载窗体 请求支援,一个初级问题,关于动态加载窗体 线程里执行查询时碰到的错误。。。。说BDE引擎内存不足。。请各位多多指教 delphi Microsoft Development Environment中如何拖拉web form控件? 关于cloudscape Win2000??? 如何在image或者PICTURE控件中保持图像的比例 小问题:使用image控件时,能不能用mask将图片的背景色给屏蔽掉? 如何在javascript中调用COM对象? WinCE emulator !!!!!! *************2000分求救!!!SOS!!!************** 线程里执行查询时碰到的错误。。。。说BDE引擎内存不足。。请各位多多指教 刚才我发了一个贴子,请问我怎样结贴?(不好意思,我真笨) JCreator LE 使用!?各位兄弟姐妹,用过JCreator LE的来给小弟指指路好吗? dbgrid 各位,请看下面一段有关线程同步的代码: 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 简单的一道题,各位高手指点一下把! 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 美丽的故事悲伤的结局 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 98安装故障,急!请帮看看! 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 oracle 入门的书籍,请大家推荐!本人是菜鸟现在想学习 oracle请大家多多指教!!!!! 谁有好的VB电子书籍 不会使用网上的控件,谁教我? **********四大网站被黑!!!********** 怎麼寫這兩條SQL語句;(1)顯示當前數據庫?(2)顯示當前所有用戶表? 急,謝謝 送分问题,绝对给分! 如何才能不改变字体大小? 数据窗口有bh(编号),name(名称)两列,编号是string型,用什么方法可快速查找出bh中的最大值?只准对数据窗口操作。 delphi(dll) 大话爱情大结局 ??如何编写邮件服务器? createfont怎样创建一个随意宽高的字体? 急,请问有函数可取字符串后面N位字符吗?在线等待 《荷包蛋》(1)儿子一共三次引用“孔融让梨”的典故,每一次的用意是什么? 儿子六年级了但语文拼音很差我该怎样辅导 一群小朋友在操场上做游戏(五年级奥数题)一群小朋友在操场上做游戏,如果再来两名女生,男生的人数是女生人数的2倍;如果走两名女生,男生人数就是女生 人数的3倍,一共有多少个小朋友 荷包蛋阅读短文答案比如分析儿子3次借用孔融让梨的意图 怎么教好小学六年级语文课?怎么教好他们写作文? 一道游戏数学题.10个1级合成一个2级铜矿;10个2级合成一个3级铜矿;10个3级合成一个4级铜矿; 问题是多少个1级铜矿合成一个4级铜矿?怎么算的 孔融让梨故事++++++++++++++ 小学高年级语文如何实施”先学后教,当堂训练”具体点,急用. 世界上最高的大树有多高? 荷包蛋 作者多次引用“孔融让梨”典故的作用是 小学六年级数学 下册 练习十六全部答案 世界上还有真正的美女吗?稀有动物啊! 短文:荷包蛋 试简要分析儿子三次借用“孔融让梨”典故的意图 如何教好小学高年级语文第一课时 世界ol,谁知道出了圣诞护符之外的,加驯兽战斗的装备,主要的就是不想换护符 3个正方体的棱长分别是2厘米,2厘米,5厘米,将它们粘在一起,可得到一个新的几何体.问:(1)怎样粘才能使得到的新几何体的表面积最小 画图表示(2)这个最小的表面积是多少 小学高年级语文活动课教 世界上到底有多少成语求大神帮助 小孩子是不是一年级学英语比较好? 谁能给篇满意的来会再给50分. 求 国标版《轻松快乐过寒假》答案 哪一类有机物质抗旱能力较强,或者说植物的抗旱能力跟什么有关系? 三个正方体的棱长分别是3厘米,3厘米,8厘米将他们粘在一起,得到一个几何体.表面积最小的长宽高各是多少?是多少平方厘米? 昨天晚上我熬夜看了一场足球比赛,所以我的睡眠不足 翻译 抗旱植物有哪些用途 英语不好,怎么办?小孩子学英语去哪里学? 昨天晚上我在电视上看了一场精彩的足球赛.翻译为英文 抗旱的植物都有哪些 4个立方体的棱长分别是2厘米,将它们粘在一起,可得到一个新的几何体.问:粘在一起会有几种情况?请把这些方法画出来,并求出它的表面积.哪种表面积最小?哪种最大? 全班共10人,体育合格的女生有5人,男生有4人,请用两种方法求全班体育达标的合格率.急呀...记住,是两种..其中一种是(5+4)\10*100%=90% 正常情况下,植物从土壤里吸收的水分是不是比蒸腾出去的多?还有,如果植物执政作用很强,植物从土壤里吸收的水分还是比蒸腾作用的要多吗? 儿童一年级学英语好吗 六(5)班有53人,上次体育达标测验有7人不合格,求合格率.(百分号前保留整数) 《荷包蛋》的答案 注:不是父亲和儿子吃蛋的那篇文章滴!素开头为“在田野里画水彩写生”的文章哦~1.阅读文章第2~3段,说出“荷包蛋”承载了那些情意2.作者为什么写西式煎蛋和饭馆里的 三个正方体的 棱长分别是2厘米、2厘米和5厘米,将他们粘在 一起怎样能得到新几何体的 最小表面面积? 谁有七年级上册轻松快乐过寒假(国标版)的全部答案要标准的 一天早晨,父亲做了两碗荷包蛋面条,一碗蛋卧在上边,一碗上边无蛋.端上桌,父亲问儿子:"吃哪一碗?" "有蛋的1.请概括出短文中三次描写做面的情节共同点.做面——( )__——( )2.父亲第一次做 一年级的小孩子该不该学英语 求小学六年级语文基础知识 一天早晨,父亲做了两碗荷包蛋面条.一碗蛋卧上边,一碗上边无蛋.端上桌,父亲问儿子:“吃哪一碗?” “说谁父亲引用“孔融让梨”典故的目的是什么? 读了【唯一的听众】这篇课文你想对那“耳聋”的教授说什么?(以作者身份)写作文 1.以下列字为声旁的字都是翘舌音 写3至5个申直垂者2.以下列字为生旁的字都是平舌音,写3至5个次且司宗3.以下列字为生旁的字声母都是边音 L 写3至5个令凌雷里4.以下列字为生旁的字声母都是 荷包蛋文章一天早晨,父亲做了两碗荷包蛋面条,一碗蛋卧在上边,一碗上边无蛋.端上桌,父亲问儿子:"吃哪一碗?1.儿子三次借用“孔融让梨”典故的意图是什么 唯一的听众老教授是怎样的人 房间里有凳子(3条腿)、椅子(四条腿)若干,每个凳子或椅子只能坐一人,一些人进来开会,只坐凳子或只坐椅子都不够坐,但每人都有椅子或凳子坐,且还有空位.已知人腿、凳子腿、椅子腿之 一年级孩子该学什么? 求一篇新颖的小学六年级语文阅读理解题目及答案!用于辅导孩子,谢谢! 教室有三条腿的椅子和四条腿的椅子若干,已知椅子腿有60个,椅子一共有15把,求三条腿和四条腿的椅子有?2013年小升初的问卷题目 一年级的孩子学什么英语比较好呢?我家住望京附近 三个立方体,棱长分别是1厘米2厘米3厘米 将他们粘在一起,得到的立体图形的表面积最小是多少平方厘米 六年级1班的学生不到50人,在一次考试中,有1/7的学生得优,1/3的学生得良,1/2的学生及格,那么有多少人 孩子要上一年级了,学什么英语好呢? 某班学生人数不到50人,在一次考试中,有7分之1的学生“优”,3分之1的学生“良”,2分之1的学生“及格”不及格的有多少人?这个班有多少人?(列出算式,要答!) 六年级一班有46人,六年级二班有50人,从一班调几名学生到二班,就能使一班和二班的比为7:9? 在一次羽毛球赛中,6个队进行循环赛,需要比赛多少场?【两个队之间比赛1次称之为1场】32名运动员进行淘汰赛,最后决出冠军,共打了几场赛?[2名运动员之间比赛1次称为1场] 某班学生不到100人,在一次考试中,有1/7的学生得了优,1/3的学生得了良,1/2学生及格,那么有多少人不及还有一个问;这个班有多少人,拜托了 《寒假里的我》! 孩子今年一年级,想让孩子学学英语,从什么开始学呢,还是在哪学比较好. 在福州六年级的孩子补习语文哪里好?补习阅读理解,作文? 从学校去公园,小红用了10分钟,小军用了8分钟,小红小军速度的最简整数比是是4:5 还是5:4
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘