《Mastering Delphi 6学习笔记》之二
本文是我在阅读《Mastering Delphi 6》一书过程中的一些心得笔记,一方面因为原书是英文版,所以将一些我认为比较重要的部分整理和摘录出来,记以备忘;另一方面也希望和大家一起分享《Master Delphi 6》这本好书和Delphi 6这一优秀工具。第一部分《Object TreeView简要说明》已经贴出,从这一部分开始就按照顺序编号。因为是随手记录,所以不连贯和不周到的地方在所难免,欢迎大家批评指教。
本文不对概念和步骤详细说明,所以并不适合Delphi初学者。希望对Delphi有一定是用经验的朋友能够从本文受益。
关于Code Editor中的Diagram视图
1.和Object TreeView类似,Code Editor中的Diagram视图也是从Data Module中的类似概念发展而来的,现在也从Data Module中分离出来,从而可以应用于所有的窗体。
2.Diagram视图不会自动显示任何构件。要显示某些构件,从Object TreeView中拖动你需要的构件到Diagram视图中的白色区域即可(你可以从Object TreeView中一次拖动多个构件)。Diagram视图将会自动显示构件之间的所属关系。例如,将Form和其上的构件拖动到Diagram视图中,那么视图中所有构件上都会出现指向Form的箭头,表明所有构件都为Form所拥有。
3.可以用Diagram视图中的property connector来自动设置构件之间的一些关联。例如,添加一个TEdit和一个TLabel,并用Diagram视图中工具栏上的property connector按钮来添加一个从TLabel指向TEdit的箭头,你将会发现该箭头上自动出现FocusControl的字样,同时在Object Inspector中,Label的FocusControl被自动设置成了Edit1。这一切之所以能够自动完成,是因为TLabel所有属性中唯一一个能够指向TEdit对象的就是FocusControl属性。这样,你就可以形象化地设计对象之间的关联。反过来,你不能将property connector从Edit指向Label,因为没有对应的属性可以完成这种关联;如果你试图这样做的话,你会得到一个错误提示,并询问你的意图是否为想要一个相反方向的关联。
对于数据集构件,你还能够设置它们之间的Master/Detail关系和Lookup关系,其方法和上述步骤非常类似。
你还可以插入注释块(comment block),从而更明确的表达你的意图。
4.Diagram视图可以进行修饰,从而更美观和明确。对于视图中每一个构件或者关联,都可以通过快捷菜单来设置它们的颜色和Z-Order顺序;对于关联箭头,你还可以任意修改它的形状和指向,增加拐点等。
5.对同一单元可以使用多个Diagram。只要在Name文本框中输入它的名字,并且添加可选的描述信息即可。通过Diagram视图中工具栏上的组合框,可以在各个Diagram之间切换。你可以为构件之间的Contains关系和数据表之间的关系分别建立Diagram,这样会更加清晰。
6.建立好一个满意的Diagram之后即可进行打印。只要让焦点保持在Diagram视图中,然后选择 File | Print 即可。
7.在Delphi 5中,Diagram信息是报存在单独的.DTI(design-time Information)中,该文件的格式和.INI文件的格式很类似,可以用文本编辑器进行编辑。在Delphi 6中,Diagram信息则是保存在.DDP(Delphi Diagram Portfolio)文件中。这种文件格式类似于.DFM的二进制格式,不能够直接编辑。不过,Delphi 6仍然能够读取.DTI文件。
关于VCL和CLX
Delphi 6 目前包括两个基本库,其中VCL是从Delphi诞生之日起就一直在使用的,而CLX(Component Library for Cross-Platform)则是支持跨平台特性的新的构件库。你可以从File | New选择使用的项目类型,可以为Normal Application或者CLX Application。你会发现用VCL和CLX编写同样的应用程序,在产生的可执行文件大小方面会有一点小的差别。
当你选择VCL Application或者CLX Application的时候,构件面板也会发生相应的变化,只显示当前使用的库所支持的构件类型。这种变化不算大,你要比较细心才能够发现。在CLX Application中,构件面板中的Win32页面消失了,取而代之的是Common Controls,其中还包括几个Win32中没有的新构件。同时,其他页面也有一些小的变化。对于用户来说,很少会注意到这些细节,但是这对于Delphi开发组来说是一个极大的挑战,因为系统的许多地方都需要重构以适应新的库。应该说在这一点上Delphi开发组做的相当出色,Delphi从前版本的用户可以毫无困难的使用Delphi 6。不过你应该知道,在类似的界面之下,底层的改变是相当巨大的—这对于特定的程序员,例如编写 ToolsAPI的编程人员和其他一些有特定需要的人来讲,是必须要了解的内容。
其他的一些变化
Delphi IDE现在添加了一个Window菜单,从而可以方便的在Form Designer,Code Editor和Object TreeView/Object Inspector之间切换。这是一个很小但非常体贴用户的改进,因为在开发环境中,经常发生某个窗口被其他窗口覆盖而找不到的事情。
(《Mastering Delphi 6》中提到,可以通过注册表中的Software\Borland\Delphi\6.0\Main Window表项来设置该菜单的显示或者隐藏,其中-1代表True,而0代表False。不过在我的注册表中没有找到这个设置,不知道如何添加。如果你发现了的话,欢迎你告诉我。)
构件面板的快捷菜单中现在添加了一个子菜单,其中包含了所有的面板名称。你可以用它来快速切换到某个面板中。如果你经常不得不在面板中来回滚动以找到某个页面,你一定会非常欣赏这个新功能的。
(在默认情况下,这个快捷菜单中面板项目是按照字母顺序排列的。你可能会希望它按照在构件面板中同样的顺序来排列。《Mastering Delphi6》中提到,可以设置注册表中的相应项目来修改这一行为。因为这一段说的表项不太明确,由于时间关系我也没有进行试验,所以就把原文放在这里好了,大家感兴趣的话可以试试看。
The order of the entries in the Tabs submenu of the Component Palette local menu can be set in the same order as the palette itself, and not sorted alphabetically. This is accomplished by setting to “0” (false) the value of the Sort Palette Tabs Menu key of the Main Window registry section of Delphi (under \Software \Borland \Delphi \6.0 for the current user).
)
其他还有一些细小的改动:
1.在Environment Options对话框中的Preference页面中新增一个选项Auto Drag Docking,允许你禁止各个工具的泊位特性。如果你不喜欢Docking的话,你可以设置这一选项。(说实在的,我不知道《Mastering Delphi6》的作者为什么特别强调这个设置;我自己是非常喜欢Docking的,我总是把Object Inspector和Object TreeView组合在一起,将Watch窗口Dock进入Code Editor中,这样实在是方便不少。不过既然作者这么说,想必又他的理由,所以我还是尊重作者的意见,将这一点列为头条。)
2.在Environment Options对话框中新增一个Enviroment variables页面,允许设置系统环境变量。这样比硬编码某些路径来说好得多了,特别是编写服务器应用的程序员可能会需要它。
3.新的Internet页面可以设置将哪些后缀名的文件视为Internet files,并且允许调试Scripts等。
关于To-do List:
除了可以在View | To-do List中可视化编辑之外,也可以在源文件中这样编辑:
procedure TForm1.FormCreate(Sender:TObject);
begin
//TODO -oMarco:Add creation code
end ;
这样将增加一个名为Add Creation code的项目,其Owner为Macro。如果你熟悉了这种方式的话,编辑起来会比用To-do List Editor更快捷(当然,管理To-do List还是要用Editor)。-o指定Owner,-c指定Category,单独的一个数字指定priority。例如:
// TODO 2 –oMacro : Mouse Pressed
如果一个To-do List已经完成,可以将TODO改成DONE来指明这一点。或者在To-do List Editor中选定Done检查框也可以。指定为DONE的项目在To-do List中将显示为带删除线的形式。
你可以在to-do List Editor中将To-do List复制为纯文本或者HTML格式来进行输出,甚至可以指定HTML的输出格式(不过有点奇怪的是,Delphi只提供了Copy to Clipboard的方式,却没有提供Export to File的功能。)
代码编辑器是多页面形式(Multi-Page Interface)的,不过在Delphi 6中,这些页面还可以通过鼠标拖动来改变排列它们在代码编辑器中的顺序。也可以通过Ctrl+Tab或者Shift+Ctrl+Tab在各个页面之间切换。在页面的快捷菜单中同样列出了编辑其中的所有页面,当编辑其中打开的文件相当多时,可以通过这一功能快速切换到特定的文件(一个小而很方便的功能,和构件面板块接菜单中的Pages菜单一样非常有用。)
在Environment Options对话框中的AutoSave是一个很有用的选项,它可以在你运行程序或者调试程序之前,保存源文件,项目文件或者桌面设置,从而避免调试过程中的意外崩溃导致数据丢失。(强烈建议至少选中Auto Save Editor Files;我很奇怪这为什么没有成为默认设置。)