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

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

insertAfter(expr)-JQuery API insertBefore(expr) -JQuery API prepend(content)-JQuery API prependTo(expr)-JQuery API remove(expr)-JQuery API wrap(elem)-JQuery API wrap(html) -JQuery API add(elements) -JQuery API add(html)-JQuery API add(expr) -JQuery API children(expr) -JQuery API contains(str) -JQuery API end() -JQuery API filter(filter) -JQuery API filter(expression) -JQuery API find(expr) -JQuery API is(expr) -JQuery API next(expr)-JQuery API not(elems)-JQuery API not(expr)-JQuery API not(el)-JQuery API parent(expr)-JQuery API parents(expr)-JQuery API prev(expr)-JQuery API siblings(expr)-JQuery API Events事件-JQuery API bind(type,data,fn)-JQuery API blur(fn) -JQuery API blur() -JQuery API change(fn) -JQuery API click(fn)-JQuery API 如何学好VC? vc在应用层上 和delphi 区别在哪里? 以下程序中,若输入12345,ABC,则输出的结果是什么 请问大师门,我引用数据库为什么不行呀? ----在线程里的SOCKET为什么关不掉 请问如何有破解excel2000文件密码的工具或方法吗?300分酬谢,急等.谢谢! 在SQL*PLUS下怎样查看一个字段的属性,如是否为主关键字。 帮小弟一把,我仅有的36分了,各位 在vc中如何将字符串转化成其对应的ascii码?用什么函数? 天啊!!怎么办啊,救命啊 内存分配的一个小问题 无聊,散分。只给前面十个。 用image控件可以互相转换ico,bmp,jpg三种格式的图片吗? 请问哪有NGWS下载? ?有没有啊 以下程序的输出值是 哪位朋友知晓如果Table与DbGrid绑定后,如何实现非第一索引的排序。 请问MSDN有中文版的吗?我们这的全是英文版的 我的 Win2000 出大问题了,急盼各位大虾赐教 请问那里有VB.NET软件下载呀 什么delphi命令可以打开网页呢? 到底有没有人知道如何可以在panel中动态的调用frame或者是form呢? 哪里有windowsXP下载? 送我能给的最大分,请教很小的问题,中高手进 聊天请进(thinkingdog) 大家来谈谈 IBM都有些什么认证???什么认证现在比较吃香???谢谢!!! 打印数窗问题求助! 如何使用UrlDownloadtoFile下载文件使用进度条? 如何用在两次用getTime()中得到两个不同的时间。 一个类似于牛角尖的问题(多余的CONST),不能忽视,请各位高手详细说明!!谢谢! 怎样读写注册表,每次都不成功,气死我也~! 各位救命啊,用 TClientDataSet.Load XML 的问题。。。。 娃呀呀,pb8怎么这么难安装?jaguar组建就用了5分钟,regester window又用了10分钟,重启动后,还没完,偶不敢装了,把碟退了出来,大家是不是也这样?//牛虻 请教高手一个ado的问题. 请问一个TWebBrowser的问题 请问:系统崩溃后,找不到BOOT,系统告诉:DOS基本分区为格式化?无法引导启动! 在VB.NET的tabcontrol上放置AxMSFlexGrid控件问题,急 java3D 现在大家是用Oracle 8还是 Oracle 9??? C++问题求助! 请教一个错误的原因. 各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版 SCJP里的那些什么300-020,020是什么意思啊? 请问一个关于document.write()方法的问题。急啊! 初学者,欢迎灌水。 Delphi6的Bug?不兼容? 为什么我用GetProfileString()却总是得不到结果 sos 请教各位大侠一个问题 delphi6中的installShield 请介绍接收端CRC校验传输内容是否正确的方法,资料或代码。谢谢! 各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版? 生料带的配方可以加入些什么填充料吗?生料带的配方中可以加入些什么填充料来提高质量吗?有没什么填充料降低成本呀? 气温略高于0°C,有风的时候晒在室外的湿衣服会结冰吗 用二氧焊进行单面焊双面成型时,打底焊后,焊缝上出现裂纹,并非收弧时也出现,是何原因,如何避免? 内衣泡在干净的水里,容易滋生细菌吗 在寒冷的阴天,气温未达到0摄氏度,但晾在室外的湿衣服会结冰,什么原因?工程热力学 焊接符号 焊接双面焊符合怎么表示?单面焊又怎么表示呢 内衣泡在水里不洗会不会滋生细菌 正常铁路轨道寿命多少年 请问:原电池中,若电解质溶液为0.5mol/L硫酸溶液,电极为铜片和铝片,则电流计指针为什么偏向铝?另外请问:稀HNO3与Fe反应放H2吗?若不放出H2,那该放出哪种气体? 我住宿舍内衣洗干净就放在床铺上怎样可以减少细菌的滋生 铁路轨道衡是什么作用 Al 和Cu组成原电池 若电解质溶液为稀硫酸,则电流表的指针偏向铝还是铜?究竟电流表的偏转方向是偏向正极还是负极? 苹果切开后为什么会变黑? HIV在空气中能存活多长时间?请问HIV在空气中到底能存活多长时间?好像听人说也就几个小时,有点疑虑的是,既然离开人体后马上会死亡,那为什么输带有HIV血的血浆时会感染HIV(因为血浆中的血 原电池中的电流计指针偏转方向为什么在Cu-Zn原电池间接上灵敏电流计,指针偏向Cu?电流计指针偏转方向不是应该和电流方向一样吗 关于铝和另一不活泼的金属电极(电解质NaOH溶液)构成的原电池的方程式另一不活泼的电极随便假设,请写出不同假设下的两极的电极反应方程式(把总反应方程也写出来更好) 艾滋病在空气中能存活多久并且伴随着春天的阳光和春天的温度 将表面去掉氧化膜的镁片与铝片用带电流表的导线连接,插入盛烧碱溶液的烧杯中,此时发现电流计指针偏转,判断此原电池的正负极,并写出电极反应式和总反应方程式.铝片做负极,镁作正极负 镁与铝作电极氢氧化钠溶液作电解质的原电池反应,为什么镁会先参加反应呢,在铝上有气泡产生 HIV 暴露在空气中的存活时间是多少? 电极材料:镁铝,电解质溶液:氢氧化钠溶液,电流表指针变转方向:偏向镁,铝做负极的原因是—— 我添过女人的内裤,我以为头里有细菌,就经常拿手狠狠的打头,现在头痛,请问是真的有细菌吗? 艾滋病病毒在空气中能存活多长时间,听说过因为修眉毛而得上艾滋病的,那么,他得在刀具上存在多长时间才能消失.这种感染艾滋病的机率有多大? 谁的影子最长? 铁路轨道结构包括哪几部分?最好有图 熔化吸热 凝固放热日常生活中有那些利用熔化吸热,凝固放热的例子?什么情况下熔化吸热,凝固放热会给我们带来不利影响?怎样避免? 永动机是可以实现的,如果分子永远在运动.这是可以做永动机的实验依据的啊设计了好几个方案,见教!==假设一第三类永动机:利用一种永不枯竭的能源,实现永动^^如果分子可以永动,这说 中国的土地很多都被农药污染了,很多指标会不合格,还有部分是转基因.国内外那个品牌大米可以安心吃?国内的那个地区是没有转基因的,也没有化学超标的?国外的大米那个品牌是真品?我很迷 用汽油擦除衣服上的污渍时,汽油很快跑掉了,这是什么物态变化,过程中是吸热还是放热 科学会把怎样的运动当作永动机如果永动机每分钟转动12转,对物理学意义 有多大? 冬天,结冰的 湿衣服也能晾乾,其中发生的物态变化是? 请问中国男性的阴茎的长度和直径标准? 写出下列物态变化的名称,并指出该物态变化是吸热还是放热1 夏天冰欺凌冒白气2 水结冰3 秋天的露水 冬天潮湿的衣服一层结冰的过程中的物态变化是什么? 甲乙两人在铁路轨道旁背向而行,速度都是每秒1米,一列火车匀速地向甲迎面驰来,列车在甲旁开过用了16秒,而在乙身旁开过用18秒,问这列火车多长? 太阳光照射旗杆从早晨到中午.下午之间的影子变化啥时候最长,最短,垂直?旗杆和影子垂直 原电池中,电解质溶液对电极的影响.为什么在氢氧化钠溶液中,镁当正极,铝当负极呢 下午的影子最长还是上午的影子最长 每小时太阳光照射的影子的角度是多少? 构成原电池的时两个电极一定至少有一个和电解质反映吗镁和铝在氢氧化钠电解质中谁是负极啊 为什么?小生愚笨 请清楚说明 如果是 那铁和铜在氢氧化钠做电解质的情况下能构成原电池吗? 在早上、中午、下午哪个时间你的影子最长? 为什么在太阳光照射下,人在地面上的影子早晚长,中午短? 铝与镁形成原电池电解质溶液为氢氧化钠,请把负极的反应式写出来? 为什么早上影子最长? 眼睛被太阳光照射到有影子被太阳强光反射到 铁路轨道加强设备有哪些? 我有急用 由镁、铝、氢氧化钠溶液组成的原电池,负极和正极反应式分别是? 布朗运动是液体颗粒运动还是固体颗粒运动?那 “布朗运动是悬浮在液体中的固体颗粒分子无规则运动的反映”哪错了? 空气中的细菌与什么有关细菌必须从外结摄取有机物获得营养.下表为不同地区的细菌分布数场所 空气中的细菌数(个/米3)畜舍 100万-200万宿舍 2000城市街道 5000市区公园 200海洋上空 1-2北极 那什么物态变化,要吸热放热的,应该怎么记?我老是记不住,求学习方法 悬浮在液体中的大颗粒固体会做布朗运动吗 日全食是如何发生的 中国的哪些省都与外国相连?分别与哪些国家相连? 单面焊双面成型!立焊单面焊双面成型是左右摆动在断弧还是只要在中间点一点不用摆动就断弧?不是开坡口的两块板,是类似立角焊的样子,两个板成V形组装,最好也说一下开坡口的,他们两种是 为什么家里的苹果切开之后变黑了?不是 就是切开放了一会就变黑了呢 中国为什么要与其他国家(外国)合作? Y电焊单面焊双面成型技能 生料带对封水、气、油的成份有什么要求? 镁—铝—氢氧化钠 ,构成的原电池中,为什么负极是铝? 平焊对接单面焊双面成型时,第一道焊焊枪角度是多少,第二道焊缝因离铁板平面多高?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn