1、第 10 章,绘图、菜单及其他控件功能, ,第10章 绘图、菜单及其他控件功能,框架(Frame),滚动条(ScrollBar),图形方法和图形控件,菜单设计,工具栏和状态栏,键盘与鼠标事件,对话框 通用/自定义,制作Web浏览器,GOTO语句和几个定义语句,本 章 主 要 内 容,退出,1. 框架的用途作为容器放置其他控件对象,将这些控件对象分成可标识的控件组;框架内的所有控件将随框架一起移动、显示和消失。(框架示例:“幻灯片放映”“设置放映方式”对话框) 例10.1 控制文本的字体、字号及颜色在窗体上设置3个框架Frame1、Frame2和Frame3,10.1 框架(Frame),例10
2、.1,(2)编写程序代码,功能要求:在三个框架中分别选择字体、字号和颜色,单击“确定”按钮后,文本框中的文本相应属性会发生变化Private Sub Form_Load()Option1.Value = TrueOption3.Value = TrueOption5.Value = TrueText1.FontName = “宋体“Text1.FontSize = 16Text1.ForeColor = RGB(0, 0, 255)End Sub,Private Sub Command1_Click() “确定“按钮单击事件If Option1.Value ThenText1.FontName
3、 = “宋体“ElseText1.FontName = “幼圆“End IfIf Option3.Value ThenText1.FontSize = 16ElseText1.FontSize = 20End IfIf Option5.Value ThenText1.ForeColor = RGB(0, 0, 255)ElseText1.ForeColor = RGB(255, 0, 0)End IfEnd Sub,10.2 滚动条,1.滚动条的用途为不能自动支持滚动的应用程序和控件提供滚动功能,也可作为数据输入的工具。水平滚动条(HScrollBar)和垂直滚动条(VScrollBar)2.
4、 常用属性(1) Min、Max属性:最小值Min属性的默认值为0,最大值Max属性的默认值为32767。(2) Value属性:表示滚动块在滚动条中的位置值移动滚动块时,代表的值随之改变(3) SmallChange属性:最小变动值(4) LargeChange属性:最大变动值,3. 事件滚动条控件可以识别10个事件,其中最常用的是Scroll和Change事件(1)Scroll事件:当用鼠标拖动滚动块时,即触发Scroll事件(2)Change事件:当改变Value属性值时,即触发Change事件当释放滚动块、单击滚动条内空白处或滚动箭头时,Change事件就会发生。,例10.2 设计一个
5、调色板应用程序,建立三个水平滚动条作为红、绿、蓝三种基本颜色的输入工具,合成的颜色显示在右边的标签中(图10.3),用其背景颜色属性BackColor值的改变实现合成颜色的调色Label1.BackColor = RGB(R, G, B),例10.2,标签Label1,说明:根据调色原理,基本颜色有红、绿、蓝三种,选择这三种颜色的不同比例,可以合成所需要的任意颜色(1)创建应用程序的用户界面和设置对象属性三个水平滚动条名称从上至下分别为HScroll1、HScroll2、HScroll3其Max属性均设置为255,Min属性均设置为0,SmallChange属性设置为1,LargeChange
6、属性设置为10,Value设置为0。显示合成颜色的标签名为Label1,(2)编写程序代码功能要求:通过操作(单击或拖动)滚动条,直接修改RGB设置,从而得到标签背景所需的颜色Private Sub HScroll1_Change()Label1.BackColor = RGB(HScroll1.Value, _HScroll2.Value, HScroll3.Value)End SubPrivate Sub HScroll2_Change()Label1.BackColor = RGB(HScroll1.Value, _HScroll2.Value, HScroll3.Value)End S
7、ubPrivate Sub HScroll3_Change()Label1.BackColor = RGB(HScroll1.Value, _HScroll2.Value, HScroll3.Value)End Sub,4种图形控件:PictureBox控件、Image控件、Shape控件和Line控件;图形方法10.3.1 坐标系 每个对象都定位于存放它的容器内 每个容器都有一个坐标系,它包括坐标原点,x坐标轴和y坐标轴,默认的坐标原点(0,0)在容器对象的左上角默认单位为Twip(缇),还可以使用磅、像素、厘米等单位,10.3 图形方法和图形控件,使用Pset(画点)、Line(画线)、C
8、ircle(画圆)等图形方法,可以在窗体和图片框上绘制简单的图形1. Pset(画点)方法格式:对象名. Pset Step(x,y),颜色功能:在对象的指定位置(x,y)上按选定的颜色画点 示例:下列语句能在坐标位置(500,900)处画一个红点:Pset (500,900),RGB(255,0,0)2. Line(画线)方法格式:对象名. Line (x1,y1)-(x2,y2),颜色功能:在两个坐标点之间画一条线段。例如,下列语句可在窗体上画一条斜线Line (600,600)-(2000,3000)3. Circle(画圆)方法格式:对象名. Circle Step(x,y),半径,颜
9、色,起点,终点,纵横比功能:在对象上画圆、椭圆或圆弧,10.3.2 图形方法,图片框(PictureBox)和图像框(Image)都是用于显示图形。图片框可以作为其他控件的容器。示例Private Sub Form_Load()ShowPicture1.Print “在图片框内写字和画圆“ Picture1.Circle(1200, 1000), 600, RGB(0, 0, 255)Picture1.PSet(1200, 1000), RGB(255, 0, 0)End Sub,10.4.3 图片框(PictureBox),例10.3a,10.3.4 图像框(Image),图像框(Image
10、)控件的作用与图片框PictureBox控件相似,但它只能用于显示图形,不能作为其他控件的容器。10.3.5 Shape形状控件VB提供了画图形的基本工具,如Shape(形状控件)、Line(线控件)。Shape控件和Line控件只用于表面装饰,不支持任何事件Shape控件画出矩形、正方形、圆形等图形。10.3.6 Line直线控件Line直线控件可用来在窗体、框架和图片框中绘制简单的线段。,窗体和大多数控件都能响应键盘和鼠标事件10.4.1 键盘事件有三种事件处理键盘操作1. KeyPress事件 2. KeyDown事件:用户按下键盘上某个键时触发此事件3. KeyUp事件:用户按下键盘上
11、某个键后释放时触发此事件,10.4 键盘与鼠标事件,虽然从字面理解, KeyDown是按下一个键的意思, 但实际上二者的根本区别是, 系统由KeyDown返回键盘的代码, 然后由TranslateMessage函数翻译成字符, 由KeyPress返回字符值. 因此在KeyDown中返回的是键盘的代码, 而KeyPress返回的是ASCII字符. 所以根据你的目的, 如果只想读取字符, 用KeyPress, 如果想读各键的状态, 用KeyDown. 说KeyDown是按下, KeyPress是按下并松开, 是不对的. 如果你一直按着键呢? 这时不断地产生KeyDown和KeyPress.,10.
12、4 KeyDown与keypress区别联系,Click、DblClick、MouseMove、MouseDown和MouseUp事件当移动鼠标时发生MouseMove事件当按下鼠标任意键时发生MouseDown事件,放开鼠标键时发生MouseUp事件 后三种事件可以区分鼠标的左、右、中键与Shift、Ctrl、Alt键 Private Sub 对象名_鼠标事件(Button As Integer, Shift As Integer, X As Single,Y As Single)说明:(1) Button参数表示哪个鼠标键被按下或释放。用0,1,2位分别表示鼠标的左、右、中键,用1或0表示
13、被按下或释放(2) Shift参数表示当鼠标键被按下或释放时,Shift、Ctrl、Alt键的按下或释放状态。用0、1、2位表示Shift、Ctrl、Alt键 (3) X,Y表示鼠标指针的当前坐标位置,10.4.2 鼠标事件,MouseMove、MouseDown或MouseUp,当单击鼠标左键时把按钮的位置移动到鼠标指针的位置,单击鼠标右键时把按钮的位置移动到窗体的左上角位置(即坐标原点)。以下程序将MouseDown事件与Move方法结合起来使用。Private Sub Form_MouseDown(Button As Integer, _Shift As Integer, X As Si
14、ngle, Y As Single)If Button = 1 Then 单击鼠标左键时Command1.Move X, Y 移动到鼠标指针的位置ElseCommand1.Move 0, 0 移动到窗体的左上角End IfEnd Sub,例10.4 实现命令按钮位置的移动,例10.4,10.5 菜单设计,应用程序通过菜单为用户提供一组命令菜单一般分为两种:下拉式菜单和弹出式菜单10.5.1 下拉式菜单1.下拉式菜单的结构下拉式菜单基本结构包括:顶层菜单、菜单项和子菜单,例10.4c,10.5.2 菜单编辑器,设计菜单的工具菜单编辑器菜单编辑器分为上、下两部分,上半部分用来设置属性,下半部分是菜
15、单显示区,用来显示用户输入的菜单内容。10.5.3 菜单的Click事件除分隔线以外的所有菜单元素都能识别Click事件,例10.8 编一程序,进行两个操作数的算术运算练习,设计步骤如下:(1)创建应用程序的用户界面和设置对象属性 菜单栏向用户提供功能选择,包括运算数的位数,运算符类型(加、减、乘)和退出程序菜单设计各个菜单项名称,例10.8,(2)编写程序代码Option Explicit 规定所有变量都要显式声明,见10.9.1节Dim sel1 As Integer, sel2 As StringDim r1 As LongPrivate Sub Form_Load()sel1 = 0
16、位数标记sel2 = “ 运算标记RandomizeEnd SubPrivate Sub Mnu11_Click() 单击“一位数”菜单项sel1 = 1 设置位数标记End SubPrivate Sub Mnu12_Click() 单击“二位数”菜单项sel1 = 10End Sub,Private Sub Mnu13_Click() 单击“三位数”菜单项sel1 = 100 End Sub Private Sub Mnu21_Click() 单击“加法”菜单项sel2 = “+“ 设置运算标记 End Sub Private Sub Mnu22_Click() 单击“减法”菜单项sel2
17、= “-“ End Sub Private Sub Mnu23_Click() 单击“乘法”菜单项sel2 = “*“ End Sub,Private Sub Command1_Click() “命题“按钮单击事件Dim a As Long, b As LongIf sel1 = 0 Or sel2 = “ ThenMsgBox “先选择运算数的位数和运算类型“Exit SubEnd If a = sel1 + Int(9 * sel1 * Rnd) 根据指定位数,随机生成操作数b = sel1 + Int(9 * sel1 * Rnd)Text1.Text = Str(a) + sel2 +
18、 Str(b) + “=” 根据操作数及运算类型组成算式Select Case sel2 根据运算类型,求运算结果r1Case “+“r1 = a + bCase “-“r1 = a - bCase “*“r1 = a * bEnd SelectText2.Text = “Text2.SetFocus End Sub,菜单操作后 Sel1 指定位数= 1 一位数= 10 二位数= 100 三位数Sel2 指定运算类型= “+” 加法= “-” 减法 = “*” 乘法,Private Sub Command2_Click() “答题“按钮单击事件Dim r2 As LongIf Text2.Te
19、xt = “ ThenMsgBox “请输入答案“Exit SubEnd Ifr2 = Val(Text2.Text) 读取用户的答案If r1 = r2 Then 判断答案MsgBox “正确“ElseMsgBox “错误“End If End Sub Private Sub Mnu30_Click() “退出”菜单命令End End Sub,10.5.5 弹出式菜单,弹出式菜单又称为快捷菜单。可以根据右击鼠标时的位置弹出不同的菜单。使用VB提供的菜单编辑器,把某个菜单设置成隐藏。 创建快捷菜单的步骤如下:(1)使用菜单编辑器设计菜单(2)设置顶层菜单项为不可见,即不选中菜单编辑器里的“可见
20、”选项或在属性窗口中设定Visible属性为False (3)编写与弹出式菜单相关联的MouseUp(释放鼠标)事件过程。格式为:对象 PopupMenu 菜单名 , 位置常数, 横坐标, 纵坐标,例10.9 在例10.8的基础上,把“位数”菜单改为快捷菜单,(1)打开例10.8的应用程序,选定窗体,然后在菜单编辑器中将“位数”菜单标题的“可见”框中的“”取消(即不选中)(2)增加以下的MouseUp事件过程代码:Private Sub Form_MouseUp(Button As Integer, _Shift As Integer, X As Single, Y As Single)If
21、Button = 2 Then 检查是否右击,击左键为1PopupMenu mnu10End IfEnd Sub程序运行时,右击窗体空白处,即会弹出快捷菜单,如图10.12所示,例10.9,例10.8A,弹出式菜单,10.6 工具栏和状态栏,分别通过Active X控件ToolBar和StatusBar来实现 10.6.1 Active X控件简介VB中使用的控件有三类:标准控件、ActiveX控件和可插入对象(如Word文档、Excel工作表等,可当作控件使用)Active X控件是一段可重复使用的程序代码和数据。由Active X技术创建的,可以作为VB工具箱的扩充部分。 Active X
22、控件以单独的文件存在(.ocx),10.6.2 工具栏(ToolBar),工具栏为用户带来比用菜单更为快速的操作为窗体添加工具栏,应使用工具条(ToolBar)控件和图像控件列表(ImageList)控件(不是标准控件) 创建工具栏的大致步骤:(1)添加ToolBar控件和ImageList控件(2)用ImageList控件保存要使用的图形(3)创建ToolBar控件,并将ToolBar控件与ImageList控件相关联,创建Button对象(4)编写Button的Click事件过程。单击工具栏控件时触发Click事件,单击工具栏上按钮时触发ButtonClick事件,并返回一个Button参
23、数(表明按下哪个按钮),例10.10 使用工具栏,在例10.8的基础上,增加一个工具栏,使之能快速提供“加法”、“减法”和“乘法”运算类型,例10.10,例10.8B,(1)打开例10.8的应用程序(2)按照上述创建ImageList的方法,在窗体上建立ImageList1控件,并从Windows 98系统文件夹中取出图片文件Hlpcd.gif、Hlpbell.gif和Hlpglobe.gif(本例采用这三个图片作为按钮的图形),并添加到该控件中。(3) 在窗体上建立ToolBar1控件,使之与ImageList1相关联,然后在控件中添加“加法”、“减法”和“乘法”三个按钮,并分别取用Imag
24、eList1中的三个图片。(4)在原有程序代码的基础上,增加以下的ButtonClick事件过程代码,操作步骤,Private Sub Toolbar1_ButtonClick(ByVal Button As _MSComctlLib.Button)Select Case Button.IndexCase 1sel2 = “+“Case 2sel2 = “-“Case 3el2 = “*“End SelectEnd Sub,10.6.3 状态栏,状态栏(StatusBar)通常位于窗体的底部,主要用于显示应用程序的各种状态信息。StatusBar控件属于ActiveX控件StatusBar控件
25、由若干个面板(Panel)组成,每一个面板包含文本和图片。StatusBar控件最多能分成16个Panel对象,例10.11 使用状态栏,在例10.10的基础上,在窗体底部添加一个状态栏,用于显示当前时间、键盘大小写状态及运行状态。,例10.11,例10.10A,10.7 对话框,对话框(DialogBox)是应用程序与用户进行交互的主要途径。三种对话框:(1)预定义对话框使用函数InputBox和MsgBox来实现。(2)通用对话框通用对话框是一种ActiveX控件,在使用之前,应选择“工程”菜单中的“部件”命令先将其添加到工具箱中 (选中“Microsoft Common Dialog C
26、ontrol 6.0” )利用通用对话框能够创建下列六种标准对话框(指定相应的参数,P233):打开(Open),另存为(Save As),颜色(Color)字体(Font),打印机(Printer),帮助(Help) (3)用户自定义对话框建立一个窗体,把窗体设置成对话框特性(没有控制菜单框、最大化及最小化按钮,不能改变其大小,见表10.3)在窗体上根据需要放置控件,10.8 使用WebBrowser控件制作Web浏览器,利用WebBrowser控件,可以轻松地设计一个Internet浏览程序,可以显示Internet上的Web网页,也可查看本地计算机上的资源。1. 添加WebBrowse控
27、件2. WebBrowse控件的常用属性LocationName属性,LocationURL属性3. WebBrowse控件的常用方法Navigate方法,GoBack方法,GoForward方法GoHome方法,Refresh方法4. WebBrowse控件的常用事件 DownloadBegin事件,DownloadComplete事件,例10.14 设计一个简易的Web浏览程序,设计时,在窗体上添加WebBrowse控件和框架Frame控件。在Frame控件上添加一个标签Label1(显示文字“地址”)、一个文本框Text1(用于输入URL地址)和一个命令按钮Command1(“转到”),
28、例10.14,WebBrowser 控件,Web浏览程序,Private Sub Command1_Click() “转到”按钮If Text1.Text “ ThenWebBrowser1.Navigate Text1.TextEnd IfEnd SubPrivate Sub Form_Load()WebBrowser1.GoHomeEnd SubPrivate Sub WebBrowser1_DownloadComplete()Caption = WebBrowser1.LocationName & “-“ & _WebBrowser1.LocationURLEnd Sub程序启动后,在“
29、地址”框中键入一个网址“http:/ GoTo语句语法格式:GoTo 行号|标号功能:改变程序的执行顺序,跳转到程序中指定的行继续执行 例10.15 应用GoTo语句示例Private Sub Form_Load()ShowPrint “整型数“GoTo Line1 跳转到标号Line1指定的行Print “单精度数“Line1:Print “字符串“End Sub,10.9 GOTO语句和几个定义语句,例10.15,避免因为写错变量名而导致错误例如,交换变量a、b的值Temp=aa=bb=Tmp 把Temp写错成Tmp运行结果是使b的值为0。若改成:Option Explicit 模块级声明 Dim a As Integer,b As Integer,Temp As Integer. . . Temp=aa=bb=Tmp运行时VB就会发出警告“Variable not defined”(变量未定义),只有把Tmp改为Temp后才恢复正常,2. 强制显式声明变量语句(Option Explicit),3. 定义变量类型格式:Def类型标志 字母范围示例:DefInt m-P4. 自定义数据类型用户可以利用Type语句定义自己的数据类型Private|Public Type 数据类型名元素名1 As 类型名1 End Type,定义类型语句,