登陆注册
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种字体类型列表。

同类推荐
  • FlashCS动画制作基础

    FlashCS动画制作基础

    适合爱好flash动画制作的初、中级读者作为入门学习的参考书,还可以供从事网页制作与动画设计的人员参考,同时也可以作为初、中级电脑短训班的培训教材,对有一定经验的flashcs5使用者也有很高的参考价值。
  • 如何组装电脑

    如何组装电脑

    本书以问答的形式介绍了组装电脑的基本知识。内容包括:电脑硬件的部件组成、CPU的发展历程、CPU主频、内存的组成、内存的主要性能参数等。
  • 智能计算方法概论

    智能计算方法概论

    本书以智能计算领域的若干前沿技术为主线,内容包括数字水印技术在版权保护区和身份认证中的应用,量子算法在信号处理、图像处理中的应用,量子数据挖掘技术,小波方法在医学图像处理中的应用等。
  • 云计算和现代远程教育

    云计算和现代远程教育

    本书介绍了云计算知识、云计算的特性、云计算技术、云计算中的访问云、云计算中的云存储、云计算在远程教育中的应用等内容。
  • 如何处理电脑故障

    如何处理电脑故障

    本书以问答的方式介绍了电脑会出现的各种故障,内容包括了音箱声音失真,如何处理?如何做好电脑的日常维护等等问题。
热门推荐
  • 火影之邪神系统

    火影之邪神系统

    萧枫,二十一世纪宅男家族的一员,因为半夜玩电脑猝死,英勇的加入了这个穿越者家族。穿越火影世界,带着“邪神系统”纵横忍界。“走!萧枫,老子带你去装B!抢走小樱、井野的初吻获得初吻掠夺者的称号!给你10点邪恶值!”“卧槽!!!系统你给我等着!”宇智波·枫欲哭无泪。
  • 转世重生:十二星座

    转世重生:十二星座

    上一世,他们选择隐忍却难逃一劫。再睁眼时,他们已经翻手为云,覆手为雨。从此再也不会隐瞒自己的实力,重新做回那个最原本的自己。他们就要让敌人睁大他们的24K钛合金狗眼看看,为什么花儿会这样红!
  • 植物大领主

    植物大领主

    宅男林木玩着植物大战僵尸,却被一个葫芦砸中意外的灵魂穿越了,他成为一个大家族之中可有可无的废物,一个荒凉之地的小领主!林木的身体里有一种奇特的能量,名为阳光,它可以令植物快速生长成熟,还可以让植物系魔兽对林木产生好感!最神奇的是,在林木随身携带的葫芦之中,存在着一个别墅,别墅的前院林木种满了向日葵,这是用来收集阳光的!花园里种满了金盏花,这是用来生产金钱的;后院种满了土豆雷和食人花,这是用来埋伏用的!泳池孤零零的种着一朵莲花,奇怪的是还有一个农场,可为毛没有牧场呢?难道是数据错乱?让林木最为迷惑不解的就是,别墅的旁边还有一片……我的墓园!QQ群:207924835
  • 我的世界——岩石之令

    我的世界——岩石之令

    每个世界,都有各种传说。当时间逐渐尘封这些历史,那些无人认证的传说就会变成“谎言”。简而言之,谎言。比如,已经消失的岩石之令。夏泽雨,一个普普通通的高中生,在和朋友联机玩《我的世界》时穿越了,还变成了一个女生,她的ID叫“Steve?”。旧的传说泯灭了,新的传说就会出现!欢迎加入一号小说读者群,群聊号码:832546552(QQ)
  • 十年初见,顾你心安

    十年初见,顾你心安

    故事发生于十六岁的那年,美人树下的少年有着世界上最好看、最明朗的笑容。他喜欢的女生有着懒得无可救药的笨脑子,却值得他证明十六岁的爱情不是叛逆,而是过早的遇到对的人。当青春都涂上与你有关的记忆,余生,你便是我的
  • 青春明媚半忧伤

    青春明媚半忧伤

    在她的青春中,遇到了很多极其重要的人,他们在她的人生中留下了或轻或重的足迹,陪她度过了青春中最美好的岁月。有借着男闺蜜的身份默默守候她的蓝颜知己,有以同事名义关心呵护她的亲密搭档,有让她神魂颠倒、遥不可及的男神,还有以她意想不到的方式闯进她生活的学弟。他们都是那么的与众不同,而又是那么不约而同地出现在她的青春里,暗恋、等待、追求,崇拜、呵护、依赖、离别、伤害,成为她回忆中不可或缺的一部分。在他们身上又都上演着不同的故事,故事可能与她有关,也可能没有;故事里的主角是她,是他,也是他们。新学期伊始,所有的故事也都将——拉开帷幕……
  • EXO之对你的爱恋

    EXO之对你的爱恋

    她本来是一个千金小姐,却无奈喜欢上了身为大明星的他。为了他,她做尽了各种各样的搞笑事,奈何却从未能真正见到他。当她真正进入娱乐圈时,却未曾想他决定退出娱乐圈……
  • 周游仙武世界

    周游仙武世界

    流星划破长空,雷霆闪耀苍穹,地星枯竭的天地灵气逐渐复苏,古老的修行焕发出全新的活力……仙路漫漫,武道茫茫。周游诸界,上下求索。
  • 武极至尊道

    武极至尊道

    故事从吴羡获混沌珠得开始,为了修复破损中的混沌珠,他毅然的做起了时空清洁工,开始吞噬这些寄身依附于地球时空表面的形形色色光怪陆离的各种小世界;然而,随着被清理掉的寄生世界越来越多,地球开始复苏并恢复了灵气;消失的洞天福地也若隐若现;上古封神的隐秘也随之显露;……吴羡就这么一路磕磕绊绊,不断蜕变,直到有一天,蓦然回首,才发现他已经成长为了一名威压诸天,令万界膺服的武道至尊。新书《学霸从睡神开始》已签约,求大家支持一下。
  • 欢天喜地七仙女之橙鹰

    欢天喜地七仙女之橙鹰

    欢天喜地七仙女续文,主橙鹰。七仙女大败阴蚀王回天,橙儿和黑鹰之间,又会发生什么故事?敬请期待,不喜勿喷~有些不符合实际的,请见谅哟~YY所需~