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


2005-5-20 16:45:38 
阅读更多
个人分类: 软件开发
想对作者说点什么? 我来说一句

delphi程序安装包制作详解

2011年07月22日 31KB 下载

Delphi编写数据库程序要点

2008年03月26日 39KB 下载

delphi程序打包制作

2011年08月25日 26KB 下载

Delphi编写安装程序

2009年06月10日 7KB 下载

Delphi 最简单的聊天程序

2013年10月16日 361KB 下载

没有更多推荐了,返回首页

不良信息举报

Delphi 程序制作要点

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭