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

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

流程在企业内的作用及成熟度 Gartner:至2017年Chromebook销量将增2倍 后稀缺时代思考:机器横行下的人类夹缝求生 TIOBE 2014年8月编程语言排行榜:Swift跌出Top 20 精华回顾!历届MDCC大会精彩演讲与议程汇总 《近匠》Fancy3D:亿级游戏背后的轻量级引擎 假如李小龙是程序员…… Docker已扎根新一代PaaS 三星或发布首款头戴式VR设备Project Moonlight 英特尔亚太研发总经理何京翔:数据化时代背后的智慧 云络网络科技CEO Steve Mushero:游戏行业的云运维 腾讯游戏运营管理中心总监刘栖铜:腾讯游戏云的理想与实践 一号专车产品总监曹景辉:LBS应用仍有无限的创新空间 昆仑游戏总裁张益豪:做好中国游戏的海外代理 游族首席运营官陈礼标:重点打造全球化IP 我是怎么利用微信月收入三万以上的! 我的Y Combinator黑客马拉松之感! 最炫HTML5 JavaScript框架Famo.us融资2500万美元 看板先驱David J. Anderson:看板方法拉动互联网时代敏捷变革 《近匠》增强现实开发团队LegendTech:AR技术现已加入15元豪华午餐 微软新技术:简单修改,手机摄像头摇身变3D深度相机 Black Hat USA安全隐患盘点及黑客奥斯卡颁奖 MDCC免费展位报名火热!数量有限,征集进行中 迪游信息科技CEO张晓雷:中日游戏面面观 百余款智能电视创意类应用参赛角逐 Top13 App新鲜出炉! 微信公众平台开发——如何保证access_token长期有效? 拼的就是速度!超快HTML5 2D渲染引擎Pixi.js 一周消息树:百度“涉黄”遭警告,网盘内容审核的四种方式 微信开发商现状调查:接口限制成主要困扰 行业需求多样是最大难点 小米:海外扩张需谨慎,信息安全或成最大掣肘 AMD FX系荣耀归来 或成大众新宠! 怎样调用另一台机器上的COM组件? 在试用期时,要另觅良木要负何责任? 有北京的狼吗? Access + ADO 的程序发布,需要那些文件?(就这么点分了) 一个小问题,有100分可以相送,送完为止!! Update 时出现 ODBC错误文件被另一线程占用,问题出在那里?? 怎样判断一个控件是否获得焦点. 通过row和col不行,我以前也用过, 用SetSQLSelect更改dw的sql语句后,如果dw没有检索参数时能行,如果dw有检索参数则返回-1,请问有办法吗解决吗? SQL Server中的datetime类型数据是否能比较大小? Update 时出现 ODBC错误文件被另一线程占用,问题出在那里??? 请问U-C矩阵是什么? 庆祝一下 请教程序组加入程序的问题 老是想来灌水,把这点可用分送光得了,省得挂念 IT老虎,与天为敌快进来,谢谢我只有20多分了,你们一人十分吧,我留点好吧? 如何实现打印,尤其是分页打印? paw_001,paw_001 在马? NetGuardian??哪为兄弟有啊,给我一份copy~~~~~~~~~~~~ 关于自增长字段使用的问题,高手请进 这一贴,分就少点了,就这么多啦 有人能告诉我广东省C程序员与JAVA程序员的薪水比较吗?为什么会有这种差距呢 请问用javaApplet如何控制IE界面? 点对点的讨论 水平考试与资格考试及格分别是多少分? 如何再网页中实现打印功能,份也打印。 我发现了一个网站的BUG,我该怎样进去? 到处都是泡泡,俺看的想吐,晚上再来算了。 怪事, 屏幕变黑白 我的问题_6 MYSQL中like的问题 请教打印预览问题 请问,如果我想把,file edit tools window这个主菜单栏动态去掉,怎么做? 如何用程序代码实现在Memo文本编辑框中被选中的文字加下划线。 怎样分析tcp报文(我很急呀) *.idl文件如何使用? 各位大侠,怎么写一个php在线打分的程序阿? 我测试一下 感兴趣的去试试! IE外壳扩展的程序 Delphi 6.0的一个Bug??? 我怎么把字符串放进缓冲里?急急急!!! 恭喜 zhipop 喜得漂亮的可爱的千金 几个小问题想请教大家 如何将浏览器的地址栏里的IE图标换成自己的图标? r俺明天想去给我的宝马生生级,不算显示器,3000元左右,请各位大侠们赐教该什么配置 2000下写的程序,NT 4.0workstation上为什么不能跑? 启用新主页下载数据窗口编辑器 请教Qbasic中的几个问题..... 用BCB如何向Oracle8.0.5中更新BLOB 用ODBC编程时发现错误:nvarchar 类型无数据类型同其绑定,用CString 出错!如何解决? 盐和醋加在一起有什么化学反应 食用油的成份有哪些? 汽油装在矿泉水瓶里,被压,会不会爆炸,或者起火?比如掉在马路上,汽车压过来……会不会爆炸 水醋和白酒合在一起会有什么化学反应吗 食用油的成分家里用的食用油含有什么组分啊?有没有氨基酸、蛋白质什么的? 最虎药酒配方有哪些,组成成分是什么 哪些化学反应可以生成盐和水? 地沟油的有害成分有什么?为什么一般的食用油检测常用指标检查不出来? 泡制营养酒有什么要求?国家什么机构检测药酒成份最权威?包括有毒有害物质,兴奋剂,激素等 水和盐 化学反应方程式1.偏铝酸钠溶于2.硫化钠溶于水3.硫酸钠溶于水4.碳酸氢铵溶于水 食用油的成分是什么 空的矿泉水瓶有什么用这个星期三是截止日期!各位帅哥美女,做考试卷要用!另:尽量多一点! 洗脸时加醋~起什么作用?还有盐呢? 食用油的性质和成分 人为什么不会被大气压压扁如果解释为内外大气压平衡,产生的压力相等而相互抵消的话,那么试想用两块相同的铁板用相同大的力从相反的方向压一个人,难道由于力可以相互抵消,这个人就可 喝蜂蜜水加醋,有什么好处啊?蜂蜜水加白醋,听说可以美容,但是有蜂蜜会不会长胖啊 如何测试皮肤含水量 为什么大气压不会把人压扁?请真正懂的答 不要瞎编的 用醋和盐洗脸好吗,应该放多少是这样的,最近我开始用醋和盐洗脸,先放一盆温水,然后倒入醋在醋瓶盖里,放入2次,再加一小勺盐,然后冲脸几次,再用洗面奶洗脸,完了还是用醋水和盐水洗掉,再 地板怎么测试含水量? 为什么人在大气压中不会被压扁,而在在水中会被压扁?人在大气压中不会被压扁,是因为人身体内部也有大气,抵消了,那么在水里,人身体里也有水,为什么不和外面的水压力抵消,而在深的地方 每天用醋和食盐洗脸好吗 测试界限含水量的意义是什么? 为什么有大气压,房子不会被压扁 醋、盐、糖洗脸最近在百度上看了无数的用盐、醋、糖洗脸的好处,都是说可以美白、祛痘,去黑头什么的.我也想试试,就不知道洗起来到底有没有这个功效?我在百度见别人用醋是这样洗的: 润滑油含水量怎么测试啊水太多了,润滑油的效果会降低,含水量要怎么才能测出呢 大气压那么大为什么我没被压扁?平时我用笔刺自己一下!我计算过了.压强顶多3000PA我就疼得要死大气压有10的5次方PA为什么我都不觉得疼?难道空气的压力和用笔压不同吗? 压榨油和浸出油哪个好?拜托了各位 谢谢 含水量试验 关于魔术:矿泉水瓶盖进矿泉水瓶,我想知道如何做到?不方便在这透露的话给我留言,如果有猜想的话也可以发表下.另外还有手机进矿泉水瓶也感到好奇,有达人可指教下如何做到吗? 爱石的雨提问:食用油压榨的和浸出的哪个比较好,能详细说明下吗我看到浸出的要贵,但是不晓得原因呢 求毒奶粉 瘦肉精 地沟油 染色馒头的作文 一个空矿泉水瓶在瓶底钻个小洞,然后装上适量的水拧紧瓶盖,为什么不会漏水?为什么拧紧瓶盖不会漏水,但是打开盖子却会漏水? 食用油是浸出的好,还是压榨的好. 毒奶粉,地沟油,瘦肉精,染色馒头怎么没人管?毒奶粉事件在国际上很丢脸,地沟油就不说,新闻曝光后照样舀地沟油回流餐桌,现在又搞出来瘦肉精,染色馒头,到底有关部门查的不严,还是根本就不 为何将装有适量水的矿泉水瓶打开瓶盖倒插在水槽中,水不下落?而在空中打开瓶盖,为何水下落? 醋泡生姜吃有什么好处 化学浸出法制作的食用油有没有什么害处?据人说化学浸出法制作的油,容易富含致癌物质,它们是铅汞残留和反式脂肪酸!这是怎么回事,期待专家答疑! 求除了染色馒头、瘦肉精和地沟油之外,在国内其他的食品问题!急!求官方一点的说法 要写进报告里的 谢谢! 醋泡姜有什么好处? 用浸出法加工食用油时,用的是什么化学溶剂. 瘦肉精三聚氰胺染色馒头地沟油和贪官只要发现哪个企业那个窝点生产这些,贪官.死刑立即执行,没收全部财产的200%(没有任何商量的余地),什么死缓啊,终身监禁那都不可能.为什么不这么判 嫩姜泡醋有什么作用 当电器,汽油,食用油等着火时,不能用( )扑救.选择题.A,喷水 B,喷射干粉 C,喷射二氧化碳 毒奶粉,瘦肉精,地沟油,彩色馒头,这些食品安全事件都说明了啥!诚信的缺失,道德的滑坡? 把醋和盐用水溶解,水 白醋:盐=9:3:1对美白有用吗?把盐换成白糖会不会更好? 什么食用油是采用浸出法压榨,浸出法有污染吗? 进来相继发生的“染色馒头”,“瘦肉精”,“地沟油”,“毒奶粉”等耸人听闻的食品安全事件足以表明,诚信的缺失,道德的滑坡已经到了何等严重的地步.中“耸人听闻”使用恰当吗? 用盐和醋去痘步骤该怎么做 如何压榨食用油是古代人工压榨的方法 , 把容积为358ml的矿泉水瓶全部按入水中不考虑瓶壁的厚度,矿泉水瓶所受到的浮力有多大? 听说陶瓷碗里面有一种叫什么盐的成分会和醋发生化学反应,请问这是真的吗? 食用油中制作工艺:浸出和压榨,有什么区别? 矿泉水瓶如果加8公斤气压会 请问是不是盐和醋放在一起会发生化学反应吗?对人体有没有危害 请问:压榨油和浸出油有何区别? 往矿泉水瓶里打气,它能承受多大压强才会爆? 盐+醋两样一起同时用来浸泡衣物以让其固色会不会产生什么不利衣裤的化学反应? 压榨油和浸出油的区别压榨油和浸出油哪个对身体好 汽油放到矿泉水瓶强烈震动会不会爆炸?起摩托车总是不看油,中途没有油而推着摩托车满大街跑.所以我想把汽油放到瓶子里(震动太厉害,不能使用玻璃瓶)带上,防止没油.有听说塑料瓶里装
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn