1.4.3.1 调用标准对话框
您可以发现,除了Font,Find,Replace对话框之外,其余标准对话框的Events页都是空白的。因为它们本身是不可视的对话框形式,所以不能响应标准的鼠标键盘操作,只能在程序中调用它们。在本章第一节的Demo程序中,我们已经对用Color对话框有了了解,在程序的适当位置加入对话框所属的Execute方法,可以执行标准对话框。
在编制应用程序时,您可以先设计好主菜单。在需要使用标准对话框的菜单项的事件处理过程中,调用标准对话框的Execute等方法,以满足设计需求,即响应菜单命令弹出标准对话框。
1.4.3.2 OpenDialog和SaveDialog部件
OpenDialog(文件的打开)和SaveDialog(保存对话框)部件处理文件的打开与存储,它们拥有完全相同的属性域。DefaultExt属性表示缺省扩展名。当用户没有输入文件的后缀时,可以为用户文件自动加扩展名。FileName属性指定出现在FileName正文框中的缺省文件名。Filter属性提供了文件过滤器。FileEditStyle决定在输入文件名时用Edit还是Combo- Box;设置为fsComboBox时,允许使用历史列表HistoryList属性,这在应用程序需要经常选择文件时,可以节约大量的时间。HistoryList属性保存有在File Name下拉式编辑框中显示的文件名,使用[TStrings]的省略按钮可以编辑历史列表。您也可以编程实现将HistoryList属性设为以前用OpenDialog打开的文件名历史列表。下列程序段可以实现自动历史文件名加载:
if OpenDialog1.Execute then
OpenDialog1.HistoryList.Insert(0,OpenDialog1.FileName);
1.4.3.3 ColorDialog和FontDialog
颜色对话框ColorDialog我们在前文的例程中已经用过,其更详细的功能如Options的设定请查阅在线帮助。
字体对话框Font可以帮助用户获取各种方式的字体。使用OnApply事件,可以使得Font对话框中包含一个Apply按钮,按动它,对话框中设定的字体会立即应用到指定的对象中,而对话框仍然是打开的,这样更便于观察修改的结果。
以下的例程在窗体中先放置一个按钮Button1,调用字体对话框来改变按钮上的Caption属性显示的字体:
Procedure TForm1.Button1Click(Sender:TObject);
begin
FontDialog1.Execute;
end;
Procedure TForm1.FontDlgApply(Sender:Tobject);
begin
Button1.Font:= FontDialog1.Font;
end;
1.4.3.4 PrintDialog和PrintSetupDiaog
打印对话框PrintDialog和打印设置对话框PrintSetupDialog可以显示标准打印、打印设置对话框,支持打印文件和打印设置功能,设置它的Options属性可以规定对话框的表现形式
1.4.3.5 FindDialog和ReplaceDialog
FindDialog和ReplaceDialog提供了查找、替换两个对话框部件,对于寻找和替换文本是极其有用的。在FindDialog和ReplaceDialog中都有OnFind事件,当用户单击寻找对话框中的Find Next按钮时将触发这一事件。FindText属性中保存了用户在Find What编辑框中输入的文本。在ReplaceDialog中还有OnReplace事件,当用户单击替换对话框中的Replace和Replace All按钮时,将触发OnReplace事件。FindText和ReplaceText属性分别保存了用户在Find What和Replace With编辑框中输入的文本。
1.5 使用Delphi的工程管理、设计工具
Delphi 2.0是完备的工程设计系统,除提供了大量的可视化编程部件和简单方便的设计方法外,还备有功能强大的工程管理、窗口设计工具。
1.5.1 创建多窗体工程项目
绝大多数的应用程序都用到不只一个窗口,Delphi允许用户创建多文档界面(MDI)应用程序。应用自动创建窗体、窗体样板、对话框专家、应用专家等,可以使得创建应用程序更为方便快捷,而且可重复利用,大大地降低了工作量。
1.5.1.1 创建一个含有About框的例程
作为例子,我们先创建一个含主窗体和简单的About框的应用程序:
在Delphi中创建一个新工程,并为空窗口增加一个Button部件。我们把它作为主窗体,目的是当按动按钮部件时,调出About窗口。下面我们直接进行About窗口的创制。
选用主菜单的File|New项,在New页中,选用Form样板,Delphi会自动创建一个空窗体Form2。您可以在其上进行About框的设计,例如加入标签以显示各种信息、加入图片帮助说明等。将Form2的BorderStyle属性设置为bsDialog,则窗口成为运行时不能改变大小的对话框。
下面编程实现主窗体对About框的显示控制。很可能在设计时,两个窗体出现重叠,Form1被About遮住。用Shift+F12产生View Form对话框,可以选择窗口的名字,调出所需的窗体Form1,双击其上的按钮部件,在事件处理过程加入以下的程序:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
由于Form1窗体调用About窗体,所以必须在Form1的库单元程序中对引用About进行说明。在Unit1的Uses后面加入About的库单元名Unit2。运行程序,在主窗体上按动按钮,可以出现About框。在框外单击鼠标,会回到主窗体中。
在About窗体中加入一个按钮,并将按钮的ModalResult属性设置为mrOK,同时将按钮的标签的Caption改为OK。这样一个有模式的About框已经建成了。将窗体Form1中Button1的OnClick处理过程的代码改变如下:
Form2.ShowModal;
再运行程序,除了与上述功能相同显示About对话框外,该程序只有当用户按动About框的按钮或被About窗控制图标关闭窗口后,才会回到主窗体中,而不能与第一个窗体发生交互行为。这就是方法Show和ShowModal的主要不同之处。
1.5.1.2 指定自动创建窗体
上面我们简单地生成了一个含About框的双窗体应用程序,运行时,应用程序启动时将自动创建第二个窗体。窗体保持隐蔽状态,但仍然占用Windows的资源。在大型应用程序中,有时不希望在应用程序加载时自动创建所有窗体。Delphi可以指定哪些窗体被自动创建。
选用Project|Options,Delphi显示Project options对话框。如果Forms不是当前页,按动下标签使之可见。如图1.12所示:
图示为Delphi装载的TextEdit例程(.../Delphi 2.0/Demos/doc/TextEdit.dpr)。在MainForm正文框中输入主窗体的名字。当应用程序启动时,主窗体自动打开并获取输入焦点。对MDI应用,主窗体的FormStyle属性必须设置为fsMDIForm。在Auto-created Forms列表框中列出了在启动时自动创建的窗体,缺省时工程文件的所有窗体都在此列中。
如果不需要自动创建窗体,使用箭头按钮把窗体移动到Available Forms列表框中。自动创建的窗体可以用Show方法进行显示,而不自动创建时,必须编程实现窗体的显示。在TextEdit工程中,定义一个TEditForm类型的变量EditForm,使用了以下的代码显示第二个窗体:
Begin
EditForm := TeditForm.Create(Self);
EditForm.Open(OpenFileDialog.Filename);
EditForm.Visible := True;
End;
也即,必须使用Create方法创建窗体,同时将窗体的Visible属性设为真。
1.5.2 使用工程管理器Project Manager
当窗体的数目逐步增加时,跟踪窗体以及与之相连的库单元代码就变得比较烦琐。用Delphi提供的工程管理器Project Manager可以使得管理各种窗口更为方便。
1.5.2.1 工程文件的组成
工程(project)是整个应用程序的源文件集合,这样的文件一共有三种:
1.一个包含主程序部分的工程文件,用以驱动由Delphi创建的Windows程序,扩展名为.DPR。这是在用户的工程被装载时就运行的全局应用程序文件,它的名字出现在Project Manager的标题条上。工程文件一般是Delphi自动创建的,用View|Project Source可以调出该工程的源文件,如果需要,可以对工程源文件进行编辑。
2.一个或多个窗体文件,它们含有相应的库单元文件。窗体文件的扩展名是.DFM。这些文件含装在窗体上的控制部件。在Delphi中这样的文件是在用户设计界面的时候由Delphi自动生成的,而且不能编辑。在Delphi中,一个应用程序至少需要一个窗体。
3. Object Pascal库库单元文件。 它们的扩展名为.PAS。窗体的库单元文件包含了程序部分,用以控制窗体的行为。在一个工程中,还要包含附加库和被应用程序其它部分调用的支持子程序。uses子句中包含的标准库单元文件包含了支持可视窗体及其控制的对象声明。这些库单元也包含了用于激活窗体的事件处理过程程序。
1.5.2.2 使用Project Manager进行工程管理
选用View|Project Manager,会调出Project Manager窗口。
Project Manager主体部分列出了库单元以及相关联的窗体的路径,当库单元和工程在同一目录下时,路径不再显示。Project Manager包含了应用程序的所有源文件和窗口。并不是每一个库单元都拥有一个相关联的窗体。Project Manager可以作为工程的一个简捷目录。在列出的任何一个窗体或库单元上双击鼠标左键,Delphi就会产生此对象的代码编辑器。
Project Manager 窗口上有增加、删除对象以及查看对象的加速按钮。Options加速键能够打开前文所述的Project Options对话框。如果在Project Manager打开时编辑了工程各文件的源代码,可单击Update加速条按钮刷新对象列表。
1.5.3 使用窗体样板和对话框专家
在前文的例程中,我们创建了一个简单的About框。在很多应用程序中,都会用到这种进行信息提示或表示版本信息的对话框。Delphi的设计思想是软件可重用,所以系统phi已经载入了一些用户可重复应用的窗体样板。使用窗体样板,可以简单地生成各种对话框,节省了大量的重复工作。
1.5.3.1 使用窗体样板创建窗体
创建一个新工程时,Delphi为用户创建了一个新的空窗体。如果需要使用一个窗体样板,向工程中增加一个窗体。选用File|New,Delphi即会显示New Items对话框。在Forms页上,从样板库中选择中意的新窗体增加到工程中。例如,Delphi提供了About Box样板。如果选择它,About对话框就增加到工程中,用户只需加入自己的各种信息即可,这样就简化了工作。同样,要建立一个对话框窗口,在Dialogs页上,选用所需的对话框样板,可以简便地建立起所需的对话框窗口。
1.5.3.2 存储自己的窗体样板
您可以在样板库中存储自己的窗体样板。首先创制一个窗体的样本,在窗体区域中单击鼠标的右键,可以调出窗体的加速菜单。选用Add To Repository...,将弹出对话框。
在Forms列表框中,选择想要创建为样板的窗体。在Title输入框中输入想要在样本库内图标下出现的文本。在Description区,输入关于样板的详细说明。这样在浏览样本库时,在状态行上会显示这段文字以进行提示。可以选择一个图标作为新窗体样板的图标,按动Browse按钮,选择一个现有图标来代表新的窗体样板。否则将使用按钮左方的缺省窗体图标。按OK按钮,Delphi会要求您确认将窗体存储为样板。
再次打开New Items对话框,您会发现您的窗体已经被存储成一个窗体样板。
1.5.3.3 使用对话框专家Dialog Expert
对话框样板呈现了友好界面的被保存对话框,而对话框专家却能根据用户提供的信息,智能地创建复杂的对话框。
选用File|New...,在New|Items的Dialog页选用Dialogs Expert,Delphi将提示回答各种问题,以便于建立复杂的对话框。
1.5.4 使用工程样板和应用专家
Delphi的工程样板提供预先设计的工程来作为应用程序开发的起点。而应用专家则允许用户按照一定的模式来创建一个应用程序。
1.5.4.1 使用工程样板
当您通过一个工程样板来开始一个工程时,除了空白工程样板外,都会被要求指定一个唯一的子目录即工程目录Project Directory,用来存储新的工程。如果您指定一个不存在的目录,Delphi会帮助您生成它。您可以通过加入新的窗体和程序库单元来修改它,或不加修改地直接利用,而只是加入您的事件处理过程。无论您如何修改,您所作的修改只影响到打开的工程,原先的工程样板不会受到影响,可再次被利用。
选用File|New,在New Items对话框中选用Projects页,可以选择将MDI、SDI、Windows 95 Logo等应用程序作为缺省的工程类型,点动所需工程的图标,使之高亮度显示,然后按OK按钮。如图1.17所示。在接下来的Select Dictionary对话框中指定一个用来包含新的工程文件的目录,则一个工程样板的副本在指定的目录中打开。
1.5.4.2 使用应用专家Application Expert
一个应用专家就是一个应用程序,它会依照您在一系列对话框中所设置的选项值来产生一个工程。
如果您想在打开一个工程时,利用应用专家来取代工程样板而成为缺省值,则使用File|New,在New Items的Projects页上选用Applcation Expert。这样,双击它的图标,会弹出一系列对话框提问,要求您选择您的工程是否需要一个标准的Windows 95对话框、含有哪些菜单、加速条等。图1.18是使用应用专家后出现的第一个对话框。
Delphi 会要求您输入您的工程文件名及它存储的唯一目录,并提示您选择应用程序是否使用MDI窗口、是否含有状态行、提示等。选项设置完毕,按动Finish按钮,Application Expert即按照您的要求,建立起一个可以直接运行的工程文件。