分享
 
 
 

Delphi之快速设计(程序设计篇)

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

*本文涉及的所有代码均在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;

四、充分利用Delphi的CodeInsight技术:

(以下言论均假设在Delphi的默认条件之下)

1、利用Self关键字:

也许有人以为我搞错了!其实,这里要向大家介绍的是笔者(因记性太差)“惯犯”的又一“伎俩”。在有的时候,我们可能记不准组件的确切名字(Name)了,这时你要是再返回窗体表格去确认一遍的话(大多数的朋友应该是这样的)未免有点太对不起时间了,此时你要是利用Self就特别省力,因为Self在Delphi中是显式地引用该组件所在的窗体,因此,我们可以输入Self后加一逗点以此激活Delphi的Code Completion,此时系统会立即为你显示一包含该窗体所有组件及窗体本身属性的下拉列表,你从中选择所需组件即可。这样,就避免了来回切换窗体表格的这一工作量。

2、利用代码补缺(Code Completion):

我们现在再也没有必要让自己去记忆太多的参数细节了,因为有了Delphi的代码补缺功能。在具体解释之前,还要罗嗦一点,Delphi的Code Completion默认的快捷键会与我们已用的某些快捷键冲突(如Ctrl+Space就与我们打开、关闭汉字输入法的快捷键冲突),因此请先解决这个问题。

当然,Code Completion一般会自动激活,但是不要以为就万事大吉了,本人认为Delphi的此项技术应向VB学习,此言怎讲?举例来说吧:当你输入StrToint(edit1.后,Delphi不会自动显示edit1的属性,此时你就将用Ctrl+Space来激活Code Completion,特别是嵌套很深的时候,Delphi似乎也糊涂了。

3、利用代码参数(Code Parameters):

激活快捷键是Ctrl+Shift+Space。这项功能也是Delphi自动实现的,正如上述所言,当我们来回切或是光标移走时,这项功能也就随之消失了,当我们需要确认该函数的具体参数时即可以此快捷键打开。

4、利用代码模板(Code Templates):

这项技术再次体现了Inprise公司Delphi开发组的工程师们高超的技术及处处为用户着想的高尚品德!(只是不希望再听到又有人被微软挖走的消息)

激活快捷键是Ctrl+J。此项功能实现机制与代码补缺的差不多,只是她不是自动的,当然最另令人激动的一面是用户可以定义自己的模板。比如笔者定义的一个模板:快捷-〉“msg”;代码-〉“MessageboxMessageBox(

handle,'|','',MB_Icon...+MB_...);”,只要一输入msg然后按Ctrl+J整个代码“脱颖而出”,并把光标帮我移到我该补充输入的地方,简直爽呆了!

注意:如果你为自己定义了很多可爱的模板舍不得丢掉的话,不妨把...Delphi4\Bin目录下的Delphi32.dci文件备份,重新安装Delphi后以此文件覆盖即可。

五、能偷懒时就偷懒:

这个话题本不应该写在这里,但还是忍不住……

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;

当然,本文的这些小例子仅仅从侧面表述了笔者的一些个人观点,要充分体现Delphi的高效性,这些还远远不够!限于篇幅,关于数据库以及其他高级话题在这里均未涉及,特别是数据库编程方面,Delphi提供了相当的灵活性!当然,万变不离其宗,只要随时注意Delphi是完全面向对象的,有对象就考虑其属性、事件、方法、继承、引用等等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有