1 / 66

VB 高级应用

VB 高级应用. 项目四 文字处理程序 项目五 图形控件与绘图操作 项目六 多媒体播放器程序 项目七 使用 ADO 编写销售程序. 项目四 文字处理程序. 掌握 MDI 应用程序设计和编程。 掌握菜单、图像列表框、工具栏和状态栏控件的基本属性和事件。 掌握 RichTextBox 控件的初步应用。 掌握通用对话框控件的基本属性和应用。 掌握 Clipboard 对象(剪贴板)的使用。. 活动一、多文档界面. 我们经常使用的 Windws 的记事本,是单文档界面,在这个界面中,当打开一个文件时,自动关闭原来的文件。同一个时刻,只能处理一个文档。

Download Presentation

VB 高级应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VB高级应用 项目四 文字处理程序 项目五 图形控件与绘图操作 项目六 多媒体播放器程序 项目七 使用ADO编写销售程序

  2. 项目四 文字处理程序 • 掌握MDI应用程序设计和编程。 • 掌握菜单、图像列表框、工具栏和状态栏控件的基本属性和事件。 • 掌握RichTextBox控件的初步应用。 • 掌握通用对话框控件的基本属性和应用。 • 掌握Clipboard对象(剪贴板)的使用。

  3. 活动一、多文档界面 • 我们经常使用的Windws的记事本,是单文档界面,在这个界面中,当打开一个文件时,自动关闭原来的文件。同一个时刻,只能处理一个文档。 • 多文档界面(MDI,Multiple Document Interface)允许创建在单个容器窗体中包含多个窗体的应用程序。绝大多数基于Windows的大型应用程序都是多文档界面,例如,Microsoft Word和Microsoft Excel等。多文档界面可同时打开多个文档,它简化了文档之间的信息交换。

  4. 一、多文档界面的特性 • 多文档界面由父窗体和子窗体组成,父窗体也称MDI窗体,是作为子窗体的容器;子窗体也称文档窗口,显示各自文档。图是一个多文档应用程序,它由一个父窗体和三个子窗口组成。多文档界面有如下特性: • (1)所有子窗体均显示在MDI窗体的工作区中。用户可以改变、移动子窗体的大小,但被限制在MDI窗体中。 • (2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在任务栏中。当最小化MDI窗体时,所有的子窗体也被最小化,只有MDI窗体的图标出现在任务栏中。 • (3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏上。 • (4)MDI窗体和子窗体都可以有各自的菜单,当子窗体加载时覆盖MDI窗体的菜单。

  5. 二、创建和设计MDI窗体 • 开发多文档界面的一个应用程序至少需要两个窗体:一个(只能一个)MDI窗体和一个(或若干个)子窗体。在不同窗体中共用的过程、变量应存放在标准模块中。 • MDI窗体是子窗体的容器,该窗体中一般有菜单栏、工具栏、状态栏,不可以有文本框等控件。 • 1.创建MDI窗体 • 用户要建立一个MDI窗体,可以选择“工程”菜单中的“添加MDI窗体”命令即可。 • 2.设计MDI窗体 • 设计MDI窗体时,可以建立菜单栏、工具栏、状态栏。

  6. 三、创建和设计MDI子窗体 • MDI子窗体主要是显示应用程序的文档,通常,在该窗体上应用有文本框,也可以有菜单栏以及工具栏。 • 1.创建MDI子窗体 • MDI子窗体是一个MDIChild属性为True的普通窗体。因此,要创建一个MDI子窗体,应先创建一个新的普通窗体,然后将它的MDIChild属性设置为True即可。在工程管理窗口中,可以看到,子窗体的图标与普通窗体的图标不同。若要建立多个子窗体,则重复进行上述操作。

  7. 三、创建和设计MDI子窗体 (1)创建对象变量 • 创建以文档为中心的应用程序,为了在运行时建立若干个子窗体存取不同的文档,一般先创建一个子窗体作为这个应用程序文档的模板,然后通过调用对象变量来创建其他子窗体。创建对象变量用下面的语句。 • 格式: Dim 〈变量名〉 As New〈对象类型〉 • 功能:声明对象变量。 • 例如:如果已建立了一个Name为“frmChild”的子窗体,则: • Dim NewDoc As New frmChild • 就会为“frmChild”建立一个新实例,新实例具有与“frmChild”窗体相同的属性、控件、代码。 • 说明:New关键字后应是“类名”。实际上,在工程中添加的窗体有着特殊性,它既是窗体类,也是窗体对象,与在窗体上建立的控件具有不同的性质。 • 例如: • Dim NewDoc As New Form1 '声明并创建一个NewDoc窗体变量 • NewDoc.Show '新窗体显示在屏幕上

  8. 三、创建和设计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”的子窗体。 例:设计一个简易的书写器。

  9. 四、MDI窗体的属性和方法 • (1)特有属性 • AutoShowChildren属性:为True时,表示加载子窗体时将自动显示该子窗体。为False时,需要使用Show方法显示子窗体。 • ActiveForm属性:表示MDI窗体中的活动子窗体。 • (2)方法 • Arrange方法:设置子窗体的排列方式。 • 格式:对象.Arrange 值 • 值有: 0—vbCascade,层叠排列 1—vbTileHorizontal,水平平铺排列 2—vbTileVertical,垂直平铺排列 3—vbArrangeIcons,重排最小化子窗体的图标

  10. 用Me关键字来引用当前代码正在运行的窗体。 五、应用MDI窗体注意事项 • MDI窗体为使用VB进行应用程序的开发提供了高效、多功能的良好平台,采用MDI窗体已是非常普遍的技术手段。为了提高其性能,在使用MDI编写应用程序时要注意以下事项: • (1)应尽量少地使用MDI子窗体。因为,每加载一个子窗体,就要占据较多的内存及系统资源。过多地使用子窗体,会造成内存和系统资源不够,影响程序运行的速度。 • (2)在MDI应用程序的设计中,若在子窗体中,尽量用Me关键字表示当前窗体;而在MDI窗体中,则应使用ActiveForm属性。 • (3)对于在子窗体菜单项、MDI菜单项或工具栏上都要执行的相同功能,应以过程的形式存放在标准模块(Model)中,供各模块共享。 • (4)如果应用程序中所使用的是不可视控件,如Timer、CommonDialog控件等,都应放在MDI窗体上,使子窗体也可以使用这些控件。

  11. 活动二、菜单的设计 • 教学目标: • 1、下拉式菜单的设计 • 2、弹出式菜单的设计 菜单可分为下拉式菜单和弹出式菜单两种基本类型。 菜单控件只包含一个事件,即单击事件。

  12. 菜单项 下拉式菜单系统的组成结构 : 主菜单名 快捷键 热键 下级子菜单标记 主菜单栏 子菜单名 分隔线

  13. 设计菜单的步骤 • 设计菜单的操作步骤如下: • (1)建立窗体,添加控件。 • (2)打开“菜单编辑器”窗口。 • (3)设置各菜单项属性。 • (4)为相应的菜单命令添加事件过程。

  14. 一、菜单编辑器的使用 • 打开菜单编辑器 • 工具/菜单编辑器(Ctrl+E); • 窗体上的快捷菜单/菜单编辑器。 • 菜单编辑器界面 • 菜单编器窗口分为三个部分,即数据区、编辑区和菜单项显示区。 要加一条分隔线,应在标题处输入减号(-) 常用属性: 1. 标题(Caption) 热键 前面加& 2. 名称(Name)文本框 分隔符也应有名称 3. 快捷键(Shortcut) 菜单名没有快捷键 4. 复选(Checked) 检查框 TRUE 有 5. 有效(Enabled) 检查框 6. 可见(Visible) 检查框 (数据区) 菜单项属性 操作按钮 (编辑区) 菜单列表框 (菜单项 显示区)

  15. 二、菜单设计实例 【例1】菜单设计。建立一个如图10-3所示的菜单,用户可以通过选择菜单中的菜单项改变文本框中内容的外观。

  16. 菜单项及其属性设置:

  17. 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

  18. 三、菜单项的有效性 • 控制菜单中的某些菜单项能根据执行条件的不同进行动态变化,即当条件满足时可以执行,否则不能执行。只要把一个菜单项的“有效”属性设置为False,就可以使菜单项的“有效”属性失效,运行后该菜单项变为灰色;为了使一个失效的菜单项变为有效,只要把它的“有效”属性重新设置True即可实现。 • 例如:使子菜单“宋体”设置“失效”,则: • st.Enabled=False • 使子菜单“隶书”设置“有效”,则: • lsh.Enabled=True

  19. 四、菜单项标记 • 标记菜单项标记通过菜单设计窗口中的“复选”属性设置,当该属性为True时,相应的菜单项前有“√”标记;如果该属性为False,则相应的菜单项前没有“√”标记。但是,菜单项标记通常是动态地加上或取消的,因此应在程序代码中根据执行情况设置。 • 例:设置“粗体”菜单项前有标记 • ct.checked=true

  20. 五、弹出式菜单(快捷菜单) 弹出式菜单是独立于窗体菜单栏而显示在窗体内的浮动菜单。 显示位置取决于单击鼠标键时指针的位置。 建立弹出式菜单通常有两步: 第一步:用菜单编辑器建立菜单,操作与前面介绍的基本相同,唯一的区别是把菜单名(即主菜单项)的“可见”属性设置为False(子菜单项不要设置为False)。 第二步:然后用PopupMenu方法弹出显示。通常该方法放在MouseDown事件中。 PopupMenu方法用来显示弹出式菜单,其格式为: [对象.] PopupMenu 菜单名 [,Flags[,x[,y[,BoldCommand]]]]

  21. 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

  22. 【例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即可。

  23. 活动二实例

  24. 活动三、工具栏和状态栏 • 工具栏为用户在应用程序时,快速访问最常用的菜单命令提供了很大的方便,进一步增加应用程序的菜单界面,已经成为Windows应用程序的标准功能。制作工具栏有两种方法:一是手工制作,即利用图形框和命令按钮,这种方法比较繁琐;另一种方法是将ToolBar、ImageList组合使用,使得工具栏制作与菜单制作一样简单易学。状态栏StatusBar可显示各种状态信息。 • 使用这些控件必须打开“部件”对话框,选择“Microsoft Windows Common Controls 6.0”,将控件添加到工具箱。 • 在多文档界面(MDI)的应用程序开发中,工具栏和状态栏应在MDI父窗体中。

  25. 创建工具栏的步骤: • (1)在ImageList控件中添加所需的图像 • (2)在ToolBar控件中创建Button对象。 • (3)在ButtonClick事件中用Select Case语句对各按钮进行相应的编程。

  26. 一、图像列表框 • 图像列表框控件(ImageList)不能单独使用,它专门为其他控件提供图像库,是一个图像容器控件。工具栏按钮的图像就是通过ToolBar控件从ImageList的图像库中获得的。 1.常用属性 • (1)Index属性 • 该属性设置或返回控件在控件数组中的标识号。 • (2)ListImages属性 • 该属性返回对图像列表控件中“ListImage 对象”的集合的引用。

  27. 一、图像列表框 2.“ListImage对象”的常用属性 “ListImage对象”是任意大小的位图,是组成“ListImages集合”的成员。常用属性如下: • (1)Count属性 • 该属性返回集合中对象的数目。 • (2)Index属性 • 该属性返回或设置一个数,它惟一指定集合中的对象。 • (3)Key属性 • 该属性返回或设置字符串,在集合中惟一地标识一个成员。 • (4)Picture属性 • 该属性返回或设置控件中要显示的图片。

  28. 一、图像列表框 • 3.图像列表框的使用 在ToolBar控件上添加ImageList控件(如ImageList1控件)后,用右键单击ImageList1控件,在弹出的快捷菜单中选择“属性”命令,打开“属性页”对话框,选择其中的“图像” 选项卡。 关键字(Key):所有图像的Key属性都不相同。 索引(Index): 第一个图像的Index值为1,第二个为2,依此类推。 在ToolBar中引用图像文件的扩展名为: .ico、.bmp、.gif、.jpg等。

  29. 一、图像列表框 【例】建立一个图像列表框控件ImageList1,装入12个图像。 • 4.图像列表框控件的方法: • (1) Add 方法 • 格式:[对象.] ListImages.Add [Index],[Key],Image • 功能:往图像列表框控件中的图像集合插入索引为Index、关键字为Key的图像Image。 • (2) Remove 方法 • 格式: [对象.] ListImages.Remove Index • (3) Picture 属性 • 格式: [对象.] ListImages(Index | Key ).Picture • 属性值:返回图像。

  30. 二、工具栏 • Toolbar工具栏控件包含一个按钮集合(Buttons),利用该控件我们可以很方便地将经常使用的命令建成工具栏按钮,并为按钮指定图像、文字和工具提示,从而构成功能全面的工具栏。使用工具栏(ToolBar)可以建立多个按钮,每个按钮的图像来自ImageList图像列表框对象中插入的图像。

  31. 二、工具栏 1、为工具栏连接图像 • 右键单击Toolbar控件,选择“属性”命令打开如图所示的Toolbar 控件“属性页”对话框,选择“通用”选项卡。 ToolBar与ImageList的连接 当工具栏按钮变为不可用时(Enabled为False)按钮图像所在的图像列表ImageList 工具栏的外观 按钮的外观

  32. 二、工具栏 表12-12 按钮样式 2、为工具栏增加按钮 • 打开“属性页”上的“按钮”选项卡,单击“插入按钮”,可以在工具栏上插入按钮。 索引(Index)和关键字(Key)为按钮的编号和标识,在ButtonClick事件中引用; 按钮的样式(Style),共6种 当按钮被按下时,值为1,否则为0 图像(Image) :使用ImageList对象中的图像,值可以是Key或Index Toolbar控件“按钮”选项卡

  33. 二、工具栏 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

  34. 二、工具栏 • (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程序可读性好;而且当按钮有增删时,使用关键字不影响程序。

  35. 二、工具栏 • 当单击菜单按钮时,响应ButtonMenuClick事件,该事件形式如下: Private Sub Object-ButtonMenuClick([Index As Integer,]lByVal Button As ConctlLib.Button) …… End Sub • Index表示菜单按钮在控件数组中的索引;Button表示对菜单按钮对象的引用。 例:设计一个工具栏,由4个按钮组成,能实现改变标签的字体、字号、粗体和颜色功能。

  36. 三、状态栏 • 状态栏控件(StatusBar)用来显示系统的某些当前状态值。 • 状态栏控件是由Panel对象组成的,每一个Panel对象都能包含文本或图片。状态栏的外观是一组窗格,在程序中每一个窗格都作为Panel对象来访问。所有Panel对象组成Panels集合。状态栏最多能够包含16个Panel对象。利用其Style属性值中的一个值,程序就可以自动地显示公共数据,如日期、时间和键盘状态等。

  37. 三、状态栏 • 状态栏的建立 • 在设计时,在窗体上增加 StatusBar 控件,并在其属性页的“窗格”选项卡中进行必要的设置,以建立面板并定制它们的外观。 索引:从1开始编号,应用程序能够使用索引号访问各个窗格 Panel 对象的Text属性:显示的文本 Panel 对象的Key属性:可通过关键字访问窗格。 可插入图像 样式

  38. 三、状态栏 状态栏的Style属性

  39. 三、状态栏 • 状态栏的常用事件 • 状态栏的常用事件为: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参数指明了用户单击了哪个窗格,该参数由系统自动提供。

  40. 四、高级文本框控件(RichTextBox) • 高级文本框控件(RichTextBox)可用于输入和编辑文本,它同时提供了比常规的TextBox控件更高级的格式特性。 • 从前几章可以知道,对Text控件只能进行单一的文字格式设置。使用RichTextBox控件可以实现多种文字格式、段落等的设置,还可以插入图形,可真正构成一个像Word一样的字处理软件。 • 要使用RichTextBox控件,必须打开“部件”对话框,选择“Microsoft Rich TextBox Controls 6.0”,将控件添加到工具箱。

  41. 四、高级文本框控件(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

  42. 四、高级文本框控件(RichTextBox) • (2)SaveFile方法 • 格式:对象.SaveFile 文件标识符[,文件类型] • 功能:该方法能够将控件中的文档保存在RTF文件或文本文件中。 • 例如:下面语句把文档以文本文件格式保存在D盘My子目录的T1.txt文件中。 frmMDI.Activeform.RichTextBox1.SaveFile "D:\my\T1.txt",1

  43. 四、高级文本框控件(RichTextBox) • 2.常用属性 • RichTextBox控件提供了一些属性,可对该控件中任何部分的文本使用不同的格式。例如可以将文本变为粗体或斜体,改变文本的颜色,创建上标或下标。可以调整段落的左右缩进值,还可以使用悬挂式缩进。 • FileName属性:加载到高级文本控件中的文件名称。

  44. 四、高级文本框控件(RichTextBox) • 2.常用属性

  45. 四、高级文本框控件(RichTextBox) • 例:用RichTextBox控件,设计一个文本编辑器,利用工具栏格式化文本。

  46. 五、Clipboard对象 • Clipboard对象用于与Windows系统的剪切板进行交换数据,它使用户能够复制、剪切和粘贴应用程序中的文本和图形。 • Clipboard对象的方法: 1. Clear方法:用于清除剪贴板的内容。 • 格式: Clipboard.Clear 2. GetFormat方法:用于检测剪贴板中数据的格式。 • 格式: Clipboard.GetFormat(format) • 说明:format值有:1-文本;2-位图(.bmp文件) 3-位元(.wmf文件);8-与设备无关位图(DIB);9-调色板;&-HBF01(.RTF格式文本)

  47. 五、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对象没有与期望的格式相匹配的图形,则返回空。

  48. 五、Clipboard对象 • 6.SetText方法:用于将文本数据传送到剪贴板中。 • 格式:Clipboard.SetText(data,format) • data:被放置在剪贴板中的字符串数据。 • format:可选。指定文本格式。默认值为1。 • 例:用RichTextBox控件,设计一个文本编辑器,利用Clipboard对象实现编辑菜单功能(复制、剪切和粘贴)

  49. 六、计时器(Timer控件) • 计时器(Timer)控件是在应用程序中用来处理按一定时间间隔(Interval)触发事件的控件。在运行时不可见。 • 1、计时器有两个关键属性: • Enabled属性:当该属性为True时,定时器处于工作状态。而当 Enabled 被设置为 False 时,停止时钟工作。因此,定时器的 Enabled 属性并不同于其它对象的 Enabled 属性。 • Interval属性:计时器事件之间的时间间隔(毫秒数)。1秒=1000毫秒,Interval=0:屏蔽计时器。 • 2、计时器只有一个事件,即Timer事件。 • 只要 Timer 控件的 Enabled 属性被设置为 True 而且 Interval 属性值大于 0,则 Timer 事件以 Interval 属性值指定的时间间隔发生。

  50. 六、计时器(Timer控件) • 例1:利用计时器控件,在标签中显示系统时间。 • 例2:在文本编辑器实例中,利用计时器,动态改变剪切、复制、粘贴命令的有效性。

More Related