《Mastering Delphi 6》学习笔记之九

本文介绍了Delphi中Component的Name属性可设为空,能让Form声明更简洁、减少可执行文件大小,但全设为空可能致编译器出错,可保留一个有名字的Label解决。还提到可手动删除Component声明,用FindComponent方法引用。此外,讲解了Delphi中类方法声明及相关指针类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无名称构件的使用

 

我曾在许多Delphi资料中看到这样的说法:每一个Component都必须有一个不为空的Name,用于和其他Component相区分。过去我也对这种说法深信不疑。但是看过《Mastering Delphi 6》后,我知道我错了。Component的Name属性可以是空的,特别是对于Menu Separator,Static Label,Bevel,Shape和Panel等等。虽然IDE会给所有的构件起一个默认的名称,不过你可以在Object Inspector中把它的Name清空,这样的后果是:

1.构件在Object Inspector和Object TreeView中将变成Unnamed或者Component<0>这样的表示方法;

2.该构件的声明将从Form的声明中完全删除;

3.如果用View As Text看看.DFM文件的定义,发现无名称的Component对象定义为这样的形式:

object : TMenuItem

  caption = ‘-’

end

而一般的声明为:

object File1: TMenuItem

  caption = ‘File’

end

这个特点的真正好处在于,可以让Form的声明简洁许多,再也不会充斥大量无用的N1,N2之类标识符,从而混淆你的视线。当然,可执行文件的大小也会稍有减少。

不过,假如将Form上面所有Label的Name都设为空,那么运行该程序将产生一个错误,因为编译器看到声明中没有Label,所以不会将TLabel的有关TLabel的库函数连接进来。(编译器在绝大多数时候都很聪明,不过这个时候只能说它是自作聪明。)解决办法是至少保留一个有名字的Label。

我们甚至可以手动将Form中某个Component的声明删除。不用担心,在Form建立起来的时候这个Component不会消失,只是不能够用通常的办法来引用它了。真的有需要的时候,可以用Form1.FindComponent(‘Button1’)这样的方法找到特定的构件。如果Form中的构件实在太多,可以用这个技巧来删除一部分不太重要的声明,保持单元的简洁。

其实,要减少Label声明的数量,用Delphi 6中新增的LabledEdit是一个行之有效的办法,而且LabeledEdit可以简化窗体的布局管理。不过,LabeledEdit只对Edit有效。要减少其他不需要响应事件和处理输入的构件(如Menu Separator,Panel和Bevel等等)的声明,就只能用这种方法。

 

 

 

不同于一般的procedure或者function,在Delphi中属于某个类的方法称为method,它们的声明一般为

AProcMethod:procedure(Sender:TObject) of object;

为什么一定要加上of object呢?实际上,Object Pascal中一般的函数指针就相当于普通的指针,而AProcMethod则是一个对指针,它在Delphi中有一个对应的类型:TMethod。

TMethod=record

  Data, Code:Pointer;

end;

所以,我们在单元中可以这样:

procedure TForm1.Button1Click2(Sender:TObject);

begin

  ShowMessage(‘Click2!’);

end;

 

procedure TForm1.FormCreate(Sender:TObject);

var

  Method:TMethod;

begin

  Method.Data := Self;

  Method.Code := MethodAddress(‘Button1Click2’);

  Button1.OnClick := TNotifyEvent(Method);

end;

当然,实际上只需要Button1.OnClick=Button1Click2即可;不过,这样可以让你明白在幕后发生的事情。值得注意的一点是,Button1Click2应该声明在published段(或者和其他构件的声明放在一起,因为默认作用域就是published),以便编译器为它产生RTTI信息,否则程序可能达不到预期的效果。

 

 

Mastering Delphi》是一本关于Delphi编程语言的经典书籍。Delphi是由Embarcadero公司开发的一种可视化、面向对象的编程语言。它是基于Object Pascal语言的,并且集成了许多强大的开发工具和技术。 这本书的主要目的是教授读者如何掌握Delphi编程,并在实践中构建高效、可靠的应用程序。它逐步介绍了Delphi的各个方面,从基本的语法和数据类型开始,到高级主题如多线程编程、数据库连接和用户界面设计等。它还涵盖了Delphi的应用程序框架和库,如VCL(可视化组件库)和FireMonkey(用于跨平台开发的界面库)。 这本书不仅提供了理论知识,也注重实践。每一章都有大量的示例代码和实战项目,可以帮助读者加深对Delphi的理解和运用。通过阅读和实践,读者可以学会如何使用Delphi创建窗体、处理事件、编写自定义组件、编译和调试代码,以及优化应用程序的性能等。 《Mastering Delphi》还介绍了一些企业级应用开发的最佳实践和技巧,如版本控制、错误处理、安全性和性能测试等。这些知识对于那些希望将Delphi应用于商业项目中的开发人员来说尤为重要。 总的来说,《Mastering Delphi》是一本全面而深入的Delphi编程指南。无论是初学者还是有经验的开发人员,都可以通过阅读这本书,掌握Delphi编程的核心原理和技术,并将其应用于实际项目中。它是一本值得推荐的书籍,可以帮助读者在Delphi开发领域中不断进步和成长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值