Delphi初学者应小心的六大问题

本文是笔者结合自己多年Delphi开发经验,列举了Delphi初学者应小心的六大问题。

成都创新互联专注于企业营销型网站建设、网站重做改版、乌审网站定制设计、自适应品牌网站建设、H5响应式网站商城开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为乌审等各大城市提供网站开发制作服务。

问题一:对类的概念理解不到位,程序开发中不能灵活运用。请看下面的程序:

 
 
 
  1.  unit Unit1;   
  2.   interface  
  3.   uses   
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  5.   Dialogs, StdCtrls, shellApi;   
  6.   type   
  7.   TForm1 = class(TForm)   
  8.   Button1: TButton;   
  9.   private  
  10.   { Private declarations }   
  11.   public  
  12.   { Public declarations }   
  13.   end;   
  14.   var   
  15.   Form1: TForm1;   
  16.   implementation   
  17.   uses CommonUni;  

在DelphiI中新建一个程序,然后添加一个按钮,就得到了下面这段程序。这应该是大家相当熟悉的一段程序,可也就是这段程序,让许多的人在做开发很长时间后,还不能很好理解。 该程序可分为三个个部分:第一部分,单元头(从起始位置到TYPE之前);第二部分(从TYPE到END的部分),定义了一个从Tform继承过来的窗体类,它包含一个Tbuttton类型的成员。最后一部分(Var到结束的部分),定义了一个Tform1类型的变量。问题就出在这里了,许多人误以为这最后一段也是窗体类的一部分,在该窗体类中经常写出这样的代码,Form1.caption = ’窗体标题’,导致程序运行时得不到所要的结果。其实最后一部分根本就属于窗体类的定义,它们不过是在同一个UNIT中而已,所以代码应该这样写:self.caption = ’窗体标题’;

问题二:将释放对象的代码写在窗体的CLOSE事件中,导致Access Violation…的错误。

一个窗体的关闭(CLOSE)与窗体的析构(Destory),在系统处理上是有区别的,当一个窗体关闭时,窗体实际上只是隐藏起来了,它占用的资源并未从内存中释放了,我们还是可访问到窗体中的数据;而当窗体响应DESTORY事件时,窗体不仅仅是隐藏起来了,而且占用的系统资源也释放出来了。因此,如果一个窗体关闭后,我们还想访里面的对象,就应该将这些对象的FREE代码写的窗体的(DESTORY)事件中。

问题三:不加区别地使用String与shortString数据类型。

String类型与shortString类型是有区别的,在默认的情况下(取决于$H开关),如果你将一个变量定义为string类型,那么会被处理成一个ANSIString类型。这种类型是动态分配内存的,以NULL为结尾,最大长度为4G,而shortString的最大长度是不能超过255个字符的。由于ANSIstring是生存期自管理类型的数据,这意昧着这种类型的数据需要更多的系统开销,所以在程序开发中,shortString能满足要求的话,就尽量使用它,以提高程序的运行速度。

问题四:进行数据类型转换时处理不当,犯错误最多的就是字符型到数字/浮点型的转换。

当将一个字符型数据转换为整型时,我们经常这样写 I := StrToInt(aEdit.Text); 表面上看这一句,没有任何问题,函数的使用,格式的写法,都是正确的。可有一种情况我们却没有考虑到,如果用户在aEdit文本框中输入的不是数字文本的话,会怎么样呢?调用还会成功吗?显然是不会的,系统肯定会弹出一个英文的错误,让我们的用户不知所措的。正确的写法是:I := StrToIntDef(aEdit.Text, 0); 这样当转换不成功时,第二个参数就会赋给I。类似的函数还有strToInt64Def,StrToFloatDef等等。

问题五:单元引用的问题。使用那个函数,就一定要引用函数所在的单元。

比如在程序开发中我们要用到一个API函数ExtractIconEx(从程序或是文件中获得一个图标),那么就一要在它的USES中把单元shellApi加入进来,否则是不能通过编译了。类似的情况还有很多,我们常常使用帮助文档,从中查找需要的函数,可当程序编译时,却通不过,为什么呢?就是因为没有在USES中引用函数所在的单元。这个问题初学者犯得最多,应该加倍注意。

问题六:避免循环引用,尽可能通过第三个单元实现。如果确实不可避免,应在不同位置进行引用。所谓循环引用就是A单元引用了B单元,而反过来,B单元又引用了A单元,产生循环。我们还看上面的那一段程序,在interface的下面有一个USES语句,而在implementation的下面,又有一个USES语句。循环如果确实不可避免,那么就应该在将A单元中的引用写在第一个USES语句中,而将B单元中的引用写在第二个USES语句中。

附言:以上只是笔者从事DelphiI开发多年,得出的一些经验。希望能够帮助初学DelphiI的朋友,尽量避免这些错误,少走弯路。

【编辑推荐】

  1. Delphi基础开发技巧
  2. Delphi编程读取txt文件数据
  3. 如何在Delphi中自动录入数据
  4. 基于Delphi的屏幕抓图技术的实现
  5. Delphi开发技术手册

本文题目:Delphi初学者应小心的六大问题
URL地址:http://www.shufengxianlan.com/qtweb/news34/74634.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联