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

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

借助API Telegram能否成为第二个WhatsApp 机器学习也感性:90后软妹纸的编程之路 为安防与视频监控而生 西数紫盘首发 秘闻:鲍尔默离职,或与坚持收购诺基亚有关 【OSTC讲师专访】Thomas Yao:开源社区最缺有能力的领导者 对比MySQL,你究竟在什么时候更需要MongoDB 不以“大小”论英雄,对比IBM、AWS,谁才是Hadoop界的MVP? 参加“我们都用JIRA”视频征集大赛 赢取乐视TV超级电视 开发者下一个待开发市场:印度 一周消息树:80%开发者背井离乡,70%经常加班 移动周报:最受欢迎的跨平台开发工具推荐 研发周报:Mt.Gox破产,都是错误编程惹的祸 数据挖掘+人工智能,教育定制化下的学霸量产 通过700合作伙伴的进一步细分,Google变得越来越像微软 一周热点:高薪必备:Hadoop求职者的6大攻略 谷歌Android主管:两周内为开发者推出可穿戴设备SDK 【OSTC讲师专访】魏子钧: “中国式开源”没有“然后” 揭秘CarPlay欲将颠覆汽车产业的真相 联想王岳源:利用Web App推动互联网转型 IT经理人:提高团队工作效率的11个方法 30美元一小时,数据科学家的收入是否太低? 选择Go语言的12个理由 动鱼数码携三款大作参战Unity游戏及应用大赛 从Google、Apple、Dropbox、Twitter和Square学到的管理哲学 软件开发就像炒股,关键看你怎么选股票! iOS 7.1正式版:新增CarPlay连接功能、完美支持iPhone 4 【OSTC讲师专访】马全一:Docker,Hadoop的竞争者来了! 福布斯:全球那些富可敌国的科技大佬们 抢工作、争资源,如此聪明的AI你拿什么阻止? iUI:移动Web应用开发必备的开源框架 支持iOS 7.1!苹果发布Xcode 5.1更新 请问将帖子另存为脱机文件后如何看,是不是要下个什么东西? 计算机系的考研有用吗? 为什么Agent执行完毕后,页面无法跳转到print指定的地方,在线等!!!! 求助,有关框架页的问题 请问如何可以把 TTreeview.items 和 TListview.items 保存到文件中? DVD解码器? 阿东,提供一个串口通讯测试程序吧! 为什么不能运行UPDATE语句? 清高手指教!!! windows网络编程书籍? 在什么地方可以看到Lotus有哪些保留域,怎么那公司连这都不提供呢? asp的一个BUG??谁能解决这个问题啊. 简单问题,呵呵! 刚毕业的计算机本科生怎么提高自己的工作经验!!! 图标变色问题 急!!程序做完了,但放到客户机上无法连接服务器上数据库??? 关于.net 2003+win2003 server下使用多媒体控件的问题,谢谢 布什总统给12岁中国小姑娘的回信 那里有VC6.0内幕技术的第五版下载 发送的问题[初学] 数据表加密 关于DELPHI6操作INI文件的问题! 散分啦,快来抢分!谁能提供计算机中英文论文一篇,来者都必有分! 求银行家问题的C语言解法 请问,在中国,VC程序员的主要工作是什么? 菜鸟问题,ADO添加记录已经在浏览器上看到结果了,可是实际的ACCESS数据库却没变呢 怎么刷新整个窗口包括标题栏 订购了程序员全年杂志,不是送一本书吗?都已经出版这么久了,怎么还没有送过来呢?! 散分啦,快来抢分!谁能提供计算机中英文论文一篇,来者都必有分! 两个combobox关联显示(在线等) 关于我的yamaha 声卡在2003 不能用的问题 我用WIN98浏览器下载的文件都有错误。 Tomcat中的发行目录怎么设置! 初学者的问题. 关于最终用户许可协议 JPG图片怎么能实现部分透明? 如何用VB.net编写控件 关于ASP中对文本文件的skip(n)操作到底怎么做 关于SQL的菜鸟问题 大家现在用什么软件管理源代码啊。60分相送。 今年是考C 还是C++啊? 怎样判断一个线程已结束 我用new新建了若干个基类是cwnd的窗体cmywnd,然后想在每个窗体内定时让它们自己消失,我应该用什么函数?是destroywindow吗?最后还用不 vs.net 2003 中文版 的帮助MSDN是不是有问题? 清问这个SQL有什么错,还是FB1。0不支持? 是我的usb口的问题吗?? 怪事 急 路径绝对正确,为什么服务器只能下载rar 不能下载EXE 文件 已知,f(x)=arctanx,其二导f''(x)=(-2x)/(1+x*x)^2,f''(0)=0,试: 一个有趣的问题,请大家看一个小程序,来者有分。 这个写者优先是不是有问题????麻烦看一下,小弟实在看不出错在哪里 请问有没有办法得到[系统托盘]上其它程序的所显示的Icon?? 三顾茅庐的阅读答案~~求 谁可以告诉我地里种的经纬图怎么看啊,...越好, 你知道历史上那些人也用类比的说理方法而劝说成功的(至少说出两个人及事),事例! 《三顾茅庐》阅读答案 初中的经纬图怎么看?急... 什么是电桥 为什么电桥平衡? 三顾茅庐的阅读答案1;有成语来概括下列句子.1;就像鱼儿得到水一样啊.2;像拨开云雾见青天.2;简述刘备三顾茅庐的起因、经过和结果.3;‘他们来到隆中,只见那里的山冈蜿蜒起伏,好像 谁能教我怎样学地理?特别是那些经纬图,要怎么个看法呢? 简述非平衡电桥与平衡电桥之间的关系. 三顾茅庐阅读答案 物体做云变速直线运动第2秒内的位移为20m第5s内位移为40m求物体加速度和初速度(注0时刻的速度叫初速度) 请问怎么劝别人抓住机会?加上一些成功人士的例子!就是劝别人一定要抓住眼前的机会! 苗木地径与胸径怎么换算 比如一颗金桂地径是25厘米 那它的胸径大概是多少 麻烦给个准确的算法 一个圆台有几个面?面面相交成什么线 在天平的左盘中放一个封闭的透明盒子,里面装有一只小鸟当小鸟落在盒底上时,天平平衡当小鸟在盒子中平稳地飞行时A.天平仍平衡 B.左盘下沉 C.右盘下沉 D.无法判断 食堂碗筷清洗消毒有什么标准或规范 圆台是有几个面围成的?它们是平面还是曲面?圆台的侧面和底面相交成几条线?它们是直的还是曲的? 在天平的左盘中放一个封闭透明的盒子,盒子里面装着一只小鸟,当小鸟落在盒底时,称得鸟和盒子总质量为300克,已知盒子质量为200克.那么,当小鸟在盒子中飞翔时,天平盘中家多少克砝码,天平 黑龙江 现在胸径13-14公分的杨树市场价格多少! 细胞分化是指细胞分裂产生的子细胞发生变化,形成具有不同( )( )和 ( )的细胞.最细胞分化是指细胞分裂产生的子细胞发生变化,形成具有不同( )( )和( )的细胞.最终产生的子 古代名士游说君王制止战争的例子 能直言相劝的人是什么心 圆台共有几个面,这些面相交于几条线? 用汉语怎么说? 还在烦恼环形灯管怎么换? 以小人之心度君臣之腹,“度”发音是“duo"还是“度” 用中文怎么说 a lot of 与lots of与a lot的区别,修饰什么! 真核生物中基因工程的载体构建方法 汉字合体字组合模式的四大种类型是 生活垃圾主要分为哪四大类? 如何构建原核生物载体 汉语四大白话有哪些?分别有哪些代表小说, iphone4电充不进去,今天自动关机了 充电器插上没有反应 也开不了机 怎么回事啊? 5千克花生平均装在4个盒子里,每盒重多少千克,每盒重量是总重量的多少? 高中是比较好点的那种哈 按要求找图或画画!1.女,普通中学生,金色短发,穿着白色T恤衫和淡绿色的外套2.性格:热情,执着3.图片千万千万不要日本动漫的唯美和华丽,千万千万不要!线条要粗旷,但看起来也要漂亮.4.从头 关于市民出行交通工具选择方式调查报告复制也行 另求调查报告格式 顶角为120°的等腰三角形.底边长为腰长的根号3倍吗 用的是28w的环形灯管,坏了换32w的,之后不亮,只是亮红光灯具店没有28的就买了32的,按上之后和那个卡子比稍微大点,按上之后就那个接头处等了15多秒才亮一点红光~那店主明明说能用,怎么弄了 数字电桥的用途?有什么用啊? 请问my isabelle是什么意思? 若铁球从塔上落下的过程中,最后一秒内的位移约是塔高的51%,则这塔有多高 数字电桥问题电桥测量电感和电容的精度最高能达到多少?数字电桥频率多少合适?是不是越高越好?频率高低和测量有什么关系?是不是频率越高测量精度越高? 用汉语怎么说 废餐巾纸是什么垃圾 数字电桥的使用和注意事项? boutique什么意思 餐巾纸属于哪种垃圾 这盒子有多重的英文怎么写(3种) 若等腰三角形的底边长是腰长的根号3倍,则顶角为A 60°B 90°C 120°D 150° 在三角形ABC中,∠A=∠B=30°,∠MCN=60°,∠MCN的两边叫AB边于E,F两点,将∠MCN绕C点旋转,(1)画出△BCF绕点C顺时针旋转120°后的△ACK(2)在(1)中,若AE^2+EF^2=BF^2,求证BF=根号2CF 细胞生长:字细胞在生长过程中,发生变化,形成具有( )和()的细胞的过程 原核表达,为什么空载表达的很好,目的蛋白没有表达,可能的原因有什么?载体用的是PTE32a+,菌用的是大肠杆菌Rosetta. 《三顾茅庐》这篇文章题目答案有吗 教我看地理经纬图啊?! 有一蛋白质混合物(重组表达蛋白的菌体裂解混合物),怎么测定其中目的蛋白的浓度? IT管家到底是什么 会议分组安排 美国数学建模lunwen 求用英文写一篇在旅游业工作的优缺点?字数在150以内就行了.Advantages and disadvantages of working in the tourism/hospitality industry?这个是题目.从哪复制的啊,这么不靠谱 金东查获1000多万元假减肥药或引发义乌打工男子联合女友从其追求者处骗钱穆尔西出庭态度不屑拒受审 埃及部署2500元买了本\"巴基斯坦驾照\" 主城区小区停车日趋紧张 凤起立交边526岁小伙车祸后脑死亡 家属捐出他的16秒26 17岁高二女生单手玩魔方杭二中女生林心悦全国中学生物理竞赛第周日较强冷空气杀到彻底把杭州带入深秋浙医二院对抗菌药物管理动真格 有医生猪木在朝开设事务所 称愿为日朝关系做缅甸传奇双胞胎重聚 八岁即建“上帝军世界银行和联合国报告曝光索马里海盗产斯诺登发公开信谴责美英 吁全球性解决芬兰外交部长期遭入侵 媒体乱猜中俄黑韩国整形“名医” 在京多为游医【图】首度受审 穆尔西大闹法庭韩考场现高智能作弊 超小耳麦直径仅2缅甸传奇双胞胎重聚 八岁即建“上帝军西班牙警方出动便衣查黑工 一华人工厂土耳其与北约和美国在地中海举行军演机场公交专线开到解放碑匠人与土地的相守 五常大米的品牌化之全部场馆观众席请你免费就座前海征信与摩拜单车战略合作 共同倡导小目标:去外滩Sabor米其林体验餐新一代激光电视诞生 尽在艾洛维搞激第责令整改 守着改 行政处罚 难处罚匆匆 谨以此文纪念我的婆婆2017年度飞行员招收初选福彩“幸运农场·金秋采果季” 42680岁牛犇当上邮递员别样中秋礼物今年遇热 微虎电动四轮车超八成游客出境游重点是购物 凯撒旅游《幻城》 换档周三周四2016世界旅游城市联合会重庆香山旅我并不重要 请你记住TA青山中的声音强化高端品质定位海信南非举办ULED主题论坛今日开坛全市调整退休人员基本养老金ISC国际超红商学院获爱播购天使轮5
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘