Delphi程序设计及实验指导电子教案第8章.ppt
第八章 对话框设计,8.1 通用对话框组件 8.2 模式对话框与无模式对话框 8.3 消息框习 题,8.1 通用对话框组件,Delphi 7在通用对话框库中提供了标准对话框,用户可以实现打开和保存文件、搜索和替换、选择颜色、字体以及打印等操作,为Windows应用程序设计标准用户界面带来了极大的方便。在编写应用程序时,可以先设计好主菜单。在需要使用标准对话框菜单项的事件处理中,调用标准对话框的Execute等方法,以满足设计需要。,8.1 通用对话框组件,8.1.1 文件对话框组件Delphi 7中包括了四种通用的文件对话框组件。1打开文件对话框(TOpenDialog)(1)用途 通常情况下,标准的Windows应用程序中的“文件”菜单包含“打开”命令,选择该命令,将弹出打开文件对话框,使用该对话框选择要打开的文件。用户可以通过下拉框选择文件的存放位置、文件类型以及文件列表中要打开的文件。当用户单击了“打开”按钮,对话框将关闭,用户选中的一个或多个文件将被打开。Delphi 7提供了打开文件对话框组件TOpenDialog,用来显示一个“打开”对话框,在程序中使用Execute方法来激活OpenDialog对话框。,8.1 通用对话框组件,(2)主要属性 DefaultText属性 FileName属性 Filter属性 InitialDir属性 Options属性 Title属性,8.1 通用对话框组件,【例8-1】利用主菜单的“文件打开”命令和OpenDialog组件来显示“打开”对话框。,图8-3 窗体界面设计,8.1 通用对话框组件,2保存文件对话框(TSaveDialog)保存文件对话框TSaveDialog组件用来弹出一个“另存为”对话框,让用户选择一个文件并保存。调用该组件的Execute方法可以弹出保存文件对话框,当用户单击“保存”按钮后,对话框将关闭,选中的文件名将被赋给FileName属性。保存文件对话框组件的属性、方法和事件与打开文件对话框组件基本相同。,8.1 通用对话框组件,3打开图像文件对话框(TOpenPictureDialog)打开图像文件对话框TOpenPictureDialog组件实际上与打开文件对话框组件基本相同,只是用于选择以及打开图像文件,对话框中包含了一个矩形的预览区域,如果可以读取选中的文件,该文件将在预览区域显示。该对话框支持的文件类型包括位图(.bmp)、图标文件(.ico)、Windows图元文件(.wmf)以及增强型Windows图元文件(.emf)。该对话框具有与TOpenDialog相同的属性集,但是默认情况下,Filter属性对应于TOpenPictureDialoge组件支持的所有文件类型。,8.1 通用对话框组件,4保存图像文件对话框(TSavePictureDialog)保存图像文件对话框TSavePictureDialog组件用来弹出一个带有图象预览的“另存为”对话框,该对话框的外观以及使用与TOpenPictureDialog对话框基本相同。,8.1 通用对话框组件,8.1.2 字体对话框(TFontDialog)组件 1用途使用TFontDialog组件可以显示一个选择字体对话框,当用户选中了一个字体并单击“确定”按钮之后,对话框将关闭并将选中的字体保存在组件的Font属性中。调用Execute方法可以激活该对话框。2主要属性(1)Device属性(2)Font属性(3)MaxFontSize和MinFontSize属性(4)Options属性,8.1 通用对话框组件,【例8-2】设计一个字体对话框,当用户选中某种字体之后,按钮的字体将改变为选中的字体。,8.1 通用对话框组件,编写代码。响应按钮OnClick事件的代码如下:procedure Tform1.Button1Click(Sender:TObject);begin FontDialog1.Execute;end;在窗体的OnApply事件中添加代码如下:procedure TForm1.FontDialog1Apply(Sender:TObject;Wnd:HWND);beginbutton1.Font:=fontdialog1.Font;end;,8.1 通用对话框组件,8.1.3 颜色对话框(TColorDialog)组件1用途颜色对话框TColorDialog组件用来显示标准的Windows颜色对话框,用户可以从中选择一种颜色。调用该组件的Execute方法可以弹出“颜色”对话框,当用户选择了一种颜色并单击“确定”按钮之后,对话框将关闭,并且选中的颜色保存在组件的Color属性中。一个标准的颜色对话框如图8-11所示,8.1 通用对话框组件,图8-11 颜色对话框,8.1 通用对话框组件,2主要属性(1)Color属性(2)CustomColors属性(3)Options属性,8.1 通用对话框组件,8.1.4 打印(TPrintDialog)与打印设置对话框(TPrinterSetupDialog)组件1用途打印机对话框TPrintDialog组件用于显示标准的Windows“打印”对话框,通过它可以向打印机发送打印作业。打印设置对话框组件(TPrinterSetupDialog)用于显示一个打印设置对话框,该对话框的内容与打印驱动程序有关,这两个对话框都可以通过Execute方法调用进行显示。,8.1 通用对话框组件,图8-13 打印对话框,图8-14 打印设置对话框,8.1 通用对话框组件,2主要属性(1)Collate属性(2)Copies属性(3)FromPage以及ToPage属性(4)MaxPage以及MinPage属性(5)Option属性的poPrintToFile子属性(6)PrintToFile属性,8.1 通用对话框组件,8.1.5 查找及替换对话框组件 1查找对话框组件(TfindDialog)(1)用途通过“查找”对话框用户可以查找文本中的某个特定字符串,调用TFindDialog组件的Execute方法可以弹出一个“查找”对话框,如图8-15所示。,图8-15“查找”对话框,8.1 通用对话框组件,(2)主要属性 FindText属性 Left、Top以及Position属性 Options属性 2替换对话框组件(TReplaceDialog)(1)用途通过“替换”对话框用户可以查找一个特定的字符串并将该字符串替换为另外一个字符串,该对话框在修改文本输入错误很有用。调用TReplaceDialog组件的Execute方法可以弹出一个“替换”对话框,如图8-16所示。,8.1 通用对话框组件,图8-16“替换”对话框,8.1 通用对话框组件,(2)主要属性TReplaceDialog组件是由TFindDialog组件派生出来,除了TFindDialog组件的属性外,它还具有ReplaceText属性,该属性为一个字符串,它代表了“替换为”编辑框中的内容。该组件除了具有OnFind事件外,还有一个OnReplace事件,当用户单击“替换”或“全部替换”按钮时被激活,用户可以通过Options属性中的frReplace或ReplaceAll的值为true或false来判断单击了哪个按钮。,8.2 模式对话框与无模式对话框,8.2.1 模式对话框 1模式对话框的概念 模式对话框在程序中应用最为普遍。当用户在应用中显示一个对话框时,用户不能在该对话框和其他窗体之间进行切换,而必须关闭了该对话框,才能将输入焦点转移到其他窗体,这种对话框称作模式对话框。模式对话框用于用户必须做出选择并进行确认的操作,通常在对话框上会有“确认”和“取消”按钮。,8.2 模式对话框与无模式对话框,2模式对话框的创建在Delphi中,对话框实际上是一个窗体,只是属性与其他窗体不同。要创建对话框,首先要新建一个窗体,并将窗体的BorderStyle属性设置为bsDialog,然后运行该窗体,用户就会发现该窗体没有最大化和最小化按钮,也没有系统菜单,并且不能改变窗体的大小,这些就是对话框窗体与其他窗体的区别。,8.2 模式对话框与无模式对话框,【例8-3】设计一个“考试系统”登录界面,如图8-18所示。用户必须选择登录身份,如果是管理员,必须输入密码;如果是考生,必须输入八位准考证号。,图8-18 登录界面,8.2 模式对话框与无模式对话框,编写代码。在LoginForm窗体所对应的单元文件中添加如下代码:implementation$R*.dfm登录界面“确定”按钮的事件处理程序代码如下:uses ExamUnit;/ExamUnit是模式对话框的单元文件const glmm=ksxt;/定义管理员密码,8.2 模式对话框与无模式对话框,procedure TLoginForm.BtnConfirmClick(Sender:TObject);begin if(not RadioButton1.checked)and(not RadioButton2.Checked)then MessageDlg(请选择用户身份!,mtWarning,mbOK,0);/必须选择用户身份 if RadioButton1.checked then/用户身份为管理员 if edit1.text=glmm then begin ExamForm.caption:=系统管理;ExamForm.ShowModal;close;end else MessageDlg(密码错误,请重新输入!,mtError,mbOK,0);,8.2 模式对话框与无模式对话框,If RadioButton2.checked then/用户身份为考生 if Length(Edit2.text)8 then MessageDlg(重新输入准考号!,mtWarning,mbOK,0)else begin ExamForm.caption:=祝你成功;ExamForm.ShowModal;close;end;end;,8.2 模式对话框与无模式对话框,“退出”按钮的事件处理代码如下:procedure TLoginForm.BtnQuitClick(Sender:TObject);begin close;end;,8.2 模式对话框与无模式对话框,8.2.2 无模式对话框 相对于模式对话框,无模式对话框不但允许用户在对话框与别的应用之间切换,而且还允许用户在对话框和同一个进程中的其他窗体进行切换,所以无模式对话框更类似于Windows中常见的弹出式窗体。当用户在程序中进行某些操作时希望对话框保持打开,便使用无模式对话框,例如Word中的“查找”和“替换”对话框,使用“查找”对话框,用户不需要结束对话框,就可以重复查找一个字符串。在Delphi中,显示无模式对话框应调用Show方法,该方法没有返回值,因为该方法并非等到对话框关闭时才返回,而是立即返回。,8.2 模式对话框与无模式对话框,【例8-4】在例8-3的基础上设计无模式对话框。要求在模式对话框界面上单击“进入”按钮后,进入无模式对话框。,图8-25 无模式对话框界面,8.2 模式对话框与无模式对话框,编写程序代码。模式对话框单元文件ExamUnit中添加如下代码:implementation uses TestUnit;/TestUnit是无模式对话框的的单元文件$R*.dfm“进入”按钮的OnClick事件处理代码如下:procedure TExamForm.Button1Click(Sender:TObject);begin TestForm.Show;/显示无模式对话框end;,8.3 消息框,当应用程序想从用户那里得到一个简单的应答时,使用消息框来代替对话框是很合适的,并且也更容易。弹出一个消息框可以有多种方法。1 MessageDlg函数 一般情况下用MessageDlg函数弹出一个消息框,该函数的语法如下:iItem:=MessageDlg(const Msg:string;Atype:TmsgDlgType;Abuttons:TmsaDlgButton;HelpCtx:Longint):Word;,8.3 消息框,Msg参数指定了消息框显示的内容,Atype参数指定消息框的类型,该参数类型为TmsgDlgType,它的取值及含义见表8-4。Abuttons参数指定了消息框包含哪些按钮,该参数类型为TmsgDlgButtons,它的取值及含义见表8-5。HelpCtx参数指定了帮助主题的帮助上下文的ID。,8.3 消息框,表8-4 Atype参数的取值,8.3 消息框,表8-5 Abuttom参数的取值,8.3 消息框,MessageDlg的返回值与用户所选的按钮有关。使用下面的代码就可以方便地显示一个消息框:MessageDlg(输入的数据无效!,mtWarning,mbOk,mbHelp,0);,图8-27 消息框,8.3 消息框,2 MessageDlgPos函数 MessageDlgPos函数与MessageDlg函数的使用方法基本相同,只是可以用X和Y参数确定消息框的位置。其语法如下:Function MessageDlgPos(constMsg:string;DlgType:TMsgDlgType;Buttons:TMsgDlgButtons;HelpCtx:Longint;X,Y:Integer):Word;MessageDlgPos返回用户所选择的按钮的值,表8-6给出了可以在消息框中使用的各种按钮的TMsgDlgBtn的值,以及相应的返回值。,8.3 消息框,表8-6 各按钮的返回值,8.3 消息框,3 ShowMessage过程调用ShowMessage过程可以显示一个带有OK按钮的简单消息框。其语法如下:procedure ShowMessage(const Msg:String);Msg参数指定在消息框中显示的消息字符串,对话框的标题即为应用程序的执行文件名。,8.3 消息框,4 ShowMessageFmt过程调用ShowMessageFmt过程可以显示一个带有OK按钮的简单消息框。其语法如下:procedure ShowMessageFmt(const Msg:string;Params:array of const);Msg参数是一个格式化的字符串,用于显示在对话框上带有格式的消息,Params指定集成到消息串中的参数,对话框的标题即为应用程序的执行文件名。,8.3 消息框,下面的语句显示结果如图8-28所示。ShowMessageFmt(欢迎使用本系统!,2.323);,图8-28 显示结果,习 题,1利用通用对话框组件TColorDialog设置Memo组件中的文本的颜色。2模式对话框与无模式对话框有何异同。如何设计和调用这两种对话框。3弹出一个消息框有哪几种方法。4利用通用对话框组件TOpenDialog将已有文本文件的内容显示在窗体的TMemo组件中。设置打开文件对话框的Filter属性为文本文件(*.txt),word文档(*.doc),如果打开文件不是文本文件,弹出一个出错消息框,出错信息为:“不是文本文件!”。设计窗体如图8-29所示,消息框如图8-30所示。,习 题,图8-29 窗体设计,图8-30 消息框,