vb界面设计3333

来源:百度文库 编辑:神马文学网 时间:2024/04/18 11:37:06
界面设计 ☆ 本章学习内容
用户界面是一个应用程序最重要的部分,它是最直接的现实世界。对用户而言,界面就是应用程序,它们感觉不到幕后正在执行的代码。不论花多少时间和精力来编制和优化代码,应用程序的可用性仍然依赖于界面。
8.1 多文档界面、8.2 工具栏和状态栏、
8.3 RichTextBox控件、8.4 应用程序向导


8.1 多文档界面 下一节
多文档界面是指,一个应用程序,它提供一个桌面上的父窗口,而该窗口包含有其他该应用程序中打开的子窗口。当该父窗口最小化或关闭时,它所包含的所有子窗口都最小化或关闭。
多文档界面 (MDI) 允许创建在单个容器窗体中包含多个窗体的应用程序。象 Microsoft Excel 与 Microsoft Word for Windows 这样的应用程序就具有多文档界面。
MDI 应用程序允许用户同时显示多个文档,每个文档显示在它自己的窗口中。文档或子窗口被包含在父窗口中,父窗口为应用程序中所有的子窗口提供工作空间。例如:Microsoft Excel 允许创建并显示不同样式的多文档窗口。每个子窗口都被限制在 Excel 父窗口的区域之内。当最小化 Excel 时,所有的文档窗口也被最小化,只有父窗口的图标显示在任务栏中。
子窗体就是 MDIChild 属性设置为 True 的普通窗体。一个应用程序可以包含许多相似或者不同样式的 MDI 子窗体。
在运行时,子窗体显示在 MDI 父窗体工作空间之内(其区域在父窗体边框以内及标题与菜单栏之下)。当子窗体最小化时,它的图标显示在 MDI 窗体的工作空间之内,而不是在任务栏中,如图 8.1 所示。

图 8.1 显示在 MDI 窗体工作空间之内的子窗体
注意 一个应用程序也可以包括标准的、不是包含在 MDI 窗体之内的非 MDI 窗体。 MDI 应用程序中标准窗体的典型用法是显示模式的对话框。
MDI窗体相似于具有一个限制条件的普通窗体。除非控件具有 Align 属性(如 PictureBox 控件)或者具有不可见界面(如 Timer 控件),否则不能将控件直接放置在 MDI 窗体上。
8.1.1 创建和设计MDI窗体及其子窗体
开发多文档界面的一个应用程序至少需要两个窗体:一个(只能一个)MDI窗体和一个 (或若干个)子窗体。在不同窗体中共用的过程、变量应存放在标准模块中。
使用下列步骤来创建含有MDI窗体及其子窗体的应用程序。
1.创建和设计MDI窗体。
MDI窗体是子富体的容器,所以该窗体中一般有菜单栏、工具栏、状态栏,不可以有文 本框等控件。
(1)创建MDI窗体
从“工程”菜单中选取“添加 MDI 窗体”。
注意 一个应用程序只能有一个 MDI 窗体。如果工程已经有了一个 MDI 窗体,则该“工程”菜单上的“添加 MDI 窗体”命令就不可使用。本例MDIW体名为“frmMDI”,以文件名为V6b8-1.frm保存。见图8.2。
图8.2 MID窗体(2)设计MDI窗体  对于设计MDI窗体,此处仅建立菜单栏,而工具栏、状态栏在后面几节中详细介绍。菜单内容见表8.1。表8.2菜单栏 标题
(Caption) 名称
(Name) 说明
文件(&F) mnuFile 菜单名
新建(&N) mnuFileNew 菜单项
打开(&O) mnuFileOpen 菜单项
退出(&X) mnuExit 菜单项
2.创建应用程序的子窗体。
MDI子窗体主要是显示应用程度的文档,因此,在该窗体上应有文本框,也可以有菜单栏。
(1)创建MDI子窗体
MDI子窗体是一个MDIChild属性为True的普通窗体。因此,要创建一个MDI子窗体, 应先创建一个新的普通窗体,然后将它的MDIChild属性设置为True即可。在工程管理器窗口可以看到,子窗体的图标与普通窗体的图标不同,见图8.2。若要建立多个子窗体,则重 复进行上述操作。显然,创建以文档为中心的应用程序,为了在运行时建立若干个子窗体以存取不同的文档,若在设计时创建若干个子窗体的方法是不可取的。一般先创建一个子窗体作为这个应用程序文档的模板,然后通过对象变量来实现。本例中建立了一个Name为“theMDIChild” 的窗体模板,则下面的语句:
Dim NewDoc As New frmMDIChild
就会为“frmMDIChild”建立一个新的实例,新实例具有与“frmMDICbild”窗体相同的属性、控件、代码。
注意:从前一章的学习中知道,New关键字后应是“类名”。实际上,在工程中添加的窗体有着特殊性,它既是窗体类,也是窗体对象,与在窗体上建立的控件具有不同的性质。 请比较下面的代码:
Dim NewDoc As New Form1 '声明并创建一个NewDoc窗体变量
NewDoc.Show '新窗体显示在屏幕上
'假定窗体上有个名为Text1的TextBox
Dim objText As New Text1 '该语句产生错误
由于这个特殊性,使得应用程序在运行中可以打开若干个文档窗口。窗体程序运行时建立一个子窗体的程序代码如下:
Dim No As Integer
Public Sub FileNewProc()
Dim NewDoc As New frmMDIChild
NO=NO+ 1
NewDoc.Caption="no&No
NewDoc.show   '显示于窗体
End Sub
多次调用FileNewProc过程,则产生多个“frmMDIChild”的实例,见图8.1的效果。
说明:在“frmMDI”和“frmMDIChild”中均有“新建”菜单项,为减少代码的重复性,可将上述FileNewProc过程保存在标准模块(本例为V6B8-1.bas)中,供各窗体模块调用。
(2)设计MDI子窗体
MDI子窗体的设计与MDI窗体无关,但在运行时总是包含在MDI窗体中。在该子窗体上必须有存放文档的控件、也可有子窗体菜单。 本例的设计菜单栏有五个菜单名,分别为“文件”、“编辑”、“格式”、“选项”和 “窗口”,每个菜单有若干个菜单项,读者请看V6b8-l,frm文件。为了便于对文档实现不同字体、字号的混排和图形的插入,此例使用RichTextBox 控件,有关该控件的使用在8.3节详细介绍。
8.1.2 MDI窗体与子窗体的交互
当程序运行时建立了一子窗体的许多实例(副本)来存取多个文档时,它们具有相同的属性 和代码,如何操作特定的窗体和特定的控件、保持各自的状态信息,这对程序员来说是一个非常重要的问题。
1.活动子窗体和活动控件
在VB中,提供了访问MDI窗体的两个属性,即ActiveForm和ActiveControl,前者表示具有焦点的或者最后被激活的子窗体,后者表示活动子窗体上具有焦点的控件。
例如,假设想从于窗体的文本框中把所选文本复制到剪贴板上,在应用程序的“编辑” 菜单上有一个“复制”菜单项,它的Click事件将会调用CopyProc,把选定的文本复制到剪贴板上的过程:
Sub CopyProc()
ClipBoard.SetText frmMDI.ActiveForm.ActiveControl.SelText
End Sub
注意:当访问ActiveForm属性时,至少应有一个MDI于窗体被加载或可见,否则会返回一个错误。
在代码中指定当前窗体的另一种方法是用Me关键字。用Me关键字来引用当前其代码正在运行的窗体。当需要把当前窗体实例的引用参数传递给过程时,这个关键字很有用。例如要关闭当前窗口,其语句为:UnLoad Me
2.显示MDI体及其子窗体
显示MDI窗体及其子窗体的方法是Show,这在上一节FileNewProc过程中己使用过。
加载子窗体时,其父窗体(MDI窗体)会自动加载并显示。而加载MDI窗体时,其子窗体并不会自动加载。MDI窗体有AutoShowChildren属性,决定是否自动显示子窗体。如果它被设置为True,则当改变子窗体的属性(如 Caption等)后,会自动显示孩子窗体,不再需要Show方法:如果设置AutoshowChildren为False,则改变子窗体的属性值后,不会自动显示该子窗体,子窗体处于隐藏状态直至用Show方法把它们显示出来。MDI子窗体没有AutoShowChildren 属性。
3.维护子窗体的状态信息
在用户决定退出MDI应用程序时,必须有保存信息的机会。为了使其能够进行,应用程序必须随时都能确定自上次保存以来子窗体中的数据是否有改变。通过在子窗体中声明一个公用变量来实现此功能。例如:
Public BoolDirty As Boolean
在子窗体中有一个RichTextBox控件,当该控件中的Text每一次改变时,Change事件就会将boolDirty设置为True,表示自上次保存以来RichTextBox的内容已经改变。
Private sub RchTextBox1_Change()
boolDirty=True
End Sub
反之,用户每次保存子窗体的内容时,就将boo1Dirty设置为False,以指示RichTextBox1的内容不再需要保存。在下列代码中,假设有一个叫做“保存”(mnuSave)的菜单项和一个用来保存文木框内容的名为FileSaveProc的过程:
Sub nmuSaveflick()
FileSaveProc   '调用保存RichTextBox1内容到文件的过程
boolDirty=False   '设置状态变量
End Sub
同样,当关闭当前活动子窗体时,判断hoolDirty的状态,决定是否要存盘,确保文档的安全性。
Private Sub mnuClose_Click()
If boolDirty then FileSaveProc
Unoad Me
End Sub
4.用QueryUnload卸载MDI窗体
当用户从MDI窗体的控制菜单框中选择“关闭”命令,或者从提供的菜单项,例如“文件”菜单上的“退出”命令,Visual Basic将试图卸载MDI窗体。
当MDI窗体被卸载时,QueryUnload事件首先为MDI窗体调用,然后再为每一个打开的子窗体调用。如果在这些QueryUnload事件过程中没有代码,则取消Unload事件,然后,每一个子窗体被卸载,最后,MDI窗体被卸载。
由于QueryUnload事件在窗体卸载之前被调用,因此在窗体卸载前可以给用户一个机会来保存窗体。下述代码使用boolDirty标志来决定是否要提醒用户在子窗体卸载之前进行保存。
Private Sub mnuexit_Click()
'当用户在MDI应用程序中选取“文件/退出”命令时.卸载MDI窗体,为每个打开的子贸体调用 QyeryUnload事件。
Unload frmMDI
End
End Sub
Sub Fowm_QueryUnload(Cancel As Intege, Unload As Integer)
If boolDirty Then FileSaveProc
End Sub
8.1.3 多文档界面应用程序中的“窗口”莱单
大多数 MDI应用程序都有“窗口”菜单,如图8.3所示。在“窗口”菜单上显示了所有打开的子窗体标题,另外还有层叠、平铺和排列图标命令。
在VB中,如果要在某个菜单上显示所有打开的子窗体标题,只需利用菜单编辑器将该菜单的WindowList属性设置为True,即选中显示窗口列表检查框。

图8.3“窗口”菜单
对子窗体或子窗体图标的层叠、平铺和排列图标命令通常也放在“窗口”菜单上,用Arrange方法来实现的。Arrange方法形式如下:
MDI对象.Arrange 排列方式
排列方式方式见表8.2
表8.2 排列方式
常数 值 描   述
vbCasecade 0 层叠所有非最小化
vbTileHorizontal 1 水平平铺所有非最小化
vbTileVertical 2 垂直平铺所有非最小化
vbarrangeIcon 3 重排最小化
本例中层叠、平铺和排列图标菜单项的名称分别为“mnuCascade”、“mnuTile”和 mnuIcon”。程序段如下:
Private Sub mnuIcon_Click()
frmMDI.Arrange vbArrangeIcons   '对任何已经最小化的子窗体排列图标
End Sub
Private Sub mnuTile_Click()
frmMDI.Arrange vbTileHorizontal  '平铺子窗体
End Sub
Private Sub mnuCascade_Click()
frmMDI.Arrange vbCascade        '层叠子窗体
End Sub
8.1.4 应用MDI窗体注意事项
使用MDI体,为使用VB进行应用程序的开发提供了高效、多功能的良好平台,采用MDI窗体己是非常普遍的技术手段。为了提高其性能,在进行MDI应用程序时要注意以下事项:
(1)应尽量少地使用MDI子窗体。因为,每加载一个子窗体,就要占据较多的内存及系统资源。过多地使用子窗体,会造成内存和系统资源不够。影响程序运行的速度。
(2)在MDI应用程序的设计中,若在子窗体,尽量用Me关键字表示当前窗体,而在MDI窗体则使用ActiveForm。
(3)当在子窗体菜单项、MDI菜单项或工具栏(下一节介绍)都要执行相同的功能,应以过程的形式并存放在标准模块(Moudel)中,供各模块共享。
(4)把整个应用程序中所使用的不可视控件(如 Timer、Common Dialog、Date控件等)都放在MDI窗体上,使子窗体都可以使用这些控件。
返回本章开头到本章末尾

8.2 工具栏和状态栏上一节 下一节
工具栏为用户提供了应用程序中最常用的菜单命令的快速访问方法,进一步增强应用程序的菜单界面,现在已经成为Windows应用程序的标准功能。工具栏制作有两种方法:一是手工制作,即利用图形框和命令按钮,这种方法比较繁琐,在VB 6.0示例程序中,SDI 和 MDI两个实例都是采用这种方法制作的;另一种方法是将 ToolBar、ImageList组合使用,使得工具栏制作与菜单制作一样简单易学。
状态栏StatusBar可显示各种状态信息。
使用这些控件前必须打开“部件”对话框,选择“Microsoft Windows Common Controls 6.0”将控件添加到工具箱,见右图。 在多文档界面(MDI)的应用程序开发中,工具栏和状态栏应在MDI父窗体中。创建工具栏的步骤是:
(1)在ImageList控件中添加所需的图像
(2)在ToolBar控件中创建Button对象。
(3)在 ButtonClick事件中用 Select Case语句对各按钮进行相应的编程。
8.2.1在ImageList控件中添加图像
ImageList控件不单独使用,专门为其他控件提供图像库,是一个图像容器控件。工具栏按钮的图像就是通过ToolBar控件从ImageList的图像库中获得的。
在窗体上增加ImageList控件后,选中该控件,默认名为Imagelist1,单击右键,从弹出的快捷菜单中选择“属性”,然后在“属性页”对话框选择“图像”标签,见图8.5。 其中:
“索引(Index)”表示每个图像的编号,在ToolBar的按钮中引用;
“关键字(Key)”表示每个图像的标识名,在ToolBar的按钮中引用;
“图像数”表示已插入的图像数目;
“插人图片”按钮,插入新图像,图像文件的扩展名为.ico、bmp、gif、jpg等。
“删除图片”按钮,用于删除选中的图像。
图8.5 ImageList “图像”标签对话框
本例中,建立的ImageList控件名为“ImageList1”,它装入了12个图像,每个图像的属性见表8.3左。
表8.3 ImageList1控件与ToolBar1控件按钮的连接关系

8.2.2 在ToolBar空间中添加按钮
ToolBar工具栏可以建立多个按钮,每个按钮的图像来自ImageList对象插入的图像。
1.为工具栏连接图像
在窗体上增加ToolBar控件后,打开“属性页”对话框,见图8.6;选择“通用”标签,其中:
“图像列表”框表示与ImageList控件的连接,此例选择“ImageListl”控件名;
“可换行” 复选框被选中表示当工具栏的长度不能容纳所有的按钮时,在下一行显示。 否则剩余的不显示;
“样式”是VB 6.0新增的。0-tbrStandstd表示如Windows 95采用的普通风格(见图8.7) 0-tbrFlat表示如 Windows 98采用的平面风格。主要区别在于当按钮样式为“样式3”时,前者按钮不可见,只留出一点空间;后者为有一条竖线的细窄按钮。

图8.6 ToolBar“通用”标签对话框

图8.7 设计的工具栏效果
其余各项含义显而易见,一般取默认值。
注意:若要对ImageList控件进行增、删图像,必须先在ToolBar控件的“图像列表”框设置“无”,即与ImageList切断联系,否则VB提示无法对ImageList控件进行编辑。
2.为工具栏增加按钮
选择“按钮”标签,显示该对话框,见图8.8。单击“插入按钮”可以在工具栏增加按钮,对话框中主要属性:

图8.8 ToolBar“按钮”标签对话框
索引(Index):表示每个按钮的数字编号,在ButtonCliCk事件中引用;
关键字(Key)。表示每个按钮的标识名,在 ButtonClick事件中引用:
样式(Style):按钮样式,共5种,含义见表8.4,效果见图8.7;
图像(Image):ImageList对象中的图像,它的值可以是图中的Key或Index;
值(Value):表示按钮的状态,有按下(tbrPressed)和没按下(tbrUnpressed),对样式1和样式2有用。
本例中,工具栏设计见图8.7,ImageList1控件与ToolBar1控件的主要属性见表8.4。
表8.4 按钮样式
值 常 数 说 明
0 tbrDefault 普通按钮。按钮按下后恢复原态,如“新建”等按钮
1 tbrCheck 开关按钮。按钮按下后将保持按下状态,如“加粗”等按钮
2 tbrButtonGroup 编组按钮。一组按钮同时只能一个有效,如“右对齐”等按钮
3 tbrSeparator 分隔按钮。把左右的按钮分隔其他按钮
4 tbrPlaceholder 占位按钮。以便安放其他控件,可设置按钮宽度(Width)
5 tbrDropdown 菜单按钮。具有下拉式菜单,如WOrd中的“字符缩放”按钮
8.2.3 响应ToolBar控件事件
ToolBar控件常用的事件有两个:ButtonClick和 ButtonMenuClick。前者对应按钮样式为 0-2,后者对应样式为5的菜单按钮。
实际上,工具栏上的按钮是控件数组,单击工具栏上的按钮会发生ButtonClick事件或 ButtonMenuClick事件,可以利用数组的索引(Index属性)或关键字(Key属性)来识别被单击的按钮,再使用Select Case语句完成代码编制。现以 ButtonClick事件举例。
(1)用索引Index确定按钮
本例的部分程序段:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1 '按了新建按钮,执行新建过程,该过程代码在标准代码模块"
FileNew
Case 2 '按了打开按钮,执行打开过程
FileOpen
......
End Select
End Sub
(2)用关键字Key确定按钮
如下程序段与(l)程序段作用相同,仅用Button.Key代替Button.Index。
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
With frmMDI.ActiveForm.ActiveControl
Select Case Button.Key
Case "TNew" '按了新建按钮,执行新建过程,该过程代码在标准代码模块"
FileNew
Case "TOpen" '按了打开按钮,执行打开过程
FileOpen
Case "TSave" '按了保存按钮,执行保存过程
FileSave
Case "TCut" '按了剪切按钮,将选中的文本送到剪贴板,
CutProc
Case "Tcopy"
CopyProc
Case "TPaste"
PasteProc
Case "TBold"
.SelBold = Not .SelBold
Case "TUnderline"
.SelUnderline = Not SelUnderline
Case "TItalic"
.SelItalic = Not .SelItalic
Case "TLeft"
.SelAlignment = 0
Case "TRight"
.SelAlignment = 1
Case "TCenter"
.SelAlignment = 2
End Select
End With
End Sub
由此可见,使用Button.Key程序可读性好;而且当按钮有增删时;使用关键字不影响程序。
当单击菜单按钮时响应ButtonMenuClick事件,该事件形式如下:
Private Sub Object_buttonMenuClick([index As Integer,]ByVal ByVal Button As ComctlLibButton)
End Sub
其中: index表示菜单按钮在控件数组中的索引;Button表示对菜单按钮对象的引用。详细说明参阅VB帮助。
对于字号组合框;虽然位置在工具栏,但实际是一个独立的控件;使用方法在第四章已介绍。此处,只要编写Combo1_Click事件过程即可,关于具体字号控制的代码,在下一节介绍。
8.2.4 状态栏
Statusbar控件能够提供一个长方条,通常在窗体的底部,也可通过Align属性决定状态栏出现的位置。状态栏一般用来显示系统信息和对用户的提示,如系统日期、软件版本、光 标的当前位置、键盘的状态等。
1.建立状态栏
设计时,在窗体上增加Statusbar控件后;打开其“属性页”对话框,选择“窗格”标签, 见图259就可进行所需的设计,其中:
“插入窗格”按钮:在状态栏增加新的窗格,最多可分成16个窗格;
“索引”、“关键字”分别表示每个窗格的编号和标识;
“文本”窗格上显本的文本;
“测览”可插入图像,图像文件的扩展名为“.ico”或“.bmp”;
“样式”下拉列表框中的各常数指定系统提供的显示信息。
本例设置了5个窗格,见图8.10,各窗格属性设置见表8.5。
表8.5 各窗格(Panel)主要属性设置
索引
(Index) 样式
(Style) 文本和/或位图
(Text) 说 明
1 sbrText 光标位置 显示提示
2 sbrText   运行是获得当前光标位置的值
3 sbrTime Time.bmp 显示当前时间和时钟图像
4 sbrCaps   显示当前大小写控制状态
5 sbrIns   显示插入控制状态

图8.9 状态栏“窗格”标签对话框

图8.10 设置的状态栏效果
2.运行时改变状态栏
运行时,能重新设置窗格Panel对象以反映不同的功能,这些功能取决于应用程序的状态和各控制键的状态。有些状态要通过编程实现,有些系统己具备。本例中第2个窗格的值要通过编程实现,动态地反映光标在文本框中的位置,第3-5窗格不必编程。由于 RichTextBox1控件在子窗体,而Statusbar控件在MDI体,子窗体代码段如下:
Private Sub RichTextBox1_Click()
Private Sub RichTextBox1_Click()
'当单击文本框时,当前光标位置在状态栏的第2窗格显示'
frmMDI.StatusBar1.Panels(2).Text = RichTextBox1.SelStart
End Sub
运行时还可以控制状态栏显示与否。本例“选项”菜单下的“√状态栏”项选中, 表示显示状态栏;当未选中(“状态栏”前 无“√”符号时),状态栏不显示,见图8.11。 对应的代码段如下:
Private Sub mnuStatus_Click()
If mnuStatus.Checked Then
frmMDI.StatusBar1.Visible = 0
mnuStatus.Checked = 0
Else
frmMDI.StatusBar1.Visible = 1
mnuStatus.Checked = 1
End If
End Sub

图8.ll 状态拦不显示
返回本章开头到本章末尾
8.3 RichTextBox控件 上一节下一节
RichTextBox控件可用于输入和编辑文本,它同时提供了比常规的TextBox控件更高级的格式特性。
从前几章可以知道,对Text控件只能进行单一的文字格式设置。使用RichTextBox控件可以实现多种文字格式、段落等的设置,还可以插入图形的功能,可真正构成一个像Word一样的字处理软件。
要使用RichTextBox控件,必须打开“部件”对话框,选择“Microsoft Rich Textbox Controls 6.0”将控件添加到工具箱。
1. 文件操作方法.
用 LoadFile和SaveFile方法可以方便地为 RichTextBox控件打开或保存文件。
(1)LoadFile方法
LoadFile方法能够将RTF文件或文本文件装入控件,其形式如下:
对象.LoadFile 文件标识符[,文件类型]
其中:文件类型取值0或rtfRTF时为RTF文件(缺省):取1或rtfTexT时为文本文件。
例如,前面多次调用FileOpenProc过程,用来打开RTF或TXT文件。过程存放在标准模块中,其中利用CommonDialog控件提供路径名。
Public Sub FileOpenProc()
If frm.MDI.ActiveForm Is Nothing Then FileNewProc '若无子窗体则新建
With frmMDI.ActiveForm
.CommonDialog1.Filter=”RTF文件(“*.rtf)|*.rtf|TXT文件(*.txt)|*.txt”
.CommonDialog1.Action=1
If.CommonDialogl.FilterIndex=1 Then 'RTF格式文件
RilchTextBox1.LoadFi1e.CommonDialog1.FileName
Else  'TXT格式文件
RlchTextBoxlloadFi]eCommonDaloglTileName,l
End If   '文件名显示在于窗体标题栏
.Caption=.CommonDialog1.FileName
End With
End Sub
(2)SaveFile方法
SaveFile方法能够将控件中的文档保存为RTF文件或文本文件,其形式如下。
对象.SaveFile(文件标识符[,文件类型])
下面语句把文档以RTF格式保存在C盘My子目录的Test1.txt文件
RichTextBox1.SaveFile(“C:\My\Test1.txt’,rtfTEXT)
完整的保存文件的FileSaveProc过程可参照FileOpenProc过程,请读者自行完成。
2常用格式化属性
RichTextBox控件提供了一些属性,可对该控件中任何部分的文本使用不同的格式。例如可以将文本变为粗体或斜体,改变文本的颜色,创建上标或下标。可以调整段落的左右缩进值,还可以使用悬挂式缩进。为压缩篇幅,表256列出了常用格式化属性,更详细的介绍见VB帮助。
表8.6 格式化属性
分 类
属  性
值类型
说  明
选中文本
SeText, SelStart, SelLenth
意义同Text控件对应属性
字体、字号
SelfontName, SelFontSize
同上
字型
SelBold, SclItalic
SetUndenine Selstrikethru
逻辑量
粗体 斜体
下划线 删除线
上、下标
SelCharOffset
整型
>0上标  <0下标
以Twip为单位
颜色
SelColor
整型
编排
SelIndent elRightIndent
SelHangingIndent
数值型
缩排单位以ScalMode决定
对齐方式
SelAlignment
整型
0左 1右 2中
3应用
(1)利用工具栏格式化
例如,利用上节设计的工具栏,对其中的字体、字型和对齐按钮进行编程,有关代码如下:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLibButton)
With ActiveForm.ActiveContrl
Select Case Button.Key
Case "TBold"   '   是否粗体
.SeIBold=Not.SelBold
Case  "TUnderline"
.SelUnderline=Not.SelUnderline   '   是否下划线
Case "TItalic"
.SelItalic=Not.SelItalic         '是否斜体
Case "TLeft"
.SelAlignment=0        '左对齐
Case "TRight"
.SelAlignment=1  '右对齐
Case 'TCenter"
.SelAlignment=2    '居中
End Select
End With
End Sub
若要利用工具栏的字号组合框进行所选文本的字体设置,则有关程序如下:
Private sub Combo1.CliCk()
ActiveForm.ActiveControl.SelFontsize=Val(Combo1.Text)
End Sub
程序运行效果见图8.12。

图8.12 格式化效果
(2)利用菜单命令格式化
若要利用“格式化”菜单的“字体”命令,对选中的文本进行格式化,程序段如下:
Private Sub mnuFont_Click()
With frmMDI.ActiveForm.CommonDialog1
.Flags = cdlCFBoth + cdlCFEffects
.FontSize = RichTextBox1.SelFontSize
.Action = 4  '打开字体对话框,设置所需的字体格式
End With
With frmMDI.ActiveForm.RichTextBox1
'将“字体”对话框设置的字体作用于RichTextBoxl控件选中的文本
.SelFontName = CommonDialog1.FontName
.SelFontSize = CommonDialog1.FontSize
.SelBold = CommonDialog1.FontBold
.SelItalic = CommonDialog1.FontItalic
.SelUnderline = CommonDialog1.FontUnderline
.SelStrikeThru = CommonDialog1.FontStrikethru
End With
End Sub
注意:若要将选中文本的格式在打开对话框中显示,则在打开“字体”对话框前,将RichTextBox1控件选中的文本格式属性赋值给Commondialog控件对应的属性。例如字号属性设置为:
ConunonDialog1.FontSize=RichTextBox1.FontSize
(3)插入图像
在RichTextBox控件中可插入(*.bmp)的图像文件,形式如下:
对象.OLEObjects.Add[索引],[关键字],文件标识符
其中:OLEObjects是集合,包含一组添加到RichTextBox控件的对象;
“索引”和“关键字”表示添加的元素编号和标识,可省略,但逗号不能省。
例如:RichTextBox1.OLEObects.Add,,"C:\Windows\circles.bmp"
下面程序段是“选项”菜单“插入图片”项的对应过程,效果见图8.1。
Private Sub mnuPicture_Click()
With frmMDI.ActiveForm.CommonDialog1
.Filter = "*.bmp|*.bmp|*.ico|*.ico"
.Action = 1
End With
frmMDI.ActiveForm.RichTextBox1.OLEObjects.Add , ,  _
frmMDI.ActiveForm.CommonDialog1.FileName
End Sub
至此,围绕着例8.1“文本编辑器”的实例,较详细地介绍了可视界面程序设计的方法,程序清单在 V6B08-01.vbp。更完整的例子可参阅VB 6.0示例,即..Samples\vb98\mdi子目录下的Mdinote多文档界面编辑器的例子。
返回本章开头到本章末尾

8.4 应用程序向导 上一节
使用过Microsoft Office套件的用户都知道,虽然各种应用程序功能不同,但界面都相同,即都由莱单、工具栏、多文档界面构成。为了提高应用程序开发的效率,VB提供了“VB应用程序向导”这 一非常方便的程序生成器,用来生成-个应用程序的界面,图8.13是生成的一个多文档编辑器。
在VB中选择“文件/新建工程”命令,就会打开“新建工程”对话框,见图8.14,打开“VB应用程序向导”,然后在该向导的 一步步带领下设计应用程序的界面。
8.4.1 选择操作界面

图8.13 应用程序向导
“VB应用程序向导”提供了三种常用的操作界面,见图8.15。
(1)多文档界面,可同时打开多个文档,如 Office应用程序。
(2)单文档界面,只能打开一个文档,如Notapade文本编辑器。
(3)资源管理器样式,类似于Windows资源管理器一样,有TreeView等控件。

图8.14 VB应用程序向导

图8.15 选择应用程序操作界面
8.4.2 选用菜单和莱单项
向导提供了文件、编辑、视图、工具、窗口、帮助六个菜单名,每个菜单名下有若干个菜单项,见图8.16。用户可自由地选取、取消某个菜单或子菜单项。由此可见,应用程序向导替用户省去了编辑菜单的时间。
8.4.3 选取工具栏按钮
同样应用程序向导提供的工具栏有13个按钮(除分隔按钮外),见图8.17。用户也可根据需要增加(右移所选按钮)或删除(左移所选按钮)按钮。

图8.16 选取菜单和子菜单项

图8.17 选取工具栏按钮
8.4.4 生成WWW浏览器
在“Internet连接”对话框中,应用程序向导还提供了是否访问Internet的选项,若选中,可生成一个小型的WWW测览器,效果见图8.18。
向导还提供了加入其他窗体,使应用程序更完美;还提供了与数据库的链接等。
说明:
(1)当使用向导的过程中,任何时候单击“完成”按钮,表示以默认的方式快速生成应用程序。
(2)生成的应用程序主要节省了用户设计界面的工作量,仅仅完成了应用程序的框架,很多过程还是要用户根据实际问题加以完善。