======================================================
注:本文源代码点此下载
======================================================
*****************************************************************
*一、为什么选择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在共同访问同一变量,就会出现一些奇怪的现象。
新手最好先避开这类问题,省得麻烦。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/