VB 高级应用
VB 高级应用. 项目四 文字处理程序 项目五 图形控件与绘图操作 项目六 多媒体播放器程序 项目七 使用 ADO 编写销售程序. 项目四 文字处理程序. 掌握 MDI 应用程序设计和编程。 掌握菜单、图像列表框、工具栏和状态栏控件的基本属性和事件。 掌握 RichTextBox 控件的初步应用。 掌握通用对话框控件的基本属性和应用。 掌握 Clipboard 对象(剪贴板)的使用。. 活动一、多文档界面. 我们经常使用的 Windws 的记事本,是单文档界面,在这个界面中,当打开一个文件时,自动关闭原来的文件。同一个时刻,只能处理一个文档。
VB 高级应用
E N D
Presentation Transcript
VB高级应用 项目四 文字处理程序 项目五 图形控件与绘图操作 项目六 多媒体播放器程序 项目七 使用ADO编写销售程序
项目四 文字处理程序 • 掌握MDI应用程序设计和编程。 • 掌握菜单、图像列表框、工具栏和状态栏控件的基本属性和事件。 • 掌握RichTextBox控件的初步应用。 • 掌握通用对话框控件的基本属性和应用。 • 掌握Clipboard对象(剪贴板)的使用。
活动一、多文档界面 • 我们经常使用的Windws的记事本,是单文档界面,在这个界面中,当打开一个文件时,自动关闭原来的文件。同一个时刻,只能处理一个文档。 • 多文档界面(MDI,Multiple Document Interface)允许创建在单个容器窗体中包含多个窗体的应用程序。绝大多数基于Windows的大型应用程序都是多文档界面,例如,Microsoft Word和Microsoft Excel等。多文档界面可同时打开多个文档,它简化了文档之间的信息交换。
一、多文档界面的特性 • 多文档界面由父窗体和子窗体组成,父窗体也称MDI窗体,是作为子窗体的容器;子窗体也称文档窗口,显示各自文档。图是一个多文档应用程序,它由一个父窗体和三个子窗口组成。多文档界面有如下特性: • (1)所有子窗体均显示在MDI窗体的工作区中。用户可以改变、移动子窗体的大小,但被限制在MDI窗体中。 • (2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在任务栏中。当最小化MDI窗体时,所有的子窗体也被最小化,只有MDI窗体的图标出现在任务栏中。 • (3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏上。 • (4)MDI窗体和子窗体都可以有各自的菜单,当子窗体加载时覆盖MDI窗体的菜单。
二、创建和设计MDI窗体 • 开发多文档界面的一个应用程序至少需要两个窗体:一个(只能一个)MDI窗体和一个(或若干个)子窗体。在不同窗体中共用的过程、变量应存放在标准模块中。 • MDI窗体是子窗体的容器,该窗体中一般有菜单栏、工具栏、状态栏,不可以有文本框等控件。 • 1.创建MDI窗体 • 用户要建立一个MDI窗体,可以选择“工程”菜单中的“添加MDI窗体”命令即可。 • 2.设计MDI窗体 • 设计MDI窗体时,可以建立菜单栏、工具栏、状态栏。
三、创建和设计MDI子窗体 • MDI子窗体主要是显示应用程序的文档,通常,在该窗体上应用有文本框,也可以有菜单栏以及工具栏。 • 1.创建MDI子窗体 • MDI子窗体是一个MDIChild属性为True的普通窗体。因此,要创建一个MDI子窗体,应先创建一个新的普通窗体,然后将它的MDIChild属性设置为True即可。在工程管理窗口中,可以看到,子窗体的图标与普通窗体的图标不同。若要建立多个子窗体,则重复进行上述操作。
三、创建和设计MDI子窗体 (1)创建对象变量 • 创建以文档为中心的应用程序,为了在运行时建立若干个子窗体存取不同的文档,一般先创建一个子窗体作为这个应用程序文档的模板,然后通过调用对象变量来创建其他子窗体。创建对象变量用下面的语句。 • 格式: Dim 〈变量名〉 As New〈对象类型〉 • 功能:声明对象变量。 • 例如:如果已建立了一个Name为“frmChild”的子窗体,则: • Dim NewDoc As New frmChild • 就会为“frmChild”建立一个新实例,新实例具有与“frmChild”窗体相同的属性、控件、代码。 • 说明:New关键字后应是“类名”。实际上,在工程中添加的窗体有着特殊性,它既是窗体类,也是窗体对象,与在窗体上建立的控件具有不同的性质。 • 例如: • Dim NewDoc As New Form1 '声明并创建一个NewDoc窗体变量 • NewDoc.Show '新窗体显示在屏幕上
三、创建和设计MDI子窗体 (2)创建MDI子窗体的代码 • 窗体程序运行时建立一个子窗体的程序代码如下: • Dim No As Integer • Public Sub FileNewProc() • Dim NewDoc As New frmChild • No=No+1 • NewDoc.Caption="编辑区" • NewDoc.Show '显示子窗体 • End Sub • 如果多次调用FileNewProc过程,则可以产生多个“frmChild”的子窗体。 例:设计一个简易的书写器。
四、MDI窗体的属性和方法 • (1)特有属性 • AutoShowChildren属性:为True时,表示加载子窗体时将自动显示该子窗体。为False时,需要使用Show方法显示子窗体。 • ActiveForm属性:表示MDI窗体中的活动子窗体。 • (2)方法 • Arrange方法:设置子窗体的排列方式。 • 格式:对象.Arrange 值 • 值有: 0—vbCascade,层叠排列 1—vbTileHorizontal,水平平铺排列 2—vbTileVertical,垂直平铺排列 3—vbArrangeIcons,重排最小化子窗体的图标
用Me关键字来引用当前代码正在运行的窗体。 五、应用MDI窗体注意事项 • MDI窗体为使用VB进行应用程序的开发提供了高效、多功能的良好平台,采用MDI窗体已是非常普遍的技术手段。为了提高其性能,在使用MDI编写应用程序时要注意以下事项: • (1)应尽量少地使用MDI子窗体。因为,每加载一个子窗体,就要占据较多的内存及系统资源。过多地使用子窗体,会造成内存和系统资源不够,影响程序运行的速度。 • (2)在MDI应用程序的设计中,若在子窗体中,尽量用Me关键字表示当前窗体;而在MDI窗体中,则应使用ActiveForm属性。 • (3)对于在子窗体菜单项、MDI菜单项或工具栏上都要执行的相同功能,应以过程的形式存放在标准模块(Model)中,供各模块共享。 • (4)如果应用程序中所使用的是不可视控件,如Timer、CommonDialog控件等,都应放在MDI窗体上,使子窗体也可以使用这些控件。
活动二、菜单的设计 • 教学目标: • 1、下拉式菜单的设计 • 2、弹出式菜单的设计 菜单可分为下拉式菜单和弹出式菜单两种基本类型。 菜单控件只包含一个事件,即单击事件。
菜单项 下拉式菜单系统的组成结构 : 主菜单名 快捷键 热键 下级子菜单标记 主菜单栏 子菜单名 分隔线
设计菜单的步骤 • 设计菜单的操作步骤如下: • (1)建立窗体,添加控件。 • (2)打开“菜单编辑器”窗口。 • (3)设置各菜单项属性。 • (4)为相应的菜单命令添加事件过程。
一、菜单编辑器的使用 • 打开菜单编辑器 • 工具/菜单编辑器(Ctrl+E); • 窗体上的快捷菜单/菜单编辑器。 • 菜单编辑器界面 • 菜单编器窗口分为三个部分,即数据区、编辑区和菜单项显示区。 要加一条分隔线,应在标题处输入减号(-) 常用属性: 1. 标题(Caption) 热键 前面加& 2. 名称(Name)文本框 分隔符也应有名称 3. 快捷键(Shortcut) 菜单名没有快捷键 4. 复选(Checked) 检查框 TRUE 有 5. 有效(Enabled) 检查框 6. 可见(Visible) 检查框 (数据区) 菜单项属性 操作按钮 (编辑区) 菜单列表框 (菜单项 显示区)
二、菜单设计实例 【例1】菜单设计。建立一个如图10-3所示的菜单,用户可以通过选择菜单中的菜单项改变文本框中内容的外观。
Private Sub sh_Click() Text1.FontSize = 12 End Sub Private Sub st_Click() Text1.FontName = "宋体" End Sub Private Sub xhx_Click() Text1.FontUnderline = Not Text1.FontUnderline Xhx.Checked=Not xhx.Checked End Sub Private Sub xt_Click() Text1.FontItalic = Not Text1.FontItalic Xt.Checked=Not Xt.Checked End Sub • 程序如下: • Private Sub ct_Click() • Text1.FontBold = Not Text1.FontBold • Ct.Checked=Not Ct.Checked • End Sub • Private Sub er_Click() • Text1.FontSize = 20 • End Sub • Private Sub ht_Click() • Text1.FontName = "黑体" • End Sub • Private Sub lsh_Click() • Text1.FontName = "隶书" • End Sub • Private Sub quit_Click() • End • End Sub
三、菜单项的有效性 • 控制菜单中的某些菜单项能根据执行条件的不同进行动态变化,即当条件满足时可以执行,否则不能执行。只要把一个菜单项的“有效”属性设置为False,就可以使菜单项的“有效”属性失效,运行后该菜单项变为灰色;为了使一个失效的菜单项变为有效,只要把它的“有效”属性重新设置True即可实现。 • 例如:使子菜单“宋体”设置“失效”,则: • st.Enabled=False • 使子菜单“隶书”设置“有效”,则: • lsh.Enabled=True
四、菜单项标记 • 标记菜单项标记通过菜单设计窗口中的“复选”属性设置,当该属性为True时,相应的菜单项前有“√”标记;如果该属性为False,则相应的菜单项前没有“√”标记。但是,菜单项标记通常是动态地加上或取消的,因此应在程序代码中根据执行情况设置。 • 例:设置“粗体”菜单项前有标记 • ct.checked=true
五、弹出式菜单(快捷菜单) 弹出式菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。 显示位置取决于单击鼠标键时指针的位置。 建立弹出式菜单通常有两步: 第一步:用菜单编辑器建立菜单,操作与前面介绍的基本相同,唯一的区别是把菜单名(即主菜单项)的“可见”属性设置为False(子菜单项不要设置为False)。 第二步:然后用PopupMenu方法弹出显示。通常该方法放在MouseDown事件中。 PopupMenu方法用来显示弹出式菜单,其格式为: [对象.] PopupMenu 菜单名 [,Flags[,x[,y[,BoldCommand]]]]
Flag参数:表示弹出的位置和触发的键。分两组:一组用于指定弹出的菜单位置,另一组用于指定触发菜单命令的键。Flag参数:表示弹出的位置和触发的键。分两组:一组用于指定弹出的菜单位置,另一组用于指定触发菜单命令的键。 • Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) • If Button = 2 Then • PopupMenu EditMenu, vbPopupMenuCenterAlign or vbPopupMenRightButton • end if • End Sub 或 PopupMenu EditMenu, 4+8
【例2】我们将例1中的“字形”菜单的内容作为弹出式菜单的内容。【例2】我们将例1中的“字形”菜单的内容作为弹出式菜单的内容。 我们只需在代码窗口添加如下代码: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Button = 2 Then PopupMenu zx End If End Sub 运行程序,鼠标右键单击窗体,即可弹出“字形”菜单的菜单内容。如果不想在窗体顶部显示“字形”菜单,则可在窗体编辑器中将zx主菜单项的“可见”属性设为False即可。
活动三、工具栏和状态栏 • 工具栏为用户在应用程序时,快速访问最常用的菜单命令提供了很大的方便,进一步增加应用程序的菜单界面,已经成为Windows应用程序的标准功能。制作工具栏有两种方法:一是手工制作,即利用图形框和命令按钮,这种方法比较繁琐;另一种方法是将ToolBar、ImageList组合使用,使得工具栏制作与菜单制作一样简单易学。状态栏StatusBar可显示各种状态信息。 • 使用这些控件必须打开“部件”对话框,选择“Microsoft Windows Common Controls 6.0”,将控件添加到工具箱。 • 在多文档界面(MDI)的应用程序开发中,工具栏和状态栏应在MDI父窗体中。
创建工具栏的步骤: • (1)在ImageList控件中添加所需的图像 • (2)在ToolBar控件中创建Button对象。 • (3)在ButtonClick事件中用Select Case语句对各按钮进行相应的编程。
一、图像列表框 • 图像列表框控件(ImageList)不能单独使用,它专门为其他控件提供图像库,是一个图像容器控件。工具栏按钮的图像就是通过ToolBar控件从ImageList的图像库中获得的。 1.常用属性 • (1)Index属性 • 该属性设置或返回控件在控件数组中的标识号。 • (2)ListImages属性 • 该属性返回对图像列表控件中“ListImage 对象”的集合的引用。
一、图像列表框 2.“ListImage对象”的常用属性 “ListImage对象”是任意大小的位图,是组成“ListImages集合”的成员。常用属性如下: • (1)Count属性 • 该属性返回集合中对象的数目。 • (2)Index属性 • 该属性返回或设置一个数,它惟一指定集合中的对象。 • (3)Key属性 • 该属性返回或设置字符串,在集合中惟一地标识一个成员。 • (4)Picture属性 • 该属性返回或设置控件中要显示的图片。
一、图像列表框 • 3.图像列表框的使用 在ToolBar控件上添加ImageList控件(如ImageList1控件)后,用右键单击ImageList1控件,在弹出的快捷菜单中选择“属性”命令,打开“属性页”对话框,选择其中的“图像” 选项卡。 关键字(Key):所有图像的Key属性都不相同。 索引(Index): 第一个图像的Index值为1,第二个为2,依此类推。 在ToolBar中引用图像文件的扩展名为: .ico、.bmp、.gif、.jpg等。
一、图像列表框 【例】建立一个图像列表框控件ImageList1,装入12个图像。 • 4.图像列表框控件的方法: • (1) Add 方法 • 格式:[对象.] ListImages.Add [Index],[Key],Image • 功能:往图像列表框控件中的图像集合插入索引为Index、关键字为Key的图像Image。 • (2) Remove 方法 • 格式: [对象.] ListImages.Remove Index • (3) Picture 属性 • 格式: [对象.] ListImages(Index | Key ).Picture • 属性值:返回图像。
二、工具栏 • Toolbar工具栏控件包含一个按钮集合(Buttons),利用该控件我们可以很方便地将经常使用的命令建成工具栏按钮,并为按钮指定图像、文字和工具提示,从而构成功能全面的工具栏。使用工具栏(ToolBar)可以建立多个按钮,每个按钮的图像来自ImageList图像列表框对象中插入的图像。
二、工具栏 1、为工具栏连接图像 • 右键单击Toolbar控件,选择“属性”命令打开如图所示的Toolbar 控件“属性页”对话框,选择“通用”选项卡。 ToolBar与ImageList的连接 当工具栏按钮变为不可用时(Enabled为False)按钮图像所在的图像列表ImageList 工具栏的外观 按钮的外观
二、工具栏 表12-12 按钮样式 2、为工具栏增加按钮 • 打开“属性页”上的“按钮”选项卡,单击“插入按钮”,可以在工具栏上插入按钮。 索引(Index)和关键字(Key)为按钮的编号和标识,在ButtonClick事件中引用; 按钮的样式(Style),共6种 当按钮被按下时,值为1,否则为0 图像(Image) :使用ImageList对象中的图像,值可以是Key或Index Toolbar控件“按钮”选项卡
二、工具栏 3. 响应Toolbar控件的事件 • ToolBar控件常用的事件有两个:ButtonClick和ButtonMenuClick。前者对应按钮样式为0-2,后者对应样式为5的菜单按钮。 • 由于工具栏上的按钮为控件数组,可以利用数组的索引(Index属性)或关键字(Key属性)来识别被单击的按钮,再使用Select Case语句完成代码编制。 • (1)用索引Index确定按钮 • Private Sub Toolbar1-ButtonClick(ByVal Button As ComctlLib.Button) • Select Case Button.Index • Case 1 '按了新建按钮,执行新建过程,该过程代码在标准模块 • FileNewProc • Case 2 '按了打开按钮,执行打开过程 • FileOpenProc • …… • End Select • End Sub
二、工具栏 • (2)用关键字Key确定按钮 • 如下程序段与(1)程序段作用相同,仅用Button.Key代替Button.Index。 • Private Sub Toolbar1-ButtonClick(ByVal Button As ComctlLib.Button) • Select Case Button.Key • Case "TNew" '按了新建按钮,执行新建过程 • FileNewProc • Case "TOpen" '按了打开按钮,执行打开过程 • FileOpenProc • …… • End Select • End Sub • 使用Button.Key程序可读性好;而且当按钮有增删时,使用关键字不影响程序。
二、工具栏 • 当单击菜单按钮时,响应ButtonMenuClick事件,该事件形式如下: Private Sub Object-ButtonMenuClick([Index As Integer,]lByVal Button As ConctlLib.Button) …… End Sub • Index表示菜单按钮在控件数组中的索引;Button表示对菜单按钮对象的引用。 例:设计一个工具栏,由4个按钮组成,能实现改变标签的字体、字号、粗体和颜色功能。
三、状态栏 • 状态栏控件(StatusBar)用来显示系统的某些当前状态值。 • 状态栏控件是由Panel对象组成的,每一个Panel对象都能包含文本或图片。状态栏的外观是一组窗格,在程序中每一个窗格都作为Panel对象来访问。所有Panel对象组成Panels集合。状态栏最多能够包含16个Panel对象。利用其Style属性值中的一个值,程序就可以自动地显示公共数据,如日期、时间和键盘状态等。
三、状态栏 • 状态栏的建立 • 在设计时,在窗体上增加 StatusBar 控件,并在其属性页的“窗格”选项卡中进行必要的设置,以建立面板并定制它们的外观。 索引:从1开始编号,应用程序能够使用索引号访问各个窗格 Panel 对象的Text属性:显示的文本 Panel 对象的Key属性:可通过关键字访问窗格。 可插入图像 样式
三、状态栏 状态栏的Style属性
三、状态栏 • 状态栏的常用事件 • 状态栏的常用事件为:PanelClick • 当用户单击状态栏的某个窗格时,触发 PanelClick事件。 Private sub statusbar1_panelclick(byval Panel as panel) Select case panel.key case “b1” panel.text=“aaa” case “b2” panel.picture=load(“”) end selectend sub Panel参数指明了用户单击了哪个窗格,该参数由系统自动提供。
四、高级文本框控件(RichTextBox) • 高级文本框控件(RichTextBox)可用于输入和编辑文本,它同时提供了比常规的TextBox控件更高级的格式特性。 • 从前几章可以知道,对Text控件只能进行单一的文字格式设置。使用RichTextBox控件可以实现多种文字格式、段落等的设置,还可以插入图形,可真正构成一个像Word一样的字处理软件。 • 要使用RichTextBox控件,必须打开“部件”对话框,选择“Microsoft Rich TextBox Controls 6.0”,将控件添加到工具箱。
四、高级文本框控件(RichTextBox) • 1.文件操作方法 • 用LoadFile和SaveFile方法,可以方便地为RichTextBox控件打开或保存文件。 • (1)LoadFile方法 • 格式:对象.LoadFile 文件标识符[,文件类型] • 功能:LoadFile方法能够将RTF文件或文本文件装入控件中。 • 说明: • (1)文件标识符为被加载文件的文件名(包括路径)。 • (2)文件类型取值0或rtfRTF时为RTF文件(缺省)。 • (3)文件类型取1或rtfTEXT时为文本文件。 例:frmMDI.activeform.richtextbox1.loadfile “D:\my\t1.txt”,1
四、高级文本框控件(RichTextBox) • (2)SaveFile方法 • 格式:对象.SaveFile 文件标识符[,文件类型] • 功能:该方法能够将控件中的文档保存在RTF文件或文本文件中。 • 例如:下面语句把文档以文本文件格式保存在D盘My子目录的T1.txt文件中。 frmMDI.Activeform.RichTextBox1.SaveFile "D:\my\T1.txt",1
四、高级文本框控件(RichTextBox) • 2.常用属性 • RichTextBox控件提供了一些属性,可对该控件中任何部分的文本使用不同的格式。例如可以将文本变为粗体或斜体,改变文本的颜色,创建上标或下标。可以调整段落的左右缩进值,还可以使用悬挂式缩进。 • FileName属性:加载到高级文本控件中的文件名称。
四、高级文本框控件(RichTextBox) • 2.常用属性
四、高级文本框控件(RichTextBox) • 例:用RichTextBox控件,设计一个文本编辑器,利用工具栏格式化文本。
五、Clipboard对象 • Clipboard对象用于与Windows系统的剪切板进行交换数据,它使用户能够复制、剪切和粘贴应用程序中的文本和图形。 • Clipboard对象的方法: 1. Clear方法:用于清除剪贴板的内容。 • 格式: Clipboard.Clear 2. GetFormat方法:用于检测剪贴板中数据的格式。 • 格式: Clipboard.GetFormat(format) • 说明:format值有:1-文本;2-位图(.bmp文件) 3-位元(.wmf文件);8-与设备无关位图(DIB);9-调色板;&-HBF01(.RTF格式文本)
五、Clipboard对象 • 3.GetData方法:用于从剪贴板获取一个图形数据。 • 格式:Clipboard.GatData( [format] ) • format:可选,如果为0可省略,GetData自动使用适当的格式。如果Clipboard对象没有与期望的格式相匹配的图形,则返回空。 • 4.SetData方法:用于将图形数据传送到剪贴板中。 • 格式:Clipboard.SetData(data) • Data:放置在Clipboard对象中的图形,可以使用LoadPicture函数或控件的Picture属性。 • 5.GetText方法:用于从剪贴板获取一个文本数据。 • 格式:Clipboard.GetText(format) • format:可选,默认值为1。如果Clipboard对象没有与期望的格式相匹配的图形,则返回空。
五、Clipboard对象 • 6.SetText方法:用于将文本数据传送到剪贴板中。 • 格式:Clipboard.SetText(data,format) • data:被放置在剪贴板中的字符串数据。 • format:可选。指定文本格式。默认值为1。 • 例:用RichTextBox控件,设计一个文本编辑器,利用Clipboard对象实现编辑菜单功能(复制、剪切和粘贴)
六、计时器(Timer控件) • 计时器(Timer)控件是在应用程序中用来处理按一定时间间隔(Interval)触发事件的控件。在运行时不可见。 • 1、计时器有两个关键属性: • Enabled属性:当该属性为True时,定时器处于工作状态。而当 Enabled 被设置为 False 时,停止时钟工作。因此,定时器的 Enabled 属性并不同于其它对象的 Enabled 属性。 • Interval属性:计时器事件之间的时间间隔(毫秒数)。1秒=1000毫秒,Interval=0:屏蔽计时器。 • 2、计时器只有一个事件,即Timer事件。 • 只要 Timer 控件的 Enabled 属性被设置为 True 而且 Interval 属性值大于 0,则 Timer 事件以 Interval 属性值指定的时间间隔发生。
六、计时器(Timer控件) • 例1:利用计时器控件,在标签中显示系统时间。 • 例2:在文本编辑器实例中,利用计时器,动态改变剪切、复制、粘贴命令的有效性。