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

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

创业者应避免对投资者说的五句话 直接拿来用!最火的iOS开源项目(二) 西部数据Pat Wilkison:云计算市场是创新热点 猎豹浏览器发布手机版:PM谈开发理念 成为伟大开发者的“九步曲” 使用GPU构建更便宜的Google神经网络 Facebook与Yahoo!的“火花”:系统间实时数据流管理工具 视金钱如粪土?Yahoo!又要买了,梅姐的算盘是这样打的 MySQL手册不再遵循GPL协议:MySQL走向闭源前兆? 扁平化设计会扼杀人们的创造力吗? 又一巨头涉足移动视频分享领域:传雅虎欲收购短视频应用Qwiki 史上最牛:主要靠三消游戏IPO King也许会是第一家 乐视超级电视预约启动 1小时预约近1.4万台 王坚:未来一年阿里云会有很大变化 梁胜:开源并不是做好软件的唯一方式 如何为IE 10编写特定的样式 MySQL手册许可证更改乃是Bug惹得祸 开源世界高峰论坛首批演讲议题公布 测试工程师的心灵鸡汤:谦虚、不沉默、有危机感、不断努力 高德地图API“沿图有你,晒出你的LBS应用”活动拉开帷幕! 谁能找出Windows 8.1的安全漏洞,就将获得微软10万美元奖金! 【直击美国云计算】Facebook分享数据中心新网络架构Fabric 【直击美国云计算】OCP发起产业界的Maker运动 红帽刘长春:开源是推动云计算和大数据发展的重要力量 【直击美国云计算】出货量达x86的20多倍 ARM或将成为数据中心主角 孙小群:将SAP HANA打造为开放的PaaS平台 GitHub推出重大改进:强调速度、内容和交互性 如何打造测试工程师精英团队? 如何做个有“钱”途的测试工程师? 苹果开始关注企业移动化 iOS 7的10大办公功能 “开源群英会2013” 参会名单(持续更新中) 急死我了!求教高手有关焦点的问题! 谁有《COM技术内幕》的第13章的例子的源码,送100分,谢谢先! mysql的最大链接数在哪里修改? 图像区域选取,高分求解! Shell_NotifyIcon问题 在PL_SQL中怎样用一个表中的数据去更新另一个表 oracle 9初学者 sybase的JDBC驱动字符串是什么阿?? 如何播放Flash? 我的IE不能自动填写域名了!!!第一个答对者20分! 一個很簡單的問題,在線等候,謝謝!! /usr/bin/top的原码在哪个路径下啊?小弟找了好久还是找不到急啊! 尊敬的流芳先生: 程序员考试中的一道很简单的c试题,有个问题 Sun Blade 2000 要多少钱? 活动目录中,遇到这个问题。 我的机器用程序向局域网内的另外一台机器发送一条信息,类似于发送控制台信息 [请教]会用客户端ftp软件客户端代理功能的进来帮帮忙 急求VCD的Specification! 在线紧急求助!!! 在MDI中如何更改子窗口标题? 请问有哪位好心的大哥能给我一个Bounds Checker V601_D.exe 的序列号? 100分求助如何在iPlanet中配置cgi-bin? 高分求助:请问如何确定某个窗口是否存在? 怎么样在vb中把一个excel表的数据拷贝到另一个excel中(包括行高,列宽,字体等) In Pro*c, 为什么我不能用#define UNAME_LEN 20 去定义常量. 高分 高分求《.NET开发的最佳实践与案例分析--北京讲座》示例源码及相关资料!!! 请教高手 那们有 AlphaBlend 函数的帮助中英文都行。 麻烦大家帮我看一下,代码错在那里。 详细说说rs.open sql,conn,Cursor Type,LockType 紧急求救!在线等待: 哪里可下载INTEL IPL库? 关于 我的GNOME的主Panel消失了,我该怎么办???? 一个C程序的问题求助! 请大家推荐一个支持EJB2.0 的免费的应用服务器 运行时建立数据库表 麻烦各位一下,这个错在哪了? 关于access关于自动增量的字段! 关于快捷菜单的问题。 世界上最大规模的大学生群架[真实](转载) win2000日文版与98SE怎么连接? IE6下注销用户的问题。 在线等待! 高分求助! 谁知道哪里有VB7的电子书?? php如何在长字符串中加<br>换行符,以达到强制换行目的?? 谁能讲一讲用evc访问如何访问pc上的数据库? win2k下的一个sql语句 紧急求救 高分求高分求“对话框打印”源码,大家帮我看看我的为什么不行? 关于南岳游记的作文我要写一篇南岳游记,虽然我去过南岳,但看了些什么我都忘了.希望大家提供些关于南岳的景色、历史、文化、传说(如果南岳有传说的话)的素材,或者告诉我写游记的方 为什么UFO出现的这么频繁呢? UFO爱好者帮我看看我的亲身经历是怎么回事估计我还是5、6岁的一个夏天早晨,我起的很很早.我发现天空有一个金黄的物体(可能有淡淡的橙色光),有篮球大小,像足球一样有很多个小面,但是 想去衡山旅游,想知道衡山有哪些特产?想买点特产回来送老爸和岳父 为什么外星人频繁出现不论是杭州还是广州均有大量Ufo的出现,我们国有什么值得它们频繁造访 小时候的UFO真实经历,这是怎么回事?8岁的时候跟周围的人说了很多关于外星的事,宇宙空间是一层一层的,在同一个地方穿过去周围的东西就全变了,跟三维、四维的道理一样,现在了解了多纬度 看云识天气 "云就像是天气的招牌" 把招牌换成代表好不好为什么 9月1日20:00,小明用天文望远镜观察到正北方向有一颗恒星,不移动望远镜,9月16日何时才能观察到这颗恒星 1997年UFO事件是怎么回事 一个电子像一个固定不动的质子运动时,则1.有可能发射电磁波2.不.3.电子和质子组成的系统能量一定守恒4.电子和质子组成的系统动量守恒为什么不选3呢? 一天文望远镜在2004年2月28日晚20:00对准一颗恒星,保持不动,2日后这架望远镜重新对准该恒星的时间是? 9月1日20点时用天文望远镜对准织女星,若保持望远镜方向不变,则9月2日晚望远镜中再次见到织女星的时间是A19时56分4秒 B 19时3分56秒 C 20时56分4秒 D 20时3分56秒 说下原因 关于各种花的文章和各种花的话花语求牡丹,茉莉,梅,桃花,向日葵,玉兰,紫罗兰,满天星,海棠的相关文章,要是名作家写的哦!如果知道一个,就说一个,说过的就不要再说了,全知道的正好,还有花 为什么天文望远镜的放大倍率对恒星不起作用?猎户座β在天文望远镜中为什么会成椭圆形? 9月1日晚8时,用天文望远镜对准织女星,若保持望远镜的方向不变,则9月2日()时间应该是 请说明理由 "他不是个做事情的人" 如何翻译成英文? 天文望远镜焦比5.0 适合看是恒星吗?请问5.0的焦比适合看系外恒星吗? 大道之行也文言文中通假字 这不是正常人会做的事 怎么翻译成英语 UFO的故事,不是……UFO……的故事 一同学在8日20时把天文望远镜对准织女星时,望远镜保持位置不变,那么它下次对准织女星的时间是?A.9日20时 B.9日20时3分56秒 C.9日19时56分4秒 D.9日19时3分56秒 哪有高一英语听力 有关外星人的故事 王同在某日21时用望远境对准织女星,并固定望远镜,他第二天看时当地时间为 A21B20 56分C21 4分D21 6分 艾青 太阳的话 的写作背景就是她当时是在什么样的环境下写的这首诗? 关于外星人的故事 快乐的暑假生活 500字 东阳·童年·骆驼队有那4个片段 外星人的故事 快乐的暑假400字 太阳的话.白桦的写作背景 UFO经历,刚上大学的时候,对宇宙的认识还是一片空白,大一下学期的时候,突然头晕了很长时间,大概有一年多时间,就这段时间断断续续的记起了自己小时候的事情,特别是关于差不多8岁大的时 求助!信知道古文《大道之行也》中“大道之行也”的“之”是什么意思?谢谢! 阳光季节 seasons in the sun写作背景 来篇初2文言文(大道之行也)的翻译 蛋鸡养殖3000只大概要投资多少钱?请问各位养殖前辈,养3000只蛋鸡需要投资多少钱?请各位帮忙算算除了建设鸡舍费用外,其他的鸡苗防疫等费用需要多少钱? 《东阳·童年·骆驼队》可分为哪四个片段 英语翻译 尊重别人就是尊重自己 刘墉 中国人民从此走上了自力更生的道路 这句话有什么错别字?实在是找不到了……请热心的人们帮找找……三楼的同志,我打的字不可能会错吧……不过呢,印错倒是很有可能…… …… 三个太阳写作背景 5年级19课最后一段从我谨慎的把握住我生活中的小船开始到完 的破折号崎什么作用 怎样下载高一下学期英语听力 西域男孩创作"season in the sun"的背景故事?听说很让人感动.要主要的故事就好了. 文言文《大道之行也》的翻译 去杭州旅游 景点 如西湖十景 美食~啥的5月底要去杭州玩玩 3天的时间 麻烦各位熟悉杭州 了解杭州景点游玩情况的朋友指导一下 具体就说说杭州有啥好玩儿的地儿 这三天怎么安排 游西湖的 记金华的双龙洞的游览顺序,明天要交的!叶圣陶写的!.题是这样的:游览的顺序依次是--------、---------、---------、--------------------,最后-------------. 6年级上册19课一面的 我向里面望了一下— 阴天 破折号作用还有一个矮小而结实的日本中年人一一内山老板走了出来.我不好意思的笑了笑,摸摸衫里的衣袋一一袋里只剩下一快多钱.使我立即 杭州的新西湖十景的旧西湖十景有哪些不光要名字还要有简介 记金华的双龙洞是按什么游览顺序 文言文{大道之行也} 哪里可下载新标准高一英语听力 英语翻译 谁是世界上第一个用望远镜观察恒心和行星的天文学家不是恒心,是恒星 英语翻译是不是:there are something that just short memories.语法对么?如果不对应该是什么呢? 文言文《大道之行也》怎么解释 银河系中有两颗行星绕某恒星运行,从天文望远镜中观察到它们的运转周期之比为27:1,则他们的轨道半径比是 游衡山记不要抄的 要自己写的。 为什么现在UFO 这么频繁啊?最近的 广州 8.30的视频2次出现 今年还有 智利的UFO 视频 说实话我就算亲眼看到 也会认为是假的 我的意思是说:如果是假的 那些拍的是什么东西啊 国家研制的秘 望远镜发明后,( )首先用望远镜观测银河,发现银河由恒星组成?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘