
第五章基础控件的增强功能二ppt课件.ppt
37页第五章 根底控件的加强功能〔二〕5-1 image控件功能:提供程序显示图像,这个图片可以是位图、图标〔.bmp .jpg .gif )等文件格式图形其关键性接口成员: 类别 称号 阐明 属性 picture 用于设置装载的图形 stretch 可伸缩性装载图形可以在属性窗口中设置,也可以在运转时用程序代码加载用程序代码对image控件装载图片的方法: image名.picture=loadpicture(文件标识符)当装入某张图片到image控件中时,image默许的方式是让图像框的大小随着装入的图像来改动•假设事先将其stretch属性设置为true,那么被装入的图像将按照图像框的大小做等比例的缩放•例:编写一个显示图片程序,能按照用户要求可以将图像调整成 跟image框相等大小或者以图像原来大小来显示〔 ch05\练习1.vbp)• 5-2 picturebox控件功能:picture控件除了可以显示图像之外,还可以用来描画图形。
Picturebox被装入图片时,picturebox的大小并不会随着图象的大小来改动,这样的益处是:除了显示图片,还保管某些空间来绘图当确实需求将picturebox控件大小调整到和图像大小一样,此时只需求将picturebox中autosize属性设置为true例:利用picturebox控件显示西瓜图片,并在右侧画上一个矩形和椭园形〔ch05\练习2.vbp) 例:写一个可供用户画直线、弧、园、椭园及输入文字的程序〔ch05\画板.vbp)1〕在窗体上放置一个框架,在内放置一个option控件数组2〕再放置一个框架,在内放置一个label控件数组3〕在窗体上放置一个picturebox控件 •在窗体通用途定义模块全局变量•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•endifif switch=4 thenk=val(inputbox(“输入椭园比率:〞))end ifif switch=5 thenpicture1.mousepointer=3end ifif switch=6 thenpicrure1.clsx0=emptyx1=emptyendifend sub无论选择哪一种画图方式,都是按下鼠标、挪动鼠标、放开鼠标即是一定触发mousedown、mousemove、mouseup事件,在每一个事件中利用switch判别用户选择哪种画图写下这个画图的代码•在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事件中,根据用户选择画图方式,写下代码: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 selectend sub•在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•无论用户单击哪一种颜色,都会触发 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•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就具有重新绘图形才干缘由:一旦将autoredraw属性设为true,那么一切绘图的操作和内容都会记录在image属性中,当picturebox和form重新回到屏幕时,一切绘图操作就会重新被运转一次,使得picturebox及form恢复原样如何保管picturebox或form上面图像方法:调用savepicture语句,其格式:保管背景图:savepicture 对象名.picture, 图像文件名保管对象的整个图像:savepicture 对象名.image, 图像文件名例:保管picturebox或form上面图像〔ch05\练习4.vbp) 例:在上面程序中,加上一个命令按钮,其作用在picture1上画上一个矩形及园形,然后按“image“方式 保管该图形,察看能否保管了矩形及园形,假设没有,进展修正再保管〔ch05\练习5.vbp)练习:翻开练习3.vbp工程,修正程序,使得该程序具有将画的图形保管下来。
5-3 滚动条控件有程度滚动条(hscrollbar)和垂直滚动条(vscrollbar),它们除了方向不同外,两者的用法和接口成员是完全一样,下表是滚动条的关键性接口成员: 类别称号阐明 属性min滚动条的最小值max滚动条的最大值smallchage单击滚动条上升按钮或下降按钮变动值largechange单击滚动条空白处的变动值value滚动条的当前值 事件change当value属性值改动时发生这个事件 例:在窗体上放置一个滚动条要控件,要求将滚动条的值显示在文本框〔ch05\练习7.vbp)在vscrollbar1对象的属性值设置如下:min0max100smallchange1largechange10 例:设计一个调色板运用程序(ch05\练习8.vbp)提示:要运用到一个RGB函数格式:RGB(red, green, blue)其中:red、green、blue数值: 0~255功能:前往一个RGB颜色值 5-4 计时器控件计时器控件是一种按一定时间间隔触发事件的控件,在运用程序中用于在一定时间间隔执行某些操作关键性接口成员:类别称号阐明属性name对象称号enable决议对象能否有interval触发计时器两个事件之间毫秒数。
单位为毫秒〔1/1000秒〕取值范围:0~64767事件timer在间隔了一个interval设定时间后触 发该事件过程:VB中有两类过程1〕一类是系统提供的内部函数过程和事件过程2〕另一类是用户根据自已需求定义,供事件过程多次调用的过程运用过程的益处是使程序简练,便于调试和维护在VB中自定义过程分以下几种:以“sub〞保管字开场的子过程以“function〞保管字开场的函数过程以“property〞保管字开头的属性过程以“event〞保管字开场的事件过程1〕过程的定义自定义过程和函数方法:在窗体/规范方式块的代码窗口中把插入点放在一切过程之外,输入子过程名或function函数过程名即可自定义过程方式:[static][public][private]sub 子过程名[〔参数列表〕]部分变量或常量定义语句[ exit sub]语句end sub自定义函数:[static][public][private] function 函数过程名( [参数列表] ) [as 类型]部分变量或常量定义语句函数名=前往值[exit funtion]语句函数名=前往值end function参数列表:[byval] 变量名 [as 类型] [,byval ] 变量名 [as 类型]有形参和哑元〔byval 变量名是形参〕,形参是按值传送,哑元是按地址传送,〔亦称援用传送〕,亦可以无参数,但在函数过程中无参数时亦要加“〔〕〞在定义函数过程中,缺省[ as 类型]那么函数值是变体类型例:设计一个倒计时运用程序〔ch05/练习9.vbp) 分析: 1〕单击“设置倒计时按钮时,输入倒计时分钟数,显示格式:mm:ss 2〕单击“开场倒计时〞按钮后,每隔一秒钟,必需重新向label 框caption 赋值所剩分钟数,显示格式:mm:ss 3〕在窗体中添加一个计时器:timer1timer1.interval=1000当timer1.enable=true那么每隔一秒触发timer1_timer事件,在该事件中向label框的caption赋以所剩的时间,显示格式:mm:ss ss<1〔秒〕TF mm<1〔分〕TF时间到timer1.enable=false退出程序mm=mm-1ss=59 ss=ss-1 显示时间label1.caption=timestring(mm,ss)4〕由于输入的倒计时数是数值,且程序中mm,ss亦是数值型变量,所以必需编写一个函数将这些时间转换为指定格式:mm:ssDim mm, ss As Integer 'mm表示分,ss表示秒,都是全局变量Function timestring(ByVal m As Integer, ByVal s As Integer)Dim mstr, sstr As StringIf m < 10 Then mstr = "0" + Trim(Str(m)) 'm表示分,s表示秒Else mstr = Trim(Str(m))End IfIf s < 10 Then sstr = "0" + Trim(Str(s))Else sstr = Trim(Str(s))End Iftimestring = mstr + ":" + sstrEnd Function•利用图片框和计时器设计简单动画• 我们常希望在屏幕上出现动画效果,比如汽车向前行驶、地球绕太阳旋转等。
•其实简单的动画无非是运用一个图像延续地在屏幕上挪动位置而已复杂一些动画除了将一个图像整体挪动外,还可以改动图像的外形和尺寸•在VB中实现动画有如下几种方法:•1〕运用move方法挪动控件或图片•2〕改动图像的位置和尺寸,到达动画效果•3〕在不同位置显示不同的图片•不论是用何种方法,都有可以用计时器定时触发有关动画的事件过程,用计时器的inetrval属性控制图像挪动速度•Move方法:•对象名.move left , top [, width, length ]•left:表示对象左边框离窗体边框间隔•top:表示对象顶部与窗体顶部之间间隔•width:表示对象新宽度•length:表示对象新高度 例:以蓝天白云为背景,显示地球围绕太阳旋转的画面〔ch05\练习9a.vbp)分析: 1〕放置一个picturebox在窗体上与窗体大小一样,放置背景图 clouder.bmp 2〕在picture1上放置两个image1,image2在form_load事件中:将image1.stretch=true image2.stretch=true将image1移到屏幕中心并装入图片sum.ico,在image2中装入earth.ico3〕地球绕着太阳作园周运动〔园周半径r=1500)即是说:image2控件的左上角坐标〔x, y)是不断变化。
width / 2ir(x, y) x=r*cos(i )+width/2-image2.width/2 y=height/2- r*sin( i ) -image2.height/2 我们想每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, yEnd Sub例:在窗体上画一幅明月高挂、群星闪烁的画面要求在程序开场运转时,将一个月亮的图形装入到图像框中窗体上有一个计时器,其interval属性值为500,因此计时器每隔0.5秒发生一次timer事件在timer事件过程中,在随机产生的500个〔x, y)坐标处以白色“点亮〞该点。
因此出现500个亮点,然后以cls方法去除屏幕在下一次timer事件发生时,又出现另外500个点,然后又去除屏幕如此反复就出现“群星闪烁〞的效果〔ch05\练习9c.vbp) 5-5 文件夹控件文件夹控件包含:驱动器列表框:drivelistbox文件夹列表框:dirlistbox文件列表框:filelistbox驱动器列表框:当drivelistbox放置在窗体之后,它会显示当前驱动器,而拉下右边的下拉按钮,可以列出当前计算机一切的磁盘驱动器,经用户选择后,可改动当前驱动器类别称号阐明属性drive读取〔修正〕当前驱动器号事件change当前驱动器有所变动时那么发生该事件文件夹列表框:当dirlistbox放置在窗体之后,它会显示当前文件夹,而且用户也可以改动这个文件夹在程序中,可以经过它的path属性读取当前文件夹或改动当前文件夹类别称号阐明属性path 读取〔修正〕当前文件夹事件change当前文件有所变动时那么发生该事件•文件列表框:• 当filelistbox放置在窗体之后,它会显示某个指定文件夹〔由path属性决议〕的某类文件列表〔由pattern属性决议〕。
刚放置在窗体上的filelistbox控件pattern属性值为“ *.* 〞,表示显示一切文件,但是可以利用属性来改动它的值 当用户从文件夹列表框中选择了文件,程序可以利用filename属性读取这个 文件名 类别称号阐明 事件click当在文件列表框中选取了文件时发生该事件 属性path当前文件夹filename被选定的文件称号pattern用来挑选filelistbox的文件•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 IfDebug.Print fullpathEnd 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协助对话框•设置对话框标题等信息•属性称号阐明•dialigtitle对话框标题•initdir起始文件夹•filename文件称号•filter文件类型•filterindex默许的filter索引•flags标志,参阅后面的阐明•filter属性设置格式:•filter=“挑选描画1 |挑选条件1 | 挑选描画2 | 挑选条件2…〞•读取用户所选取的文件•属性称号阐明•filetitle文件称号,但不含途径•filename文件称号,含完好途径•例:修正ch05\练习12.vbp,选择图片文件采用commondialog对话框。
〔ch05\ 练习14.vbp )•例:修正上一题,希望以原图来显示,假设图像比显示区小,那么将图像显示在显示区的中央,假设图像比显示区大,就提供滚动条让用户阅读显示区外的图像ch05\练习15.vbp)•1〕把image设置在picturebox中央•image1.left=(picture1.scalewidth-image1.width)/2•image1=(picture1.scaleheight-image1.height)/2•2〕显示大图像的技巧•假设picturebox里的image〔用来显示图像〕比picturebox大,那么image超出picturebox的部分就不会被显示出来xy-x-y红线:表示picturebox虚绿线:表示image黑色点划线:表示挪动 后image〔-x,-y)要显示右方和下方超出部分,该怎样办?把image的左上角坐标〔left, top)设置成负值(-x, -y)后,那么垂直坐标小于Y,程度坐标小于X的部分不会显示出来,而将图像右下方的区域显示出来即: image1.left=-(image1.width-picture1.scalewidth) image1=-(image1.height-picture1.scaleheigh)3〕为了让用户方便阅读全部的图像,还在设置一个程度滚动条和一个垂直滚动条,而滚动条的几个关键属性设置为:vscroll1.min=0vscroll1.max=image1.height-picture1.heightvscroll1.largechange=10vscroll1.smallchange=1hscroll1.mi=0hscroll1.max=image1.width-picture1.widthhscroll1.largechange=10hscorll1.smallchange=1要保证image比picturebox高,才正确要保证image比picturebox宽,才正确4〕图像滚动:当单击程度滚动条时,会触发事件:private sub hscroll1_change()image1.left=-hscroll1.valueend subx 当单击垂直滚动条时,会触发事件: private sub vscroll1_change() image1=-vscroll1.valueend sub 字体对话框的调用 字体对话框属性运用 color 表示字体颜色fontname用户所选字体称号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)例:设计一个如下介面的程序,当单击字体按钮时能设置文本框字体〔ch05\练习16.vbp)Private Sub Command1_Click()CommonDialog1.Flags = &H3 Or &H100CommonDialog1.DialogTitle = "设置文本框中字体"CommonDialog1.ShowFontText1.FontName = CommonDialog1.FontNameText1.FontSize = CommonDialog1.FontSizeText1.FontBold = CommonDialog1.FontBoldText1.FontItalic = CommonDialog1.FontItalicText1.FontStrikethru = CommonDialog1.FontStrikethruText1.FontUnderline = CommonDialog1.FontUnderlineText1.ForeColor = CommonDialog1.ColorEnd Sub。












