[Delphi] 2017-09-08 10:02 我来说两句  

Delphi 之 VCL 与泡妞模式<一>

欢迎大家加入EDS Team,我相信这个团队会让大家共同进步,共同提高Delphi能力。

  这次培训,主要针对于VCL来说,学Delphi的朋友,几乎离不开VCL,正是VCL的强大,才让我们更方便用Delphi创建各式各样的系统。

  什么是VCL,VCL的全称是Visual Component Library(可视化控件库)。

  但我们平常所讲的“非可视化控件”是指终端用户不可看见,不能编辑内容,只能由程序本身来控制的控件。“可视化控件”是指终端用户看得见,可以提供编缉功能的控件。一般情况下,“非可视化控件”由TComponent继承,而“可视化控件”则由TGraphControl和TCustomControl继承。

  什么是类(class),类实际上就是类别,或者说是“种类”,例如“水果中可以分为苹果、香蕉、菠萝等等种类。

  下面一段小故事可以说明,什么是类(class),什么是对象(Object),什么是对象实例(Object Instance)

星期天,公园里小蓝和小李正在“弹琴说爱”,大家都有点口渴了。

  小李对小蓝说:带把的,帮我拿个Apple过来

  小蓝说:点烟器,你要什么样的Apple?

  小李说:Canada Apple.

  小蓝说:Yes,my baby’s momey.

  小蓝从袋子里找到Canada Apple,来个抛物线,准确落在小李手中。 

上面例子中,小李要什么?

对,就是Apple,而且指定要Canada Apple,这个情况下,第一次所说的Apple就是类别(class),而且还指定子类(Canada Apple),小蓝找到了Canada Apple,相对于小李来说,他还没有拿到,只是已经知道有Canada Apple存在,这个时候,Canada Apple对于小李来说,就是“对象”, Canada Apple到了小李手中,仍然是一个“对象”,只不过已经是一个实实在在的东西。这时,就是已经创建了“对象实例”。

  假如,在上面的例子中,小李所说的Canada Apple对于小蓝来说,小蓝并不清楚,那么小李就必须跟小蓝解释这个Canada Apple的样子,这个解释的过程,就可以称之为“定义一个类”(实际上应该是"说明对象")。  

  小蓝对小李说:What is Canade?

  小李说:What你的X头,Canada Apple就是Canada Apple,有什么好说的。

  小蓝说:你想握(What)我的X头的话,也得找到没人的地方才行,但现在你最好说清楚Canada Apple的样子,如果你想吃的话。

  小李说:晕……I服了U,Canada Apple的外皮有点像我的“优点”,吃起来的感觉跟你尝到“优点”的感觉应该有点相似,知道了吧?

  小蓝想了想,如果说不知道,今晚就没“优”点吃了,只好说:我知道了。

上例中,Canada Apple定义了两个属性。

  1.外皮颜色

  2.味道

如果换成Delphi,就是:

TCanadaApple=Class(TApple)

Public

  Property Color:TColor;   //颜色

  Property Taste:TTatse    //味道

End;

而实例中的

  Canada.Color=Red    //颜色是“红色的”

  Canada.Taste=Sweet   //味道是“甜的”

但上例子,只谈到属性,并未涉及到“方法Method”和“事件Event”

下面我们再举一个例子

  公园里,草地上,小蓝和小李相互拥抱着,

  小蓝对小李说:我想KISS你。

  小李说:可以,KISS之前,必须先吃“绿箭”,第二,KISS时间不得少于10分钟,KISS之后,必须给我买上次我看中的鞋子,还有,KISS的时候,你不可以看别的女孩,而且必须是意大利方式KISS。

上面的例子中,定义了属性、方法和事件,写成Delphi应该是这个写法:

TKissMe=Class

Public

  Property KissStyle;    //Kiss风格

  Property KissTime;    //Kiss时间

  Property OnBeforeKiss:TNotifyEvent    //Kiss之前事件

  Property OnAfterKiss:TNotifyEvent    //Kiss之后事件

  procedure Kiss();

End;

下面讲讲私有属性,保护属性,和公用属性

  小李和小蓝拍拖一段时间了,已经同居了。

  小李有5K私房钱,但小蓝并不知道。

  小蓝有荷包里有2K,小李一清二楚,但这是小蓝平时要用的,不能给小李,

  银行里有1W,是两个人一起开户的。

上面例子中,什么是私有属性,保护属性,和公用属性

如果写成Delphi,如何写

TxiaoLi = class

End;

TxiaoLang=class

End;

Unit XiaoLi.pas

TxiaoLi = class;

Private

 Property Money:double;

End;

Unit XiaoLang.pas;

TxiaoLang=class

protected

  property Money:Double;

end;