*本文涉及的所有代码均在WinNt 4、Delphi4 C/S下正确运行通过。 由于Delphi采用了真正的完全面向对象方法、当今世界最快的编译器以及领先的数据库技术,特别是她对Windows API的完全兼容,出色的代码自动生成能力……人们已经看到,在短短的几年当中,Delphi已在众多的开发工具中脱颖而出!正是Delphi的诸多优秀品质,使程序员能在很短的时间内开发出极具专业水准的运用软件,而所做的工作却是相当的少! 正所谓Let's us make better!我们应怎样充分利用Delphi的优势来更加快速地进行程序设计程序呢? 一、充分利用代码完全共享(句槟): 我们这样做的目的不仅仅是为了“偷懒”,这也是优化程序代码的一种方法。当然,首先要考虑的是能不能共享(这很简单,看看是否包含在该事件的下拉集合中),其次是要注意的是共享后有没有“麻烦”,因为正确是第一步,在保证正确的情况下才有必要去追求优化! 比如:我们在用户删除数据前给出一确认消息: PRocedure TForm1.Table1BeforeDelete(DataSet: TDataSet); begin //确认删除记录 if MessageBox(handle,'确实要删除当前记录吗?','确认',MB_IconQuestion+MB_YesNo)=IDNO then Abort; end; 那么,你只要愿意让用户在删除数据记录前进行确认均可在TDataSet.BeforeDelete事件(Table2的BeforeDelete,Table3的BeforeDelete……)中完全共享这段代码。好运不会天天有,在有的时候就不这么直接、简单了……
二、充分利用Delphi的强制转换: “As”这个单词不仅仅在英语中用处极大,在Delphi中亦然!当我们想为数个“同类”组件共享代码时,即可发挥她的巨大作用:我们只需为其中一个组件编写代码即可。 比如:想让一组文本编辑框在得到输入焦点时背景颜色变为茶色,失去焦点是恢复系统颜色,我们可以如此共享代码(让每个文本编辑框的事件公用以下代码): procedure TForm1.Edit1Enter(Sender: TObject); begin (Sender as TEdit).color:=ClTeal; //得到输入焦点 end;
procedure TForm1.Edit1Exit(Sender: TObject); begin (Sender as TEdit).color:=ClWindow; //失去输入焦点 end;
三、不起眼的Tag属性: 上面的例子似乎有点太特殊了,万一我只对其中某些组件特别关照怎么办?仍以上面的为例,比如其中有两个文本输入框需要输入数字,为引用户注意,得到焦点时颜色变为兰色,但我仍然然不想为每个组件分别写代码。 要解决这个问题可利用组件的Tag属性,先为要特别处理的组件分配非零、不等的Tag(必须说明的Delphi不会检查Tag值是否相等,设计时自己掌握);然后如下编写代码,就可依然实现共享: procedure TForm1.Edit1Enter(Sender: TObject); begin case (Sender as TEdit).Tag of 10,20:(Sender as TEdit).Color:=clBlue //输入数字的文本框 else (Sender as TEdit).Color:=clTeal; //其余文本框 end; end;
五、能偷懒时就偷懒: 这个话题本不应该写在这里,但还是忍不住…… 1、能利用对象观察器直接设置且不会影响程序正常运行的就没有必要去写代码: 由于这个话题涉及面太广,此处仅举一例说明:比如要在Delphi4中实现在状态栏上的自动提示,又没有太“苛 刻”的条件时,我们没有必要再像以前一样,先定义一个过程(ShowMyHint(...)),然后在程序初始化的地方 把她赋值给Tapplication的OnHin事件。因为只需将状态条的AutoHint属性设为True即可!当然,她似乎只能在 第一个Panel上显示(这就是没有太“苛刻”的条件时)。当然,怪我罗嗦,有的朋友居然不知道Delphi的Hint 属性由两部分组成,此处不是说话之地,感兴趣请到笔者的个人主页上去遛遛www.zg169.net/~delphiok(刚开 张,东西还不多)。 2、节省代码: 能够少写代码就没有必要多写代码,能够精炼就不要冗余: 比如,以下的两段代码实现的功能完全相同,你喜欢用哪段? 代码段一: if ToolButton1.Down=true then begin Dbgrid1.show; DelBtn.Enabled:=true; end else begin Dbgrid1.Hide; DelBtn.Enabled:=false; end; 代码段二: Dbgrid1.Visible:=ToolButton1.Down; DelBtn.Enabled:=ToolButton1.Down; 因此,我们写完程序后,不要仅仅追求程序调通,不妨也给程序代码炸炸油。 3、节省变量: 有的程序员在不需要变量的地方定义了变量,在需要变量的地方定义了多余的变量,我个人认为这都不是好的 习惯,特别是动不动就定义全局变量更是值得商榷。有的读者可能认为我是一个守财奴,现在的处理器速度都 什么年代了……但我只简单的给你展示一段代码你就明白了: procedure TForm1.Button1Click(Sender: TObject); Var s1,s2:String; begin s1:=Inputbox('数据','请输入用户姓名','); if s1<>' then begin Btn_Name.Enabled:=True; s2:=Inputbox('数据','请输入用户住址','); if s2<>' then Btn_Adress.Enabled:=True; end; end;