书城计算机网络Delphi程序设计教程
36209800000020

第20章 对话框的使用与设计(1)

本章要点

对话框的分类

Delphi中的对话框

标准对话框的使用

对话框组件的使用

对话框的设计

对话框是Windows应用程序和用户进行信息交互的重要手段,几乎任何Windows应用程序都离不开对话框。

8.1对话框概述

顾名思义,对话框是Windows应用程序同用户进行对话的。应用程序可通过对话框向用户提供程序运行的状态信息,也可通过对话框接受用户输入的数据。

对话框可分为两种形式:模态对话框和非模态对话框(也有的资料称“模式对话框”和“无模式对话框”)。

模态对话框,是指在对话框被关闭之前,用户无法在该对话框和应用程序的其他窗口之间进行切换,就是说用户必须对该对话框做出选择并加以确认,程序才能继续运行。如常见的“打开文件”对话框就是典型的模态对话框。

非模态对话框,是指对话框被关闭之前,用户可以在该对话框和应用程序的其他窗口之间进行切换。如常见的“查找”对话框和“替换”对话框就是非模态对话框。

Delphi应用程序中使用的对话框有3种类型。

(1)Delphi预定义的标准对话框,通过函数或过程的调用来实现。

(2)Delphi提供的对话框组件。

(3)用户自己设计对话框。如前所述,对话框也是一种窗口,可以像设计窗口一样设计对话框。

本章就来介绍这些对话框的使用与设计。

8.2标准对话框

Delphi通过函数或过程预定义了两种标准对话框,分别用于信息的输入和显示,被称为输入框和消息框。

8.2.1输入框

输入框,是指带有一个用于简单字符串信息输入的编辑框、一个OK按钮和一个Cancel按钮的简单对话框。Delphi提供了两个函数用于产生输入框。

1.InputBox函数

调用函数InputBox,可以弹出输入框,如图8-1所示。

函数InputBox的声明格式为:

functionInputBox(constAcaption,Aprompt,Adefault:String):String;调用该函数,用3个字符串类型的常量作为输入参数,其中Acaption为对话框的标题(如图中“Login”),Aprompt为对话框中编辑框的提示信息(如图中“InputUserName”),Adefault为显示在编辑框内的默认输入字符串(如图中“guest”),该参数可为空,若为空,则编辑框没有缺省输入字符串。函数返回字符串。

产生如图8-1所示输入框的InputBox函数调用格式为:

InputBox(Login,InputUserName:,guest);调用函数后,弹出对话框,默认输入字符串显示在编辑框内,若用户单击【OK】按钮,输入框关闭,编辑框内当前字符串作为返回值;若用户单击【Cancel】按钮,输入框关闭,默认输入字符串作为返回值。

2.InputQuery函数

调用函数InputQuery,可以弹出输入框,如图8-2所示。

函数InputQuery的声明格式为:

functionInputQuery(constAcaption,Aprompt:String;varValue:String):Boolean;调用该函数,用两个字符串类型的常量、一个字符串类型的变量作为输入参数,其中Acaption为对话框的标题(如图中“Login”),Aprompt为编辑框的提示信息(如图中“InputUserName”),字符串变量值为显示在编辑框内的缺省输入信息(如图中“1111”),该变量可为空字符串,若为空,则编辑框没有缺省输入字符串。函数返回布尔值。

产生如图8-2所示输入框的InputQuery函数调用格式为:

调用函数后,弹出对话框,变量input的初值作为编辑框的默认输入,若用户单击【OK】

按钮,输入框关闭,函数返回True,编辑框内当前的字符串赋给变量input;若用户单击【Cancel】

按钮,输入框关闭,函数返回False,变量input保持调用函数前的值不变。

8.2.2消息框

消息框,是指用于显示提示信息的简单对话框,无需用户输入任何信息,只需通过消息框的按钮加以确认或取消。Delphi提供了若干过程或函数来产生消息框,这里介绍常用的几个。

1.ShowMessage过程

调用ShowMessage过程,弹出一个最简单的消息框,如图8-3所示。

过程ShowMessage的声明格式为:

procedureShowMessage(constMsg:String);调用该过程,只用一个字符串类型的常量作为参数,即显示的提示信息。

产生如图8-3所示消息框的ShowMessage过程的调用格式为:

showmessage(欢迎学习使用Delphi语言!);调用该过程,弹出消息框,单击【OK】按钮,消息框关闭,程序继续往下执行。

2.ShowMessagePos过程

调用ShowMessagePos过程,弹出一个如图8-3所示的消息框。

过程ShowMessagePos的声明格式为:

procedureShowMessage(constMsg:String;X,Y:Integer);调用该过程,用一个字符串类型的常量、两个整数类型常量作为参数,字符串类型的常量为显示的提示信息,两个整数类型常量确定消息框左上角的坐标。该过程和ShowMessage过程的作用完全相同,区别仅在于由X、Y指定弹出的消息框的位置。

3.MessageDlg函数

调用MessageDlg函数,弹出一个消息框,如图8-4所示。

单击按钮,对话框关闭。单击的按钮不同,函数的返回值不同,决定程序进行不同的处理。

函数MessageDlg的声明格式为:

functionMessageDlg(ConstMsg:String;AType:TMsgDlgType;AButtons:

TMsgDlgButtons;HelpCtx:Longint):Word;其中有以下4个调用参数。

ConstMsg:字符串类型常量,为显示的提示信息。

AType:决定消息框的类型,其取值及含义如表8-1所示。

调用中该参数用方括号括起,若有几个按钮,则按钮间用逗号分隔。

HelpCtx:决定当用户单击【Help】按钮时,显示哪一个帮助主题。

产生如图8-4所示消息框的调用函数的格式为:

MessageDlg(‘要退出程序吗?’,mtInformation,[mbYes,mbNo],0);8.3通用对话框组件

Windows应用程序支持多种标准对话框,如打开文件对话框、存储文件对话框等。Delphi将这些对话框封装成通用组件,方便了用户的使用。

Delphi提供了10种通用对话框组件,集中组织在组件模板的【Dialogs】选项卡上。

这些对话框组件都是不可见组件,即程序运行时,并不会自动显示对话框,而需要用户编写事件处理代码来显示。

另外,这些对话框大多是模态对话框,只有FindDialog(查找对话框)和ReplaceDialog(替换对话框)是非模态对话框。

8.3.1OpenDialog(打开对话框)组件

OpenDialog组件的图标为。

OpenDialog组件显示的【打开】对话框如图8-5所示。

在对话框中,先利用【查找范围】组合框和其右边的工具确定要打开文件所在的文件夹,在【文件类型】组合框中选择要打开文件的类型(若文件数量较少也可不选择文件类型),在列表框中选择要打开的文件,然后单击【打开】按钮,选定的文件即被打开。

1.OpenDialog组件的属性

OpenDialog组件的属性决定了对话框的特性。

1)DefaultExt属性

DefaultExt属性指定对话框打开文件的默认扩展名。当用户要打开的文件没有扩展名时,系统自动将用该属性设定的扩展名加上;当用户要打开的文件有扩展名时,则该属性设定的扩展名不起作用。该属性是直接输入型属性,其默认值为空。

2)FileName属性

FileName属性指定打开文件的包含全路径的名称。该属性为直接输入型属性,其默认值为空。

3)Filter属性

Filter属性决定对话框的【文件类型】组合框中列出的可选择的文件类型。使用对话框时,先从该组合框中选择要打开的文件的类型,这时对话框的列表框中只列出选择的文件类型,这种类型选择和文件列表的对应关系就是由Filter属性决定的。

Filter属性为编辑型属性,当单击对象检测器中该属性值栏右端的【…】按钮时,打开【FilterEditor】对话框,如图8-6所示。

在对话框的【FilterName】栏中输入组合框的下拉列表中列出的可选择的文件类型,【Filter】栏中输入这些文件类型对应的文件扩展名,如左边输入“AllFile”,右边输入“.”,左边输入“TextFile”,右边输入“txt”等。另外,一种“FilterName”可对应多种“Filter”,多种“Filter”以分号隔开,如对于“TextFile”,【Filter】栏可以输入“.txt;wps;doc”。

为了更清楚起见,左边也可以输入“AllFile(.)”、“TextFile(.txt)”等。

左边的内容是在对话框【文件类型】组合框的下拉列表中看到的可选择文件类型,右边才是对过滤器起作用的文件扩展名。

该属性在运行中设定时用如下格式:

其中第一个两侧分别为第一个过滤器的FilterName和Filter,第二个为两个过滤器的分隔符,第三个两侧为第二个过滤器的FilterName和Filter,依此类推,可以加更多的过滤器。

4)InitialDir属性

InitialDir属性决定对话框被打开时显示的初始路径。该属性为直接输入型属性,应输入选定的绝对路径,其默认值为空。

5)Options属性

Option属性决定对话框的外观和行为。该属性为集合型属性,包含若干个布尔型的子属性,其中主要子属性的值为True时的含义如表8-3所示。

6)Title属性

Title属性指定对话框标题栏中的文字。该属性为直接输入型属性,其默认值为空,而此时对话框标题栏中的文字为“打开”。若不为空,则标题为设定的文字。

2.OpenDialog组件的方法

OpenDialog组件的最常用方法是Execute,其声明格式为:

functionExecute:Boolean;

该方法打开对话框,若用户选择文件后单击【打开】按钮,则返回True;若用户单击【取消】按钮,则返回False。

如前所述,对话框是不可见组件,即程序运行时并不会自动显示对话框。要显示对话框,就要调用组件的Execute方法,其调用格式为:

OpenDialog1.Execute;

通常Execute方法放在if语句中,若打开文件成功,则其格式为:

ifOpenDialog1.ExecuteThenbegin执行打开文件的操作

end;

8.3.2SaveDialog(保存对话框)组件

SaveDialog组件的图标为。

SaveDialog组件显示的【另存为】对话框如图8-7所示。

在对话框中,先利用【保存在】组合框和其右边的工具确定要保存文件的路径,在【文件类型】组合框中选择要保存文件的类型,在【文件名】组合框在输入保存文件的名称(若列表框在有同名的文件,也可从列表框在选择),然后单击【保存】按钮,选定的文件被保存。

1.SaveDialog组件的属性

SaveDialog组件的属性与OpenDialog组件的属性绝大部分是相同的,只是Options属性中有一个子属性ofOverwritePrompt在这里才有意义,当其为True时,若试图选择一个已存在的文件,则弹出一个消息框,告知该文件已存在,询问是否用新文件替换原文件。

2.SaveDialog组件的方法

SaveDialog组件的常用方法也是Execute,其使用方法和OpenDialog组件完全一样。

8.3.3OpenPictureDialog(打开图像对话框)组件OpenPictureDialog组件的图标为。

OpenPictureDialog组件显示的【打开】对话框如图8-8所示。

由图8-8可以看出,打开图像对话框与打开对话框外观基本相同,区别仅在于打开图像对话框的右边有一个矩形的图像预览区,当从对话框选定一个图像文件时,预览区显示该图像。

OpenPictureDialog组件的属性和方法与OpenDialog组件的完全一样,只是OpenPictureDialog组件要打开的是图像文件,在设定其Filter属性时,应输入Delphi支持的图像文件的格式,包括.bmp(位图)文件、.ico(图标)文件、.wmf(Windows图元)文件、.emf(增强型Windows图元)文件等。当然,通过一定的操作,可以使之支持其他格式的图像文件,这方面的内容将在后面有关章节介绍。

8.3.4SavePictureDialog(保存图像对话框)组件SavePictureDialog组件的图标为。

SavePictureDialog组件显示的【另存为】对话框如图8-9所示。

保存图像对话框与保存对话框的区别也是对话框右边有一个矩形的图像预览区,当要保存一个图像文件时,预览区显示该图像。

SavePictureDialog组件的属性和方法同OpenPictureDialog组件的一样。

8.3.5FontDialog(字体对话框)组件FontDialog组件的图标为。

调用FontDialog组件的Execute方法,打开的【字体】对话框如图8-10所示。

可以看出,通过对话框可以设置选定文字的字体、字形、大小、颜色、字符集及删除线、下划线等效果。

FontDialog组件有如下一些主要属性。

1)Device属性

Device属性指定对话框中显示哪种设备的可用字体列表。该属性为枚举型属性,有以下3种字体类型列表。