DELPHI基础教程 第一章 Delphi快速入门

第一章 Delphi快速入门

Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。 

1.1 Delphi基本概念介绍 

1.1.1 Delphi的基本形式 

Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。您的工作只是在“骨架”中加入您的程序。缺省的应用程序是一个空白的窗体(Form),您可以运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。Delphi已经为您做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代码而已。

在空白窗口的背后,应用程序的框架正在等待用户的输入。由于您并未告诉它接收到用户输入后作何反应,窗口除了响应Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样您可以不为它们所困扰,轻松从容地对可视部件进行编程。

1.1.2 面向对象编程的概念 

面向对象的程序设计(Object-Oriented Programming,简记为OOP)是Delphi诞生的基础。OOP立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进Windows编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编写容易。说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言。对象并不与传统程序设计和编程方法兼容,只是部分面向对象反而会使情形更糟。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多。而Delphi是完全面向对象的,这就使得Delphi成为一种触手可及的促进软件重用的开发工具,从而具有强大的吸引力。

一些早期的具有OOP性能的程序语言如C++,Pascal,Smalltalk等,虽然具有面向对象的特征,但不能轻松地画出可视化对象,与用户交互能力较差,程序员仍然要编写大量的代码。Delphi的推出,填补了这项空白。您不必自己建立对象,只要在提供的程序框架中加入完成功能的代码,其余的都交给Delphi去做。欲生成漂亮的界面和结构良好的程序丝毫不必绞尽脑汁,Delphi将帮助您轻松地完成。它允许在一个具有真正OOP扩展的可视化编程环境中,使用它的Object Pascal语言。这种革命性的组合,使得可视化编程与面向对象的开发框架紧密地结合起来。

1.2 Delphi 快速入门 

在这一节中,我们来开发一个小程序。随着开发的过程,逐步介绍Delphi的主要部件及其操作方法。建议读者按照本书介绍的过程,在您的电脑上直接操作。您将对Delphi的可视化编程有一个直观、快捷的了解,必将起到事半功倍的效果。 

1.2.1 进入Delphi的可视化编程环境

1.2.1.1 安装Delphi 

Delphi的安装与其它应用软件并无不同。2.0版必须在Windows 95以上的操作系统中使用。启动Windows 95或Windows NT后,将Delphi的光盘放入光驱(CD-ROM)中,运行光盘上的\INSTALL\SETUP.EXE文件,它的安装程序会提示您正确地装入Delphi。如果您是在微软中文Windows环境中安装Delphi,请参照附录A来设置您的BDE环境,以便于处理中文数据。 

1.2.1.2 进入Delphi 环境

为避免隐藏在Delphi后的Program Manager和曾经运行过的其它程序扰乱版面,分散您的注意力,不妨在启动Delphi前关掉其它应用程序;启动Delphi后,再最小化隐藏在后面的Delphi 2.0程序组。这样屏幕上就只留下Delphi窗口可见了。

首次加载Delphi,屏幕上会出现四个窗口:

● 标题为“Delphi-Project1”的Delphi主窗口

● Object Inspector窗口

● 标题为“Form1”的窗体(Form)窗口

● 标题为“Unit1.PAS”的代码编辑窗口。刚启动时这一窗口的大部分被“Form1”窗体所掩盖。将“Form1”窗体移开,或单击Form1窗体下方的状态行,可以使其全部可见。在“Form1”窗体的任意可见位置单击鼠标,可以恢复主窗体可见

以下我们将对这四个窗口分别进行介绍。 

1.2.2 Delphi可视化编程环境介绍 

1.2.2.1 主窗口(Main Form) 

Delphi的主窗口位于屏幕的上端,包括Menu(菜单)、Speed Bar(加速条)和Component Panel(部件选项板)。Menu是下拉式主菜单。Speed Bar位于主窗口的左下端,由两排共14个加速按钮组成。这些按钮是菜单功能的快捷方式,各种图标直观地表示了它能执行的动作。Component Panel由一行、若干页对象按钮所组成,利用它来选择需要的部件并将它放到窗体中去。 

1.2.2.2 Object Inspector(对象检视器) 

Object Inspector窗口含有两页:Properties页显示窗体中当前被选择部件的属性信息,并允许改变对象的属性;Events页列出了当前部件可以响应的事件。按动Object Inspector下端的“Events”页标签,使得Events页可见,这一定的事件后边的空白处,可以定义对象接受到相应事件时执行的动作。首次启动时,Object Inspector窗口显示的是当前窗体Form1的属性。Object Inspector根据对象属性的多少,决定是否有滚行显示。移动滚行条,可以查看当前对象的全部属性。

此外,Object Inspector上还有Object Selector(对象选择器),位于Object Inspector上方的下拉式菜单中。它显示了窗体上所有部件的名称和类型,也包含窗体本身。您可以用Object Selector很容易地在窗体的各个部件之间切换,也可以快速地回到窗体本身。当窗体中含有较多的对象时,您会发现这是切换对象尤其是回到窗体的最快捷途径。

想使Object Inspector一直可见,可将鼠标移到Object Inspector上,按动右键,以启动Object Inspector的弹出式菜单,将其设置为Stay On Top。这对初学者常是一个很重要的设置方式。 

1.2.2.3 窗体窗口 

Forms窗口是开展大部分设计的工作区域。首次启动Delphi 2.0时显示的是窗体Form1。可以把部件放在窗体中,通过移动位置、改变尺寸等操作随心所欲地安排它们,以此来开发应用程序的用户界面。您可以把窗体想象成一个可以放置其它部件的容器。窗体上有栅格(Grids),供放置部件时对齐位置用,在程序运行时Grids是不可见的。

一个真正的应用程序可能有不止一个窗口,您可以选用不同的窗体进行设计。其它窗体可以是对话框(Dialog Box)、数据录入框等。 

1.2.2.4 代码窗口 

代码窗口一开始处于窗体窗口之下。因为在Delphi中,设计用户界面直接在窗体中进行,运行结果和设计样板完全一致。当部件被放到窗体上时,Delphi会自动生成大部分的用户界面代码。您所应做的只是在它为您生成的框架中加入完成所需功能的程序段而已。点动Form1的状态行使代码窗口可见。

这个窗口中是代码编辑器。可以在其中书写Delphi应用程序的源代码。当程序中含有不止一个窗口时,会有几个库单元的源程序出现在代码编辑器中。代码编辑器的标题条中显示了当前正在编辑的库单元文件名。要查看某一特定程序的源代码,只需用鼠标点动写有该库单元文件名的页标签,就可以对该库单元进行编辑了。

1.2.3 设计简单的用户界面 

首先从空白窗体开始工作。我们将设计一个简单的程序:在屏幕上开一个窗口,窗口中有一个图框,用三个按钮来改变图框的形状;再用一个图标按钮来进行图框的颜色设置,通过颜色编辑对话框来选择变成哪一种颜色。

在菜单上选用File|New Application菜单项来生成新的工程文件。这时,屏幕上出现图1.2所示的窗体。 

1.2.3.1 选取部件加入到窗体中 

部件(Component)是建立Delphi应用程序的要素。Delphi为用户提供了丰富的部件库,既有可视的部件(如编辑框、按钮)等,也有不可视的部件(如系统定时器、数据表等)。它们按照功能分别排列在Component Panel的各页上。

移动鼠标到Component Panel上,在部件按钮上“犹豫”一、两秒钟,一个黄色小提示框就会弹出,写有该部件的名称,我们称之为提示(Hint)。在要选择的部件上单击左键,则该部件按钮被按下,表示部件已被当前选择。然后,将鼠标移动到窗体上,按下左键,该部件被放到窗体中。部件的轮廓线上会显现八个被称为尺寸调整器(Sizing Handles)的黑色小方块。它除了供用户调整尺寸使用之外,还可以表示该对象处于当前编辑状态。此时,按“Delete”键可以将该部件删除。

在Component Panel上,点动写有“Additional”的页标签,切换到Additional页,再移动鼠标,逐个用观看Hint的办法查看部件的名称,找到“Shape”部件(其图标为圆、方形、三角形三个几何体),将其放到窗体的左方。

再按动“Standard”页标签,找到“Button”部件(图标上画有OK按钮)。Delphi允许在添加多个同类型的部件时,不必每次到部件选项板上选取。按住“Shift”键,同时在“Button”部件上单击鼠标左键,这时“Button”部件处于按下状态,并有蓝色边框,表示已经被选择固定。依次在窗体右方的三个位置单击左键,则会放置三个相同的Button部件。把鼠标光标移到部件选项板左侧的箭头图标处,这是“取消选择”按钮,它没有提示。按动它,会发现“Button”部件按钮恢复弹起状态。否则,每次“Form1”上的鼠标单击左键动作,都会导致增加一个按钮部件。

再次进入“Additional”部件页,选择一个“BitBtn”按钮(图标是有绿色对号的OK按钮),把它放到其它三个按钮部件的下面。

点动“Dialog”页标签,选择以16色网格做图标的ColorDialog部件并把它放到窗体的任意位置。因为这一部件是不可视部件,所以它的位置并不影响大局。 

1.2.3.2 部件的调整与对齐 

一般来讲,此时放置到窗体的部件是分散排列的,而且其大小不是真正需要的尺寸。除了不可视的ColorDialog部件外,其它的部件都需要进行位置、大小和显示字样的调整。Delphi提供的对齐工具和窗口栅格为这些调整提供了方便。

1、移动部件

只需把鼠标落到想移动的部件上,按住左键并移动光标,到合适的位置再释放左键,整个部件即被移到新位置。

2、调整尺寸

先把鼠标光标移动到要改变尺寸的部件上,单击左键,选中该部件,尺寸调整器会出现,把鼠标移动到其中的一个小黑色方块上,当鼠标变成拖动方向指示时,按下并拖动鼠标左键,可以放大或缩小部件。上下左右的小方块用来移动对应的各边,四个角的方块可以移动相连的两条边。如果要精确地表述部件的尺寸,可以在Object Inspector上,改变Left(表示部件左边缘到窗体左边框的象素点数)、Top(表示窗体上边框到部件上边缘的象素点数)、 Width(部件本身的宽度)、Height(部件本身的高度)等属性。关于改变部件的属性,下文还将仔细讲解。

3、使得一组部件对齐

用调整位置的方法可以对齐部件,但操作步骤复杂。Delphi提供的对齐工具可以使多个部件的对齐极为迅速方便。下面我们来使四个按钮对齐。先将四个按钮选为一组:按住并向右下方拖动鼠标左键,在窗体上画出围绕四个按钮的矩形,释放左键后,被选中的按钮周边会出现暗灰色的边框。选用Edit|Align命令,或使用弹出式菜单(在被固定的部件上单击鼠标右键激活),可以显示图1.4所示的对话框。

要使按钮沿左边对齐并使它们在垂直方向上均匀分布,先在Alignment对话框的Horizontal栏内选择“Left sides”,在“Vertical”栏内选择“Space equally”,按动OK按钮,Delphi就会自动将它们对齐。然后,您可以将它们四个作为一组来移动。在四个按钮以外的窗体上按动鼠标左键,就释放了组中的部件,使它们成为分立的部件。

利用对齐模板来对齐部件也是很方便的。首先要将要对齐的部件选成一组,选择View|Alignment Palette显示对齐模板。按照所示的方式选择即可达到对齐的目的

4、锁定部件

如果部件已经对齐,为防止不小心移动部件,可以将部件位置锁定。选择主菜单上的Edit|Lock Controls选项,使得部件不能进行移动操作。解锁只需再次选择此项即可。

调整“Shape”部件的大小,使之与右边的按钮组相匹配。再改变窗体的大小,按住并拖动窗体右下方使之刚好包容窗体上的全部部件。这样,您的用户界面就会比较美观。 

1.2.3.3 保存所做的工作 

及时地保存所做的工作至关重要。对设计者来讲,有两个文件需要保存:库单元文件(以.PAS为后缀)和工程文件(以.DPR为后缀)。

从主菜单上选择File|Save Project As...项,Delphi会显示标题为“Save Unit1 As”的文件保存对话框,Delphi 2.0 允许用户更改存储路径,您可以在下拉式列表框中选择。最好将您的文件保存在自己的目录中。在编辑框中键入demoform.pas以保存库单元文件;然后显示标题为“Save Project As”的另一个文件保存对话框,键入sample.dpr。Delphi保存这两个文件并返回窗体窗口。不要把库单元和工程存成一样的文件名,Delphi要求两者不同。

第一次保存后,以后可以随时通过Speed Bar中的“Save All”和“Save file”来保存工程文件和库单元文件。一般来讲,当确认文件的改变后,要同时存储这两个文件。 

1.2.3.4 运行工程 

以上的操作使您有了一个自己的应用程序界面。在速度条中按动“Run”按钮(绘有绿色三角图标),您可以看到,所生成的界面与您设计的界面是完全一致的。 

1.2.4 改变对象的属性

上述的工程虽能够运行,但它对您的按动按钮操作是没有什么反应的,而且,所有部件上还写着我们不需要的字样。双击窗口的关闭按钮结束运行,回到设计界面。下面,我们将仔细讲述如何在Object Inspector中改变部件的各种属性。 

1.2.4.1 用Properties页改变部件的属性值 

首先要改变各种部件的标题。先给窗口命名为“Demo”。按动Object Inspector上端的Object Selector的题条或者其右端的下拉标志,找到Form1项,并点动左键,窗体被选中。在Object Inspector的Properties页中,找到Caption属性并用左键选中,将其右端的Form1改为Demo,同时,您会发现窗体的标题已经相应地做了改变。

用鼠标点中窗体中的Shape部件,Object Inspector列出了它的属性。选中Shape属性,您会发现右端出现了下拉标志。点动这一标志,可以查看对象的Shape属性可选值。它的形状可以是矩形、圆形、圆角矩形、方形等几种。这是我们设计后续功能的基础。

选中Button1按钮,此时Object Inspector已经显示出此按钮的一应属性。将它的Caption属性改为“&Rectangle”,“&”号使得Delphi特殊处理它后面的字符,在这里,按钮中的R字母被做了下划线处理,运行时,可以用“Alt-R”热键来按动这一按钮。同样,您可以将其它的两个按钮Button2和Button3的Caption属性改成需要的形状指示,譬如“&RoundRec”、“&Ellipse”。 

1.2.4.2 设置窗体的缺省按钮 

可以把某个按钮作为窗口上的缺省按钮,Delphi会为按钮加上有黑色的边缘。运行时,回车即相当于被按下。只需将此按钮的Default属性从False改成True,即将它设为窗体的缺省按钮。点动Default属性,在右端的值后面双击左键,或从下拉菜单中选取True,即可改变这一属性。Delphi中有许多只有True、False两个属性的部件,双击左键可以在这两个值之间切换。

1.2.4.3 汉化界面及字体选取 

如果您的Windows95系统中安装了中文系统,对界面做汉化是极其方便的。例如,您可以将Button1的Caption属性改成“&R矩形”,同样地可改变其它部件的属性,将窗体做成中文的操作界面。

若对中、西文字体不满意,则可以调整Font属性以满足您的要求。Font属性的前面,有一个小小的“+”号,这说明它表征的是集属性,也即属性不再是一个单值,而是一个属性的集合。双击Font,Object Inspector将在下面扩充显示它的其它属性。Color用来表示文本的颜色,Name定义了字体名,如System,MsSerif,Arial,宋体,黑体等。Style下又拥有四个属性:fsBold,fsItalic,fsUnderline和fsTrikeOut。如果想让字体有其中的某种风格,可把相应的属性值设成True。

Font对话框可以更为直接地设定以上属性。Font属性右侧值段有带省略号的按钮,单击它可以激活Font对话框,如图1.7所示:

这一对话框中包含了上述的全部属性,使得调整字形更为直接方便。但要申明的是,对于窗体Form来讲,Font属性改变的是窗体中其它部件的显示字形,它本身的标题字体是缺省的System字体,不能通过属性来改变。

1.2.4.4使用图形编辑对话框 

最后,我们用图标按钮BitBtn1来控制Shape部件的颜色。选中图标按钮,将它的Caption属性改为“&Color”(或“&C颜色”)。可以在按钮中加入一个图标来形象地表述它的功能。选用Object Inspector中的Glyph属性,点动值段的三点按钮,弹出图形编辑对话框。

您可以通过图形编辑对话框装入图标,在本例程中,按动Load按钮,选择\Delphi 2.0\Images\Buttons\Brush.bmp文件装入,Bitbtn1就成为一个图标按钮。另外,Delphi还为您提供了丰富的Windows标准图标按钮。想运用它们,改变BitBtn的Kind属性。用户不妨尝试一下,选择其它值可以生成漂亮的标准按钮,如OK,Cancel等等。这会使您在以后的程序开发中受益匪浅。

至此,界面的设计工作就已完成了。运行一下观察效果,别忘记保存您的库单元文件、工程文件。 

1.2.5 编写事件处理过程 

完成用户界面,只是建立了一个“骨架”,下面要做的便是给程序加入“灵魂”,也即,使它能够完成所要求的功能。 

1.2.5.1 为用户操作建立“事件”

单击窗体上的“Rectangle”按钮,在Object Inspector中,点动“Events”页标签,出现事件窗口。在本例程中,我们只关心OnClick事件,即按钮接收到左键单击时应用程序所作出的反应。在Object Inspector窗口中双击OnClick事件右端的值段,会使得Delphi激活库代码编辑器,并将光标停在该按钮所对应的过程的begin...end之间。“Rectangle”按钮的功能是使Shape部件的形状为矩形。联系前文我们查看过的Shape部件的“Shape”属性,现在,我们要做的是在程序中控制部件的属性。

在光标处键入以下的程序段: 

  Shape1.Shape := stRectangle; 

用同样的方法,在Button2和Button3的OnClick事件响应内复制以上语句,并分别将赋值号后的属性值改为stRoundRect和stEllipse。为防止输入错误导致程序运行出错,建议您使Shape1部件的Object Inspector可见,检视属性Shape的各个值并对应输入。

  在代码编辑器中,Delphi自动建立的过程以关键字Procedure开头,用户可以在begin…end之间加入自己的程序,也可以定义变量。这个程序块对用户的外部事件(此例中是按动按钮)进行响应。我们称之为事件处理过程。 

1.2.5.2 使用颜色编辑对话框 

图标按钮“Color”要控制部件Shape1的颜色,我们可以调入颜色编辑对话框,用以选择要变成的颜色。这时就要用到运行时不可视的部件ColorDialog了。同样地使图标按钮BitBtn1响应OnClick事件,在它的过程中加入以下的语句:

  ColorDialog1.Execute;

  Shape1.Brush.Color := ColorDialog1.Color; 

这样,图标按钮的功能也就完成了。

初学者可能对这样的程序段不能理解。其实也是十分简单的。查看ColorDialog的Brush属性,就会发现它是个集属性,在其下还有一个Color选项,正是我们想改变的属性。既然我们想将图形的颜色变得更加丰富多彩,它本身提供的几种颜色就已不能满足要求了。用颜色编辑器可以得到更多的色彩。程序的第一句用Execute方法,使得ColorDialog运行它本身。当用户在对话框中进行操作,选定了一种颜色时,即使得TColorDialog对象的一个属性Color置为选定颜色的值。将此值赋给Shape1的Brush属性的子属性Color,就将选定的颜色加到了图形上。

读者的要求可能会是,怎样尽快的了解这些这些方法、属性和域呢?下文对使用联机帮助的简单介绍可能会对您有所裨益。 

1.2.6 使用联机帮助Help 

事实上,使用联机帮助是您全面地了解可用的方法、对象的域、属性等信息的最快捷途径。您还可以参考Delphi给定的例程。较为简单有效的方法是使用Help中的搜索功能。如果您对一个对象知之甚少,选用主菜单中的Help|Help Topics项,在弹出的帮助对话框,选用Indexes(“索引”)页,Delphi 2.0会提示您输入要检索的主题。以您想用的部件的对象名作为检索主题词,可以参阅很多基本的信息。例如,上文的例程中,在编辑框中键入对象的名称TColorDialog,在词条中就会出现该主题,按动Display按钮显示出TColorDialog的帮助信息。查看method,可以找到能应用在CclorDialog1上的方法Execute;仔细阅读它的功能,上述的编程便不难理解了。Properties中提供了部件的所有属性,在关键属性Key Properties前加上了“金钥匙”,提供了详尽的说明。在Task中您可以查阅该对象的其它相关主题,还可以参阅Example中的应用例程。用帮助窗口的Edit各种功能进行复制、剪贴等操作。

如果您已经对对象有一定的了解,想查阅它的具体方法、域等,可以直接用主题词进行检索。 

以上,我们已经完成了简单的例程。运行您的程序,选用各个按钮改变图形的颜色和形状。如图1.9所示。虽然它只是一个“小玩具”,却直观地给您一个用Delphi编程的印象。对比一下您亲手编制的程序量和程序的功能,您就会理解Delphi为程序员提供了怎样的方便。

1.3 Delphi 2.0的可视化部件用法简介 

本节中,我们将较为深入地讲解Delphi的部件。这是编制大型复杂应用程序的必由之路。下面,我们将对各种部件分类进行简单的介绍,以便于您在编程时能够较快地了解有哪些部件可能会满足您的要求,并对其重要的方法、属性等有一个大致的了解。

  基本技巧、工具的介绍在本章的第4节中,交互阅读这两部分,多创制几个试验程序,有助于您迅速进入Delphi世界,尽早将这一精妙软件用于实际工作中。 

1.3.1 常用的文本相关部件 

以下的部件以各种格式显示文本,其中有些是文本和数据输入的途径。它们是Label(标签)、Edit(文本编辑)、MaskEdit(格式编辑)、Memo(备注)、List Box(列表框)、Combo Box(组合框)。除了MaskEdit在Additional页之外,其它的都在Standard页中。 

1.3.1.1 Label部件 

Label(标签)一般放在对象的旁边,用来标记这些对象,从而对用户的操作进行提示,也可以用来显示其它信息。您可以在标签中设置热键,也即在Caption属性值段中输入含有“&”的字串,当用户使用“Alt+关键字母”时,将自动选中它所指向的对象。方法是设置Label部件的FocusControl属性,在值段中,选用与它关联对象的对象名。 

1.3.1.2 Edit、MaskEdit和Memo部件  

Edit、MaskEdit、Memo部件都是用作接收、显示用户输入文本的。它们具有一些相同的属性。ReadOnly在运行时间内控制对象是否可以进行Windows的操作,当此值为False时,该框内的文本就不能被复制到剪贴板上。MaxLength可以设置输入文本的长度限制。用PasswordChar属性可以按照显示隐蔽密码的方法显示用户输入文本,例如,它的缺省值为“*”,运行时,您的输入将用“*”来显示,从而提供了一种安全措施。您可能也发现了,当一个字段被加上高亮度显示时,按键操作会将这一字段删除,替换成当前的键盘输入。这种设置为操作提供了方便,您不必每次先删除原来的文本;但也可能会导致误删文本。将AutoSelect属性设置成False,这种替代功能就被取消了。

MaskEdit是格式文本输入对象。它的EditMask属性为它提供了过滤文本的格式。点动这一属性的省略按钮,会弹出过滤编辑对话框,除了Delphi为您提供的几种屏蔽格式,您也可以自己编写,查阅“帮助”,会为您提供更详细的用法介绍。

Memo是备注框,与以上对象不同的是,它可以接收多行文本输入。将ScrollBars设置成ssVertical,可以为它加上一个垂直的滚行条。Align属性调整该对象在窗口中的对齐情况,有alNone(无对齐指定)、alBottom(底部对齐)、alClient(全窗口显示)等可以选择;而Alignment属性则决定了文本在框中的对齐显示格式。Lines属性访问的文本被存储在一个TStrings对象中,按动它的省略按钮,可以通过对话框向它增加文本,也可以用程序对这一属性进行操作,以达到修改或增加备注文本的目的。 

1.3.1.3 List Box和Combo Box部件 

List Box(列表框)和Combo Box(组合框)都显示列表项目,所不同的是组合框占用较少的空间。常见的Windows操作系统中,显示可用磁盘驱动器时,用的就是组合框。列表框则提供了一个项目列表以供选择,如Windows打开文件操作时显示文件列表的就是List Box。

  下列程序段将Edit1的文本加入到ListBox1中,并清空Edit1中的文本: 

 procedure TForm1.AddButtonClick(Sender:TObject);

 begin

ListBox1.Items.Add(Edit1.text);

Edit1.Text := ‘’;

 end; 

常见的组合框初始化用以下的语句可以实现,它用下拉式列表框的第一项来初始化组合框的缺省值: 

procedure TForm1.ComboBox1Text(Sender:TObject);

begin

if ComboBox1.Text = ‘’then

ComboBox1.Text := ComboBox1.Items.String[1] ;

   end;

以上就是文本输入的基本部件。 

1.3.2 按钮和检查框部件 

1.3.2.1 Button和BitBtn部件

按钮是Windows常用的部件,前文的例程中我们已经基本掌握了Button和BitBtn的主要用法。它们一般用在对话框中,做为执行某种功能的指示。您也可以为它们设置内置返回功能,将ModelResult属性加以匹配,可以不用编程,直接实现系统内置的功能,这一点上和Kind属性颇类似。 

1.3.2.2 Speed Button部件 

Speed Button(加速按钮)部件在Additional页上,是进行工具条快速设计的理想部件。它只有一个位图,没有标题。需要提起读者注意的是,用多个Speed Button制作一个工具条时,必须先放置一个窗口类部件,如Panel(操作板)、Group Box(群组框)等。否则试图将加速按钮先制作好再移上去,您会发现它会总是处于窗口类部件下面不可见。当然,您可以对加速按钮进行复制、粘贴到窗口类部件上处理,那就另当别论了。 

1.3.2.3 Check Box与Radio Button部件 

Check Box(检查框)和Radio Button(无线按钮)部件通常是相提并论的,多用作接收用户“是”或“否”的输入判别。它们一般都是成组的放置在Radio Group或Group Box部件中。所不同的是,成组的Radio Button是“互锁”的,用户选择定一个后,其它的将自动设置为不选;而Check Box部件则是分立的,您可以同时选中其中的几个,也可以一个都不选。 

1.3.3 分组、分界部件 

分组部件把其它的部件组合成一组,例如上述的无线按钮部件Radio Button,就需要放入以下的成组部件中。分界部件用于在窗口中产生边界和区域,以区别于其它区域。 

1.3.3.1 Group Box、Radio Group及Panel部件 

Group Box(群组框)、Radio Group(选项按钮组)部件都可以将部件分类、成组。它们都有标题,可以用文字表征成组部件的标题或信息。Radio Group可以进行Column和Item属性的设定,以决定其上的无线按钮的提示文本及显示格式。Panel部件也可以达到将部件分组的目的。通过编程向窗口加一个操作板部件,以书写提示和帮助信息,也不失为一种好方法。以上三个部件都在Standard页。 

1.3.3.2 NoteBook、TabSet及TabbedNoteBook部件 

记事本部件NoteBook一般和标签集部件TabSet共同使用,用来创制含有标签的重叠多窗体窗口。Pages属性包含了一个页名列表,在编程时,将TabSet的Tabs属性设置成NoteBook的Pages属性,就可以使页标签和相应的窗体对应起来。

另外一个部件TabbedNoteBook是带有标签的多窗体窗口,不过,它的页标签设在窗口的上面。它们相当于多个分组部件的集合,每次查看其中的一页。以上三个部件在Win 3.1页。

在Win95页上还有TabControl、PageControl等部件。它们对于生成Windows 95风格的标签集是很重要的。 

1.3.3.3 分界部件 

在Win 3.1页上,还有Header(表头)部件,它在窗口中产生一个凸起的题条,提供了一个可视化的文本显示区域。Additional页的Bevel(立体框)部件提供了一个方框,它的单一线条或整个边框都可以通过Style属性设置为外凸或内凹,可以美化窗口。在Win95页上,HeaderControl、StatusBar等部件,为您使用Winows95风格的界面提供了重要元素。 

1.3.4 图形、图象部件 

1.3.4.1 Image部件

图象部件Image在Additional页上,用来在窗口中显示一幅图片,可以在picture属性中调入图象文件。Delphi支持位图(.BMP)、图标(.ICO)、图元(.WFM)三种文件格式。比较重要的属性是Autosize和Strech。它们决定了图象在窗口中的显示尺寸。Autosize属性为True表示按原尺寸显示,Strech属性为True表示图象按对象图框的大小显示,这时图象的大小可以人为改变。

1.3.4.2 Shape部件 

图形部件Shape在前文中我们已有了解,它可以处理多种几何形状,通过设置Pen和Brush的嵌套属性,可以设置图形边框颜色、线型及图形的风格、填充方式、贴图方式等。 

1.3.4.3 PaintBox部件 

在System页上还有一个PaintBox(绘图框)部件,它在窗体上为您提供一块可供绘图的区域。这一部件需要编程实现它的功能,一个只有在运行时才有效的重要属性Canvas是完成绘图的关键。PaintBox部件不能单独存在于窗体中,必须把它放在固定的分组部件中。 

1.3.5 关系图、文件列表部件 

1.3.5.1 OutLine部件 

OutLine(略图)部件在Win 3.1页上,它适用于显示分层的数据、文本。在Delphi中,略图部件具有很宽的设置范围。它的Lines属性可以设置每一词条的文本或数据。一般一个空格相当于一个层次,如果在项目前加一个空格则表示它处于树的下一层。所以在进行Lines属性编辑的时候不能用Tab键。在编程时用Lines和Items属性来访问略图的名称、索引及完整的路径名。OutLineStyle属性用来配置显示时关系图的风格,您可以选定用旁边有图标的缩进方式,也可以选择连线方式。 

1.3.5.2 目录访问部件 

Delphi为您提供了强大的文件目录访问部件。您可以针对具体的用途设计自定义的文件对话框。在部件选项板上选中System页,您将发现这些部件,它们是文件列表框FileListBox、目录列表框DirectoryListBox、驱动器下拉式列表框DriveComboBox和过滤式下拉列表框FilterComboBox部件。

文件列表框部件FileListBox显示当前目录中的文件,缺省的设置是显示所有文件。通过改变Mask属性来设置过滤器,可以适用DOS的标准通配方式,选择要显示的文件名。当指定多个过滤器时,之间用“;”隔开。

目录列表框部件DirectoryListBox显示当前驱动器内的目录,并且允许用户在程序执行时切换目录。Column属性决定目录在窗口中用多少列进行显示,当窗体空间不够时,用几列进行显示将有助于全面地显示目录信息。在Delphi中,当窗口空间显示不下全部信息时,将自动加上滚行条,以方便用户的操作。

驱动器下拉式列表框部件DriveComboBox显示当前所在的驱动器,并且在执行时允许用户在驱动器之间切换。作为程序员在应用这一部件时,应考虑当用户选择到不存在的驱动器时,进行容错、提示处理。

FilterComboBox(过滤式下拉文件列表框)部件显示当前文件过滤器类型,例如*.*,*.pas等。在执行时允许用户在下拉列表中选择要显示的文件类型。对Filter属性进行初始化,就会得到下拉式列表。

除了以上的四个部件外,在Sample页上,Delphi还提供了一个目录略图部件DirectoryOutline。它将当前磁盘中的目录结构显示成一个多层次的略图,也允许用户在运行时进行目录的层次显示切换。 

1.3.6 滚动部件 

1.3.6.1 ScrollBar部件 

ScrollBar(滚行条)是在Windows应用程序中常见的结构,在Delphi中多数部件有自己的是否加入滚行条的属性ScrollBar,但一个独立的滚行条部件仍是很有意义的。它在部件选项板的Standard页,提供一种可以改变菜单或是画面中可见部分的工具,可以以一定的增量在一定范围内滚动。Position属性是个整形值,如果需要以动态的方式显示滚行条,可以在程序中通过操作这一属性来实现。 

1.3.6.2 ScrollBox部件 

ScrollBox(滚动框)部件是加上了水平、垂直滚行条的群组框部件,它在Additional页上,用作在窗体中提供一个可以多方向滚行的工具。如果您只想显示较大幅面的一个部分,并允许您的用户对其进行滚行操作,ScrollBar将是理想的选择。您可以先在全幅面的滚动框中进行全面设计,然后适当地缩小外框,两个方向的滚行条将自动显示。它的Position属性是集成在HorzScrollBar和VertScrollBar两个集属性下的,编程时,可以选定这两个属性进行操作。 

1.3.6.3 几个进度显示部件 

在System、Sample、Win 95、OCX等页上,Delphi还为用户提供了几个部件,完成显示进度,增量等操作。部件Gauge可以显示成长条状的或饼状的进度指示仪表。例如在安装软件时,可以编程让这一部件显示目前安装的百分比。

  微调按钮部件SpinButton含有指示向上、向下的两个按钮,它可以用来调节数值,使被控制的值按一定的增量单位,由用户操作递增或递减。

  微调编辑框SpinEdit是微调按钮和编辑框的结合,它在编辑区域显示了数值,又在右侧设了微调按钮,使得用户选择调节按钮或改变数值的方式,来调整数据的值,并返回Value属性。

其它的此类部件,因篇幅限制,此处不做赘述。具体部件的信息,按照名称在在线帮助中查询其方法、域及应用实例,可以得到详细应用资料。  

1.3.7 网格、表格部件 

在Additional页中,还有字符串表格部件StringGrid,绘图表格部件DrawGrid等。它们可以用来模拟按网格排列的事物,如成排的按键、操纵钮、字符串等。属性RowCount和ColCount设置了在网格中显示的行列的数目,设置FixedCols和FixedRows的值,可以固定一些行列避免运行时被用户改变。Options集属性含有字符串表格部件的显示方式、操作方式等,可以查阅帮助获得详细的信息,此处不再一一表述。

图形表格部件DrawGrid使得用户可以用表格的方式显示非文本的数据,它的应用面比字符串表格部件更为广泛,可以把图片和文本一起放在网格中。

颜色网格部件ColorGrid在Sample页上,它提供控制前景色和背景色的界面,通过属性ForeGroundColor和BackGroundColor可以访问到,也可以通过程序,把得到的颜色赋值给其它对象的颜色属性。

Sample页的日历部件Calendar也是用表格的方式表现的,它提供了一个简单的以月份为库单元的日历表格,通过设定Year和Month的值,可以得到相对应的月份的日历。 

1.3.8 多媒体(MultiMedia)和OLE部件 

媒体播放器部件MediaPlayer和OLE部件可以在System页上找到。媒体播放器部件在处理多媒体文件时很有用。它显示一个VCR风格的控制面板,让您记录或播放多媒体的图像、声音文件。您可以通过属性的设定来控制部件上的各个按钮,如改变显示颜色、增减按钮数目等。改变一下ColoredButtons、EnabledButtons、VisableButtons的各个子属性值,您就不难发现它们控制的显示效果。具体的应用已经超过本简介的目的,请参阅帮助以及后文的详细介绍。

OLE客户端部件OLEContainer在窗体中创建一个OLE用户区域,用于与Delphi外部的某个对象进行接口。若对外部的Paradox表格、Word文件、扩展页等进行操作,则对象本身的应用程序必须支持OLE操作。Delphi提供了支持OLE应用的对象清单,单击ObjClass属性的省略按钮,就会显示出来。具体的应用,请查阅帮助或阅读后文的详细阐述。 

以上,我们介绍了Delphi的基本可视部件。读者可能会发现,在Stardrad页最前面的两个部件MainMenu和PopupMenu还没有提及。因为这是建立菜单的重要、基本操作,我们将在下一节中做详细的介绍。另外,在下文中,我们还将介绍比较重要的不可视部件。至于数据库部件、动态数据交换DDE部件等,因为在后面章节中有详尽的用法介绍,此处不赘述。 

1.4 使用非可视部件 

上一节介绍的各种部件,在设计和运行时的形式是一样的。本节所介绍的部件,在运行时被隐蔽地嵌入到窗口中,它们本身并不做任何事情,必须被用户的程序所支持才能发生作用。因为部件的设计形状和运行状态并不相关,所以,这种部件在设计窗体中的位置无关紧要,可以放在窗体上不影响其它可视部件的任何位置。这种部件,称之为非可视化部件。

首先,介绍在Standard页上的重要部件主菜单MainMenu和弹出式菜单PopupMenu的详细用法。 

1.4.1 使用菜单部件 

菜单部件含有内置的交互设计器。在设计菜单时,可以用菜单设计器Menu Designer进行工作。

应用程序的菜单有两种形式:MainMenu是一般的Windows用户界面必须的部件,它显示在固定的位置,一般用键盘和鼠标左键来激活菜单的功能项;PopupMenu是弹出式菜单,例如,我们前文的小例程在对齐部件时用到的Delphi菜单,就是弹出式的。一般以鼠标的右键或其它快捷键来激活菜单;菜单的位置是在屏幕上“浮动”的,根据鼠标的当前位置决定。

以下,我们将MainMenu和PopupMenu统称为菜单。 

1.4.1.1 进入菜单设计器Menu Designer 

创建菜单时,首先要在窗体中放置一个菜单对象。然后调入Menu Designer进行菜单的详细设定。用两种方式可以进入Menu Designer:选中菜单部件,点动属性中Items省略按钮;或在菜单部件上双击左键,就会出现Menu Designer。

1.4.1.2 创建菜单的各个项目 

进入Menu Designer,会发现在菜单的第一项位置上有加亮显示。输入顶层菜单项(实际上是在设定顶层菜单项的Caption属性)并回车。一项菜单条设置完后,加亮显示的位置被移至下拉菜单的下一项,同时,主菜单顶层上会出现虚线框,指示出下一个顶层菜单项的位置。要包含一个隔离条,可以键入短划横“-”即减号并回车。逐步输入菜单的各项,用鼠标左键切换到下一个顶层菜单,直到菜单完成。 

1.4.1.3 设定加速键和热键 

您可以设定加速键,与前文的例程相同,只需在输入时,将“&”放到需要指定为加速键的字母前面,该字母将被用下划线显示,运行时,按“Alt+加速键字母”可以激活该菜单条。设定热键也是很方便的,只需在Object Inspector中该菜单条的ShortCut属性值段的下拉菜单中,为它选定一个热键组合即可。在运行时,通过“Ctrl+热键字母”来激活菜单条。加速键和热键并不矛盾,您可以同时指定它们。 

1.4.1.4 使用Menu Designer的弹出式菜单 

Menu Designer中还有一个弹出式菜单,它提供了高频菜单创建命令,并可以对模板选项进行快速访问。在菜单设计器窗口中单击右键,或将光标停在菜单设计器上,按Alt-F10,可以调出Menu Designer的弹出式菜单。使用Menu Designer的弹出式菜单可以向菜单增加菜单项、删除菜单项等操作,还可以对标准主菜单模板进行增加、删除、插入等操作。

为菜单编制功能,可以双击菜单条,或在特定菜单条的Events页上,双击它响应的事件的值段,Delphi将回到代码编辑器,光标停在事件对应的事件处理过程中,您可以为菜单编制实现任务的代码。

如果您已经为Speed Bar上的加速按钮编制了事件处理过程,而需要把相应的菜单项连接到事件处理过程上,则只需在该菜单项的Events页的OnClick事件后,输入事件处理过程的名称即可。这样单击菜单项便和按动加速按钮便实现同样的功能。 

1.4.1.5 创建嵌套菜单 

创建嵌套菜单也是重要的手段。Delphi的嵌套菜单风格是嵌套菜单列在它上层菜单的边上,如图1.11所示: 

创建嵌套菜单,把加亮条移到它的上层菜单条上,按Ctrl+右行键,将弹出子菜单,就可以按照同上所述的方法进行创建工作了。

通过拖--放操作,可以实现菜单条的重新定位。用鼠标左键按住某一菜单条,移动到菜单的某一位置,释放左键,菜单条即得到重新定位。菜单设计器允许菜单条在顶层下移动位置,支持菜单条在嵌套菜单中移进、移出,甚至可以将菜单条在各个顶层菜单下属的菜单间移动与定位。

1.4.1.6 给菜单加提示(Hint)

在菜单中加提示是很好的习惯。它使得您的用户在运行菜单功能前,可以对菜单的任务有一个简略的了解。在菜单条任一项的值段按F1,可以查阅在线帮助,在帮助的正文中找到OnHint并查阅它的例程,将DisplayHint等方法的例程Copy到您的程序中。然后,在菜单条的Hint属性中加入提示正文,运行时当用户将鼠标移到菜单项时,在窗体的底部状态行中会出现Hint属性中的提示信息 

1.4.1.7 菜单的其它属性简介 

菜单还有其它的一些属性。Enabled属性决定菜单是否被禁用,这在编程中可以实现一定情况下不允许用户使用某项菜单。Checked属性表征了菜单项的开关情况,当Checked为True时,菜单条的前面会出现选中标志。Visible属性控制菜单隐藏与否。设置这一属性可以实现多版本的菜单。被隐藏的菜单项以及它的子菜单都是不可见的,或是不可访问的。

Popup Menu在用Menu Designer时是完全相同的。只不过它在运行时和主菜单的激活形式有所不同:它是用鼠标的右键激活的。弹出式菜单在一定的窗口范围内激活,所以必须将窗口和弹出式菜单联系起来。在设计完PopupMenu后,须在Name属性中为它命名,然后把这个名称赋给窗体的PopupMenu属性。这样,窗口会接收右键输入,并激活弹出式对话框。 

1.4.2 使用计时器部件Timer 

在System页上,还有一个(Timer计时器)部件,它能够有规律地触发OnTimer事件,发送信息给应用程序。它是编制应用程序时最为重要的部件之一。 

1.4.2.1 Timer的重要属性 

Enabled属性表示了计时器打开还是关闭;用Interval属性设置两个OnTimer事件间的间隔,单位是毫秒,也即千分之一秒。将间隔置为0相当于关闭计时器,Interval的最大允许值是32767,也即32.767秒。 

1.4.2.2 使用Timer对程序进行控制 

计时器是独立的对象,在启动与Windows无关的逻辑和应用事件时极其有用。如:用计时器可以模拟时钟或计时器,可视地显示经过的时间;可以用作系统延时,Delphi提示信息出现只需在该区域停顿几秒,就是Timer应用的一个例子;可以检查系统环境、事件,根据结果进行响应;也可以在窗口中闪烁一段正文或图像,提示某种操作或处理正在进行等等。

在窗体中放置一个计时器Timer部件,将它的Interval属性置为100(每隔10毫秒触发一次),双击部件进入代码编辑器,在它的事件中加入这样一句程序: 

MessageBeep(0); 

运行它,会有规律地发出“叮”声。它给您一个应用Timer部件的直观印象。

尽管Delphi的计时器每秒可以产生1000次激发,在编程中还必须注意程序对计时器激发的响应。如果程序处理OnTimer事件的时间超过Interval的设定值,就可能错过事件,因为当下一次激发到来时,系统正忙于处理上一事件,则这次激发就会被忽略。同时要注意其它的Windows应用程序是否会影响计时器的触发。如果后台正运行着一个占用处理器的程序,就可能会导致Timer的触发不准确,从而使前台程序运行出现错误。 

1.4.3 使用公用对话框部件 

Delphi为您在Dialogs页上提供了几个标准对话框,它们是文件打开OpenDialog;文件保存SaveDialog;字体Fontdialog;颜色ColorDialog;打印PrintDialog;打印设置PrintsetupDialog;查找FindDialog;替换ReplaceDialog等部件。

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即按照您的要求,建立起一个可以直接运行的工程文件。