通用对话框控件
在VB中,对话框是一种特殊的窗口,它通过显示和获取信息与用户进行交流,一个对话框可以很简单,也可以很复杂,前面介绍的MsgBox和InputBox函数可以建立简单的对话框,即信息框和输入框。但是要定义的对话框较复杂时,将会花较多的时间和精力设计和书写代码,为此,Visual Basic 6.0提供了通用对话框控件,用其可以定义比较复杂的对话框(通用对话框)。要把通用对话框控件加到工具箱中,可按如下步骤操作:
(1) (1) 执行“工程”菜单中的“部件”命令,打开“部件”对话框。 (2) (2) 选择“控件”选项卡,如图1所示,在控件列表框中选择“Microsoft Common Dialog Control 6.0”。
图1部件对话框
(3) (3) 单击“确定”按扭,通用对话框即被添加到工具箱中,如图2所示。在设计状态下,CommonDialog控件以图标的形式显示在窗体上,其大小不能改变,在程序运行时,控件本身被隐藏。
CommonDialog 图2通用对话框
通用对话框的默认名称(Name属性)为CommonDialogX(X为1,2,3……)。 通用对话框控件为程序设计人员提供了几种不同类型的对话框,有文件对话框、打印对话框、字体对话框、颜色对话框等。利用这些对话框,可以获取所需要的信息,例如打开文件、打印、存盘、选择颜色等。这些对话框与Windows本身及商业程序具有相同的风格。
对话框的类型可以通过Action属性设置,也可以使用说明性的Show方法来代替Action属性值。Action属性和Show方法如表1:
表1 Action属性和Show方法 Action属性 Show方法 说明 1 2 3 4 5 6 ShowOpen ShowSave ShowColor ShowFont ShowPrinter 显示文件打开对话框 显示另存为对话框 显示颜色对话框 显示字体对话框 显示打印机对话框 ShowHelp 显示帮助对话框 通用对话框具有的主要共同属性为: (1) (1) CancelError属性:通用对话框里有一个“取消”按扭,用于向应用程序表示用户想取消当前操作。当CancelError属性设置为True时,若用户单击“取消”按扭,通用对话框自动将错误对象Err.Number设置为32755(cdlCancel)以便供程序判断。若CancelError属性设置为False,则单击“取消”按扭时不产生错误信息。
(2) (2) DialogTitle属性:每个通用对话框都有默认的对话框标题,通过 DialogTitle属性可由用户自行设计对话框标题上显示的内容。
(3) Flags属性:通用对话框的Flags属性可以修改每个具体对话框的默认操作,其值可有3种形式,即符号常量、十六进制数和十进制数。 (4)HelpCommand属性:指定Help的类型。
(5)HelpContext属性:用来确定Help ID的内容,与HelpCommand属性一起使用,指定显示的Help主题。
(6)HelpFile和HelpKey属性:分别用来指定Help应用程序的Help文件名和Help主题能够识别的名字。
7.1.1 文件对话框的结构
文件对话框有打开(Open)文件对话框和保存(Save)对话框,如图3所示为打开对话框,在该对话框中用户可以打开一个文件供程序调用。“保存”对话框有类似的结构,可以指定一个文件名来保存当前文件。通用对话框用于文件操作时需要对下列属性进行设置。
InitDir FileName Filter
图3 打开对话框
(1) DefaultEXT:设置对话框中默认文件类型,即扩展名。该扩展名出现在“文件类型”栏内。如果在打开或保存的文件名中没有给出扩展名,将自动将DefaultEXT属性值作为其扩展名。
(2) DialogTitle:此属性用来设置对话框的标题。在默认情况下,“打开”对话框的标题是“打开”,“保存”对话框的标题是“保存”。
(3) FileName:该属性值为字符串,用于设置和得到用户所选的文件名(包括路径名)。
(4) FileTitle:该属性用来指定对话框中所选择的文件名(不包括路径),该属性与FileTitle属性的区别是:FileName属性用来指定完整的路径,而FileTitle只指定文件名。 (5) Filter:该属性用来过滤文件类型,使文件列表框中显示指定的文件类型。可以在设计时设置该属性,也可以在代码中设置该属性。Filter的属性值由一对或多对文本字符组成,每对字符串间要用“|”隔开,格式为:
文件说明1 | 文件类型1 |文件说明2 | 文件类型2
例如要在打开对话框的“文件类型”列表框中显示如图3所示的文件类型,则Filter属性应设置为:
CommonDialog1.Filter=文本文件 | *.txt | Word文档 | *.doc
(6) InitDir:该属性用来指定打开对话框中的初始目录。如果要显示当前目录,则该属性不需要设置。
【例1】编写程序,建立“打开”和“保存”对话框。
根据上述方法在窗体上画一个通用对话框,以属性的默认值Name属性取默认值,即CommonDialog1,再建立两个命令按扭Command1和Command2,然后编写两个事件过程:
Private Sub Command1_Click() CommonDialog1.FileName=\"\"
CommonDialog1.Flags=vbOFNFileMustExist
CommonDialog1.Filter=\"All Files | *.* | (*.exe) | *.exe | (*.TXT) _ | *.TXT\"
CommonDialog1.FilterIndex=3
CommonDialog1.DialogTitle=\"Open File(*.EXE) \"
CommonDialog1.Action=1 '打开对话框 If CommonDialog1.FileName=\"\" Then MsgBox \" No file Selected\ Else
Open Commondialog1.FileName For Input As #1 Do While Not EOF(1) Input #1,a$ Print a$ Loop End If End Sub
Private Sub Command2_Click() CommonDialog1.CancelError=True CommonDialog1.DefaultExt=\"TXT\" CommonDialog1.FileName=\"lbw.txt\"
CommonDialog1.Filter=\"Text files(*.txt) | *.TXT | ALL Files(*.* _) | *.*\" CommonDialog1.FilterIndex=1
CommonDialog1.DialogTitle=\"Save File As (*.TXT) \" CommonDialog1.Flags=vbOFNOverwritePrompt Or vbOFN_ PathMustExist
CommonDialog1.Acion=2 '保存对话框 End Sub
Open对话框并不能真正“打开”文件,而仅仅是用来选择一个文件,至于选择以后的处理,包括打开、显示等,Open对话框是没有能力完成的,前半部分用来建立Open对话框,设置对话框的各种属性;“Else”之后的部分用来对选择的文件进行处理。
7.1.2 “颜色”对话框
“颜色”对话框的方法是ShowColor,Aciton为3的通用对话框,如图4颜色对话框,在颜色对话框中提供了基本颜色和自定义颜色。
“颜色”对话框的两个重要属性:Color属性和Flags属性。其中Color属性是“颜色”对话框最重要的属性,它返回或设置选定的颜色。当用户在调色板中设置了某颜色时,该颜色值赋给Color属性。
Color属性用来设置初始颜色,并把对话框中选择的颜色返回给应用程序。
图4颜色对话框
符号常量 vbCCRGBinit vbCCFullOpen vbCCPreventFullOpen
表2 颜色对话框的Flags属性的取值 十进制值 作用 1 2 4 使得Color属性定义的颜色在首次显示对话框时随着显示出来 打开完整对话框,包括“用户自定义颜色”窗口 禁止选择“规定自定义颜色”按扭 vbCCShowHelp 8 显示一个Help按扭 【例2】在例.1的窗体上增加命令按扭Command3,用于打开颜色对话框,通过“颜色”对话框设置窗体(Form1)的背景颜色。
代码如下:
Private Sub Command3_Click()
CommonDialog1.Flags=vbCCRGBinit CommonDialog1.Color=BackColor CommonDialog1.Action=3
Form1.BackColor= CommonDialog1.Color End Sub
为了设置或读取Color属性,必须将Flags属性设置为1(vbCCRGBinit)。
7.1.3 “字体”对话框
在Visual Basic中,字体通过字体(Font)对话框属性设置。利用通用对话框控件,可以建立一个字体对话框,并可以通过该对话框设置应用程序所需要的字体。字体对话框的主要属性:
(1)CancleError,DialogTitle,HelpCommand,HelpContext,HelpFile和HelpKey见前面介绍。
(2)Flags属性:其属性值见表。
表3 字体对话框的Flags属性取值 符号常数 属性值 作用 cdlCFScreenFonts cdlCFPrinterFonts cdlCFBoth 1 2 3 只显示屏幕字体 只列出打印机字体 列出打印机和屏幕字体 cdlCFEffects 256 允许中划线、下划线和颜色 (3) Max和Min属性:字体大小用点来度量。在默认情况下,字体大小的范围为1~2048个点,用Max和Min属性可以指定字体大小的范围(在1~2048之间的整数)。但是在设置Max和Min属性之前,必须把Flags属性设置为8192。
(4) FontBold,FontItalic,FontName,FontSise,FontStrikeThru,FontUnderLine这些属性可以在字体对话框中选择,也可以通过程序代码赋值。 【例7.3】用字体对话框设置文本框中显示的字体。
在窗体上建立通用对话框CommonDialog1、文本框Text1、和命令按扭Command1,如图5所示。在命令按扭中编写Click事件代码如下:
图5 初始界面
Private Sub Command1_Click()
CommonDialog1.Flags=cdlCFBoth or cdlCFEffects '设置Flags CommonDialog1.ShowFont
If CommonDialog1.FontName>\"\" Then '如果选择了字体 Text1.FontName= CommonDialog1.FontName
End If '下面设置文本框内的字体 Text1.FontSize=CommonDialog1.FontSize Text1.FontBold=CommonDialog1.FontBold Text1.FontItalic=CommonDialog1.FontItalic Text1.FontStrikethru=CommonDialog1.FontStrikethru Text1.FontUnderline=CommonDialog1.FontUnderline Text1.ForeColor=CommonDialog1.Color
End Sub
上面的程序首先设置通用对话框的Flags的属性,从而可以得到如图6的对话框。
图6 字体对话框
程序运行结果如图7所示。
图7 调试结果
7.1.4 “打印”对话框
“打印”对话框是当Action为5时的通用对话框,可以通过“打印”对话框的名称框选择打印机,通过“打印”对话框的“属性”按扭设置打印机的属性。“打印”对话框并不能处理打印工作,仅仅是一个供用户选择打印参数的界面,所选参数存于各属性中,再通过编写程序来实现打印机操作。打印对话框的主要属性如下:
(1)Copies属性:指定要打印的文档的拷贝数。
(2)FromPage和ToPage属性:指定要打印的文档的页范围。
(3)hDC属性:分配给打印机的句柄,用来识别对象的设备环境,用于API调用。 (4)Max和Min属性:用来限制FromPage和ToPage的范围,其中Min指定所允许的起始页码,Max指定所允许的最后页码。
【例7.4】在窗体上创建一个通用对话框、一个文本框和一个命令按扭,建立打印对话框,打印文本框中的信息。
Private Sub Command1_Click() CommonDialog1.ShowPrinter
For I = 1 To CommonDialog1.Copies Printer.Print Text1.Text Next i
Printer.EndDoc End Sub
程序执行如图7-8的打印对话框。
图8的打印对话框
7.1.5 “帮助”对话框
“帮助”对话框可以用于制作应用程序的联机帮助。“帮助”对话框本身不能建立应用程序的帮助文件,只能将已经创建好的帮助文件从磁盘中提取出来,并与界面连接起来,从而能够显示并搜索帮助信息的目的。创建帮助文件需要用“帮助”编辑器生成帮助文件。
帮助对话框涉及到的重要属性有:
(1)HelpCommand:返回或设置所需要的联机Help帮助类型。
(2)HelpFile:指定Help文件的路径以及文件名称。从而找到帮助文件,再从中找到相应内容,显示在Help窗口中。
(3)HelpKey:该属性用于在帮助窗口中显示由该关键字指定的帮助信息。 (4)HelpContext:其返回或设置所需要的HelpTopic的Context ID,一般与HelpCommand属性(设置为vbHelpContents)一起使用,指定要显示的HelpTopic。
【例7.5】设计一个调用VB.hlp的程序。 Private Sub Command1_Click()
CommonDialog1.HelpCommand = cdlHelpContents CommonDialog1.HelpFile = \"C:\\Windows\\help\\notepad\" CommonDialog1.HelpKey = \"dlakglk\" CommonDialog1.ShowHelp End Sub
因篇幅问题不能全部显示,请点此查看更多更全内容