1 / 37

第五章 基础控件的增强功能(二)

第五章 基础控件的增强功能(二). 5-1 image 控件 功能:提供程序显示图像,这个图片可以是位图、图标( .bmp .jpg .gif ) 等文件格式图形。 其关键性接口成员: 类别 名称 说明 属性 picture 用于设置装载的图形 stretch 可伸缩性 装载图形可以在属性窗口中设置,也可以在运行时用程序代码加载。 用程序代码对 image 控件装载图片的方法:

Download Presentation

第五章 基础控件的增强功能(二)

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. 第五章 基础控件的增强功能(二) 5-1 image控件 功能:提供程序显示图像,这个图片可以是位图、图标(.bmp .jpg .gif )等文件格式图形。 • 其关键性接口成员: 类别 名称 说明 属性 picture 用于设置装载的图形 stretch 可伸缩性 • 装载图形可以在属性窗口中设置,也可以在运行时用程序代码加载。 • 用程序代码对image控件装载图片的方法: image名.picture=loadpicture(文件标识符) • 当装入某张图片到image控件中时,image默认的模式是让图像框的大小随着装入的图像来改变。

  2. 如果事先将其stretch属性设置为true,那么被装入的图像将按照图像框的大小做等比例的缩放。如果事先将其stretch属性设置为true,那么被装入的图像将按照图像框的大小做等比例的缩放。 例:编写一个显示图片程序,能按照用户要求可以将图像调整成 跟image框相等大小或者以图像原来大小来显示。( ch05\练习1.vbp)

  3. 5-2 picturebox控件 功能:picture控件除了可以显示图像之外,还可以用来描绘图形。 • Picturebox被装入图片时,picturebox的大小并不会随着图象的大小来改变,这样的好处是:除了显示图片,还保留某些空间来绘图。 • 当确实需要将picturebox控件大小调整到和图像大小相同,此时只需要将picturebox中autosize属性设置为true。 例:利用picturebox控件显示西瓜图片,并在右侧画上一个矩形和椭园形。(ch05\练习2.vbp)

  4. 例:写一个可供用户画直线、弧、园、椭园及输入文字的程序。(ch05\画板.vbp)例:写一个可供用户画直线、弧、园、椭园及输入文字的程序。(ch05\画板.vbp) 1)在窗体上放置一个框架,在内放置一个option控件数组。 2)再放置一个框架,在内放置一个label控件数组。 3)在窗体上放置一个picturebox控件。

  5. 在窗体通用处定义模块全局变量 dim x0, y0 as single dim x1, y1 as single dim ang1, ang2 as single dim k,r as single dim switch as integer • 无论选择哪一种画图,都会触发option1_click(index as integer)事件 在该事件中必须用一个全局变量记住用户选择了哪种画图(用switch)有些画图要求给初始值,则这些初始值在这里给出。 Private sub option1_click(index as integer) switch=index if swich=3 then pi=3,14159 ang1=pi*val(inpuitbox(“输入起始角:”))/180 ang2=pi*val(inpuitbox(“输入终止角:”))/180 endif

  6. if switch=4 then k=val(inputbox(“输入椭园比率:”)) end if if switch=5 then picture1.mousepointer=3 end if if switch=6 then picrure1.cls x0=empty x1=empty endif end sub • 无论选择哪一种画图方式,都是按下鼠标、移动鼠标、放开鼠标。即是一定触发mousedown、mousemove、mouseup事件,在每一个事件中利用switch判断用户选择哪种画图。写下这个画图的代码。

  7. 在mousedown事件中获得画图的起始点。 Private sub picture1_mousedown(button as integer,shift as integer, x as single, y as single) x0=x y0=y if switch<>5 the picture1.mousepointer=2 endif end sub • 在mousemove事件中,根据用户选择画图方式,写下代码:

  8. private sub picture1_mousemove(button as intger, shift as integer, x as single, y as single) select case switch case 0 写下画直线代码 case 1 写下画矩形代码 case 2 写下画园代码 case 3 写下画弧代码 case 4 写下画椭圆代码 end select end sub

  9. 在mouseup事件中,根据用户选择画图方式,写下代码:在mouseup事件中,根据用户选择画图方式,写下代码: private sub picture1_mouseup(button as intger, shift as integer, x as single, y as single) select case switch case 0 写下画直线代码 case 1 写下画矩形代码 case 2 写下画园代码 case 3 写下画弧代码 case 4 写下画椭圆代码 case 5 写下在picturebox中输入文字的代码 end select end sub

  10. 无论用户单击哪一种颜色,都会触发privte sub label1_click(index as integer),index就是控件数组的下标。 Private sub label1_click(index as integer) select case index case 0 picture1.forecolor=vbred case 1 picture1.forecolor=vbyellow case 2 picture1.forecolor=vbgreen case 3 picture1.forecolor=vbblue case 4 picture1.forecolor=vbblack end select end sub

  11. Picture属性与image属性有何区别 除了image和picturebox控件之外,许多控件及对象都有picture属性,但是对于picturebox及from来说,除了picture属性之外,还含有image属性,image属性与picture属性有何区别? 1)从可读写的角度来看 image属生并不是“设计阶段”可以使用的属性,所以在属生窗口中看不到这个属性,另一方面进入“运行阶段”之后,picture属性可读可写,而image属性是只读的。 2)背景与图像 如果将form和picture看作一面墙,那么picture属生就像油漆所涂上去的背景图,而image属性则像是使用粉笔画上去的图形或文字 。 例:运行ch05\picimg.vbp • 发现属于image的图像会消失,如何恢复其原来图像,可以使用autodraw属性或者paint事件。 • 为什么一旦将autoredraw属性设置为true,picturebox、form就具有重新绘图形能力。

  12. 原因:一旦将autoredraw属性设为true,那么所有绘图的操作和内容都会记录在image属性中,当picturebox和form重新回到屏幕时,所有绘图操作就会重新被运行一次,使得picturebox及form恢复原样。原因:一旦将autoredraw属性设为true,那么所有绘图的操作和内容都会记录在image属性中,当picturebox和form重新回到屏幕时,所有绘图操作就会重新被运行一次,使得picturebox及form恢复原样。 • 如何保存picturebox或form上面图像 方法:调用savepicture语句,其格式: 保存背景图: savepicture 对象名.picture, 图像文件名 保存对象的整个图像: savepicture 对象名.image, 图像文件名 例:保存picturebox或form上面图像。(ch05\练习4.vbp)

  13. 例:在上面程序中,加上一个命令按钮,其作用在picture1上画上一个矩形及园形,然后按“image“方式 保存该图形,观察是否保存了矩形及园形,如果没有,进行修改再保存。(ch05\练习5.vbp) 练习:打开练习3.vbp工程,修改程序,使得该程序具有将画的图形保存下来。 5-3 滚动条控件 有水平滚动条(hscrollbar)和垂直滚动条(vscrollbar),它们除了方向不同外,两者的用法和接口成员是完全相同,下表是滚动条的关键性接口成员: 类别 名称 说明 属性 min 滚动条的最小值 max 滚动条的最大值 smallchage 单击滚动条上升按钮或下降按钮变动值 largechange 单击滚动条空白处的变动值 value 滚动条的当前值 事件 change 当value属性值改变时发生这个事件

  14. 例:在窗体上放置一个滚动条要控件,要求将滚动条的值显示在文本框(ch05\练习7.vbp)例:在窗体上放置一个滚动条要控件,要求将滚动条的值显示在文本框(ch05\练习7.vbp) 在vscrollbar1对象的属性值设置如下: min 0 max 100 smallchange 1 largechange 10

  15. 例:设计一个调色板应用程序(ch05\练习8.vbp) 提示:要使用到一个RGB函数 格式:RGB(red, green, blue) 其中:red、green、blue数值: 0~255 功能:返回一个RGB颜色值

  16. 5-4 计时器控件 计时器控件是一种按一定时间间隔触发事件的控件,在应用程序中用于在一定时间间隔执行某些操作。 • 关键性接口成员: 类别 名称 说明 属性 name 对象名称 enable 决定对象是否有 interval 触发计时器两个事件之间毫秒数。 单位为毫秒(1/1000秒) 取值范围:0~64767 事件timer 在间隔了一个interval设定时间后触 发该事件。 • 过程:VB中有两类过程 1)一类是系统提供的内部函数过程和事件过程。 2)另一类是用户根据自已需要定义,供事件过程多次调用的过程。

  17. 使用过程的好处是使程序简练,便于调试和维护。在VB中自定义过程分以下几种:使用过程的好处是使程序简练,便于调试和维护。在VB中自定义过程分以下几种: 以“sub”保留字开始的子过程 以“function”保留字开始的函数过程 以“property”保留字开头的属性过程 以“event”保留字开始的事件过程 1)过程的定义 自定义过程和函数方法: 在窗体/标准模式块的代码窗口中把插入点放在所有过程之外,输入子过程名或function函数过程名即可。 自定义过程形式: [static][public][private]sub 子过程名[(参数列表)] 局部变量或常量定义 语句 [ exit sub] 语句 end sub

  18. 自定义函数: [static][public][private] function 函数过程名( [参数列表] ) [as 类型] 局部变量或常量定义 语句 函数名=返回值 [exit funtion] 语句 函数名=返回值 end function 参数列表: [byval] 变量名[as 类型] [,byval ] 变量名 [as 类型] 有形参和哑元(byval 变量名是形参),形参是按值传递,哑元是按地址传递,(亦称引用传递),亦可以无参数,但在函数过程中无参数时亦要加“()” • 在定义函数过程中,缺省[ as 类型]则函数值是变体类型

  19. 例:设计一个倒计时应用程序(ch05/练习9.vbp) 分析: 1)单击“设置倒计时按钮时,输入倒计时分钟数,显示格式:mm:ss 2)单击“开始倒计时”按钮后,每隔一秒钟,必须重新向label 框caption 赋值所剩分钟数,显示格式:mm:ss 3)在窗体中添加一个计时器:timer1 timer1.interval=1000

  20. 当timer1.enable=true 则每隔一秒触发timer1_timer事件,在该事件中向label框的caption赋以所剩的时间,显示格式:mm:ss ss<1(秒) T F mm<1(分) T F ss=ss-1 时间到 timer1.enable=false 退出程序 mm=mm-1 ss=59 显示时间 label1.caption=timestring(mm,ss)

  21. 4)由于输入的倒计时数是数值,且程序中mm,ss亦是数值型变量,所以必须编写一个函数将这些时间转换为指定格式:mm:ss 4)由于输入的倒计时数是数值,且程序中mm,ss亦是数值型变量,所以必须编写一个函数将这些时间转换为指定格式:mm:ss Dim mm, ss As Integer 'mm表示分,ss表示秒,都是全局变量 Function timestring(ByVal m As Integer, ByVal s As Integer) Dim mstr, sstr As String If m < 10 Then mstr = "0" + Trim(Str(m)) 'm表示分,s表示秒 Else mstr = Trim(Str(m)) End If If s < 10 Then sstr = "0" + Trim(Str(s)) Else sstr = Trim(Str(s)) End If timestring = mstr + ":" + sstr End Function

  22. 利用图片框和计时器设计简单动画 我们常希望在屏幕上出现动画效果,比如汽车向前行驶、地球绕太阳旋转等。 其实简单的动画无非是使用一个图像连续地在屏幕上移动位置而已。复杂一些动画除了将一个图像整体移动外,还可以改变图像的形状和尺寸。 • 在VB中实现动画有如下几种方法: 1)使用move方法移动控件或图片 2)改变图像的位置和尺寸,达到动画效果 3)在不同位置显示不同的图片 不论是用何种方法,都有可以用计时器定时触发有关动画的事件过程,用计时器的inetrval属性控制图像移动速度。 • Move方法: 对象名.move left , top [, width, length ] left:表示对象左边框离窗体边框距离 top:表示对象顶部与窗体顶部之间距离 width:表示对象新宽度 length:表示对象新高度

  23. 例:以蓝天白云为背景,显示地球围绕太阳旋转的画面。(ch05\练习9a.vbp)例:以蓝天白云为背景,显示地球围绕太阳旋转的画面。(ch05\练习9a.vbp) 分析: 1)放置一个picturebox在窗体上与窗体大小相同,放置背景图 clouder.bmp 2)在picture1上放置两个image1,image2。

  24. 在form_load事件中: 将image1.stretch=true image2.stretch=true 将image1移到屏幕中心并装入图片sum.ico,在image2中装入earth.ico 3)地球绕着太阳作园周运动(园周半径r=1500) 即是说:image2控件的左上角坐标(x, y)是不断变化。 (x, y) r width / 2 i x=r*cos(i )+width/2-image2.width/2 y=height/2- r*sin( i ) -image2.height/2

  25. 我们想每0.1秒更换一次(x, y)值,则在timer1.interval=100 在timer1_timer事件中写下: Private Sub Timer1_Timer() Dim x, y As Single Dim r As Integer Static i As Single r = 1500 x = Cos(i) * r + Width / 2 - Image2.Width / 2 y = Height / 2 - r * Sin(i) - Image2.Height / 2 i = i + 0.1 Image2.Move x, y End Sub

  26. 例:在窗体上画一幅明月高挂、群星闪烁的画面。要求在程序开始运行时,将一个月亮的图形装入到图像框中。窗体上有一个计时器,其interval属性值为500,因此计时器每隔0.5秒发生一次timer事件。在timer事件过程中,在随机产生的500个(x, y)坐标处以白色“点亮”该点。因此出现500个亮点,然后以cls方法清除屏幕。在下一次timer事件发生时,又出现另外500个点,然后又清除屏幕。如此反复就出现“群星闪烁”的效果。(ch05\练习9c.vbp)

  27. 5-5 文件夹控件 文件夹控件包含: 驱动器列表框:drivelistbox 文件夹列表框:dirlistbox 文件列表框:filelistbox • 驱动器列表框: 当drivelistbox放置在窗体之后,它会显示当前驱动器,而拉下右边的下拉按钮,可以列出当前计算机所有的磁盘驱动器,经用户选择后,可改变当前驱动器。

  28. 类别 名称 说明 属性 drive 读取(修改)当前驱动器号 事件 change 当前驱动器有所变动时则发生该事件。 • 文件夹列表框: 当dirlistbox放置在窗体之后,它会显示当前文件夹,而且用户也可以改变这个文件夹。在程序中,可以通过它的path属性读取当前文件夹或改变当前文件夹 类别 名称 说明 属性 path 读取(修改)当前文件夹 事件 change 当前文件有所变动时则发生该事件。

  29. 文件列表框: • 当filelistbox放置在窗体之后,它会显示某个指定文件夹(由path属性决定)的某类文件列表(由pattern属性决定)。刚放置在窗体上的filelistbox控件pattern属性值为“ *.* ”,表示显示所有文件,但是可以利用属性来改变它的值。 • 当用户从文件夹列表框中选择了文件,程序可以利用filename属性读取这个 文件名。 • 类别 名称 说明 • 事件 click 当在文件列表框中选取了文件时发生该事件。 • 属性 path 当前文件夹 • filename 被选定的文件名称 • pattern 用来筛选filelistbox的文件

  30. Filelistbox、dirlistbox、drivelistbox的连动: 1)使文件夹列表框可以显示驱动器中的文件夹。 Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub 2)使得filelistbox得以显示当前文件夹中的文件 Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub 3)读取在文件列表框中选取文件的完整文件标识符赋给字符串变量,并输出到立即窗口。 Private Sub File1_Click() Dim fullpath As String If Right(File1.Path, 1) <> "\" Then fullpath = File1.Path + "\" + File1.FileName Else fullpath = File1.Path + File1.FileName End If

  31. Debug.Print fullpath End Sub 例:编写一个简单图像浏览器程序(ch05\练习12.vbp) 5-6 通用对话框 • 在工具箱中添加commondialog控件 单击“工程/部件” 引用“microsoft common dialog control6.o” • commondialog控件显示方法 方法 显示的对话框 showopen “打开”或“open“对话框 showsave “另存”或“save file as ”对话框 showcolor “颜色”或“color”对话框 showfont “字体”或“fint”对话框 showprinter “打印”或“printr” 对话框 showhelp 调用windows帮助对话框

  32. 设置对话框标题等信息 属性名称 说明 dialigtitle 对话框标题 initdir 起始文件夹 filename 文件名称 filter 文件类型 filterindex 默认的filter索引 flags 标志,参阅后面的说明 filter属性设置格式: filter=“筛选描述1 |筛选条件1 | 筛选描述2 | 筛选条件2…” • 读取用户所选取的文件 属性名称 说明 filetitle 文件名称,但不含路径 filename 文件名称,含完整路径 例:修改ch05\练习12.vbp,选择图片文件采用commondialog对话框。(ch05\ 练习14.vbp )

  33. 例:修改上一题,希望以原图来显示,如果图像比显示区小,那么将图像显示在显示区的中央,如果图像比显示区大,就提供滚动条让用户浏览显示区外的图像。(ch05\练习15.vbp)例:修改上一题,希望以原图来显示,如果图像比显示区小,那么将图像显示在显示区的中央,如果图像比显示区大,就提供滚动条让用户浏览显示区外的图像。(ch05\练习15.vbp) 1)把image设置在picturebox中央 image1.left=(picture1.scalewidth-image1.width)/2 image1.top=(picture1.scaleheight-image1.height)/2 2)显示大图像的技巧 如果picturebox里的image(用来显示图像)比picturebox大,则image超出picturebox的部分就不会被显示出来。 (-x,-y) -y 红线:表示picturebox 虚绿线:表示image 黑色点划线:表示移动 后image -x x y

  34. 要显示右方和下方超出部分,该怎样办? 把image的左上角坐标(left, top)设置成负值(-x, -y)后,则垂直坐标小于Y,水平坐标小于X的部分不会显示出来,而将图像右下方的区域显示出来。即: image1.left=-(image1.width-picture1.scalewidth) image1.top=-(image1.height-picture1.scaleheigh) 3)为了让用户方便浏览全部的图像,还在设置一个水平滚动条和一个垂直滚动条,而滚动条的几个关键属性设置为: vscroll1.min=0 vscroll1.max=image1.height-picture1.height vscroll1.largechange=10 vscroll1.smallchange=1 hscroll1.mi=0 hscroll1.max=image1.width-picture1.width hscroll1.largechange=10 hscorll1.smallchange=1 要保证image比picturebox高,才正确 要保证image比picturebox宽,才正确

  35. 4)图像滚动: 当单击水平滚动条时,会触发事件: private sub hscroll1_change() image1.left=-hscroll1.value end sub x • 当单击垂直滚动条时,会触发事件: • private sub vscroll1_change() • image1.top=-vscroll1.value • end sub • 字体对话框的调用 • 字体对话框属性使用 • color 表示字体颜色 • fontname 用户所选字体名称

  36. fontsize 用户所选字体大小 min (max) 用于设定用户在字体对话框中所能选择的最小值和 最大值。即用户只能在此范围之内选择字体大小。 Flag 在显示字体对话框之前必须设置flags属性 常数 值 说明 cdlcfscreenfonts &H1 显示屏幕字体 cdlcfprintfonts &H2 显示打印机字体 cdlcfboth &H3 显示打印机字体和屏幕字体 cdlcfeffects &H100 在字体对话框显示删除线和下划 线、检查框及颜色组合 fontbold 粗体(true/false) fontitalic 斜体(true/false) fontstrikethru 删除线(true/false) fontunderline 下划线(true/false)

  37. 例:设计一个如下介面的程序,当单击字体按钮时能设置文本框字体(ch05\练习16.vbp)例:设计一个如下介面的程序,当单击字体按钮时能设置文本框字体(ch05\练习16.vbp) Private Sub Command1_Click() CommonDialog1.Flags = &H3 Or &H100 CommonDialog1.DialogTitle = "设置文本框中字体" CommonDialog1.ShowFont Text1.FontName = CommonDialog1.FontName 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

More Related