




已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章基礎(chǔ)控件的增強(qiáng)功能(二),5-1image控件功能:提供程序顯示圖像,這個(gè)圖片可以是位圖、圖標(biāo)(.bmp.jpg.gif)等文件格式圖形。其關(guān)鍵性接口成員:類別名稱說明屬性picture用于設(shè)置裝載的圖形stretch可伸縮性裝載圖形可以在屬性窗口中設(shè)置,也可以在運(yùn)行時(shí)用程序代碼加載。用程序代碼對image控件裝載圖片的方法:image名.picture=loadpicture(文件標(biāo)識符)當(dāng)裝入某張圖片到image控件中時(shí),image默認(rèn)的模式是讓圖像框的大小隨著裝入的圖像來改變。,1,如果事先將其stretch屬性設(shè)置為true,那么被裝入的圖像將按照圖像框的大小做等比例的縮放。例:編寫一個(gè)顯示圖片程序,能按照用戶要求可以將圖像調(diào)整成跟image框相等大小或者以圖像原來大小來顯示。(ch05練習(xí)1.vbp),2,5-2picturebox控件功能:picture控件除了可以顯示圖像之外,還可以用來描繪圖形。Picturebox被裝入圖片時(shí),picturebox的大小并不會隨著圖象的大小來改變,這樣的好處是:除了顯示圖片,還保留某些空間來繪圖。當(dāng)確實(shí)需要將picturebox控件大小調(diào)整到和圖像大小相同,此時(shí)只需要將picturebox中autosize屬性設(shè)置為true。例:利用picturebox控件顯示西瓜圖片,并在右側(cè)畫上一個(gè)矩形和橢園形。(ch05練習(xí)2.vbp),3,例:寫一個(gè)可供用戶畫直線、弧、園、橢園及輸入文字的程序。(ch05畫板.vbp)1)在窗體上放置一個(gè)框架,在內(nèi)放置一個(gè)option控件數(shù)組。2)再放置一個(gè)框架,在內(nèi)放置一個(gè)label控件數(shù)組。3)在窗體上放置一個(gè)picturebox控件。,4,在窗體通用處定義模塊全局變量dimx0,y0assingledimx1,y1assingledimang1,ang2assingledimk,rassingledimswitchasinteger無論選擇哪一種畫圖,都會觸發(fā)option1_click(indexasinteger)事件在該事件中必須用一個(gè)全局變量記住用戶選擇了哪種畫圖(用switch)有些畫圖要求給初始值,則這些初始值在這里給出。Privatesuboption1_click(indexasinteger)switch=indexifswich=3thenpi=3,14159ang1=pi*val(inpuitbox(“輸入起始角:”)/180ang2=pi*val(inpuitbox(“輸入終止角:”)/180endif,5,ifswitch=4thenk=val(inputbox(“輸入橢園比率:”)endififswitch=5thenpicture1.mousepointer=3endififswitch=6thenpicrure1.clsx0=emptyx1=emptyendifendsub無論選擇哪一種畫圖方式,都是按下鼠標(biāo)、移動鼠標(biāo)、放開鼠標(biāo)。即是一定觸發(fā)mousedown、mousemove、mouseup事件,在每一個(gè)事件中利用switch判斷用戶選擇哪種畫圖。寫下這個(gè)畫圖的代碼。,6,在mousedown事件中獲得畫圖的起始點(diǎn)。Privatesubpicture1_mousedown(buttonasinteger,shiftasinteger,xassingle,yassingle)x0=xy0=yifswitch5thepicture1.mousepointer=2endifendsub在mousemove事件中,根據(jù)用戶選擇畫圖方式,寫下代碼:,7,privatesubpicture1_mousemove(buttonasintger,shiftasinteger,xassingle,yassingle)selectcaseswitchcase0寫下畫直線代碼case1寫下畫矩形代碼case2寫下畫園代碼case3寫下畫弧代碼case4寫下畫橢圓代碼endselectendsub,8,在mouseup事件中,根據(jù)用戶選擇畫圖方式,寫下代碼:privatesubpicture1_mouseup(buttonasintger,shiftasinteger,xassingle,yassingle)selectcaseswitchcase0寫下畫直線代碼case1寫下畫矩形代碼case2寫下畫園代碼case3寫下畫弧代碼case4寫下畫橢圓代碼case5寫下在picturebox中輸入文字的代碼endselectendsub,9,無論用戶單擊哪一種顏色,都會觸發(fā)privtesublabel1_click(indexasinteger),index就是控件數(shù)組的下標(biāo)。Privatesublabel1_click(indexasinteger)selectcaseindexcase0picture1.forecolor=vbredcase1picture1.forecolor=vbyellowcase2picture1.forecolor=vbgreencase3picture1.forecolor=vbbluecase4picture1.forecolor=vbblackendselectendsub,10,Picture屬性與image屬性有何區(qū)別除了image和picturebox控件之外,許多控件及對象都有picture屬性,但是對于picturebox及from來說,除了picture屬性之外,還含有image屬性,image屬性與picture屬性有何區(qū)別?1)從可讀寫的角度來看image屬生并不是“設(shè)計(jì)階段”可以使用的屬性,所以在屬生窗口中看不到這個(gè)屬性,另一方面進(jìn)入“運(yùn)行階段”之后,picture屬性可讀可寫,而image屬性是只讀的。2)背景與圖像如果將form和picture看作一面墻,那么picture屬生就像油漆所涂上去的背景圖,而image屬性則像是使用粉筆畫上去的圖形或文字。例:運(yùn)行ch05picimg.vbp發(fā)現(xiàn)屬于image的圖像會消失,如何恢復(fù)其原來圖像,可以使用autodraw屬性或者paint事件。為什么一旦將autoredraw屬性設(shè)置為true,picturebox、form就具有重新繪圖形能力。,11,原因:一旦將autoredraw屬性設(shè)為true,那么所有繪圖的操作和內(nèi)容都會記錄在image屬性中,當(dāng)picturebox和form重新回到屏幕時(shí),所有繪圖操作就會重新被運(yùn)行一次,使得picturebox及form恢復(fù)原樣。如何保存picturebox或form上面圖像方法:調(diào)用savepicture語句,其格式:保存背景圖:savepicture對象名.picture,圖像文件名保存對象的整個(gè)圖像:savepicture對象名.image,圖像文件名例:保存picturebox或form上面圖像。(ch05練習(xí)4.vbp),12,例:在上面程序中,加上一個(gè)命令按鈕,其作用在picture1上畫上一個(gè)矩形及園形,然后按“image“方式保存該圖形,觀察是否保存了矩形及園形,如果沒有,進(jìn)行修改再保存。(ch05練習(xí)5.vbp)練習(xí):打開練習(xí)3.vbp工程,修改程序,使得該程序具有將畫的圖形保存下來。5-3滾動條控件有水平滾動條(hscrollbar)和垂直滾動條(vscrollbar),它們除了方向不同外,兩者的用法和接口成員是完全相同,下表是滾動條的關(guān)鍵性接口成員:類別名稱說明屬性min滾動條的最小值max滾動條的最大值smallchage單擊滾動條上升按鈕或下降按鈕變動值largechange單擊滾動條空白處的變動值value滾動條的當(dāng)前值事件change當(dāng)value屬性值改變時(shí)發(fā)生這個(gè)事件,13,例:在窗體上放置一個(gè)滾動條要控件,要求將滾動條的值顯示在文本框(ch05練習(xí)7.vbp)在vscrollbar1對象的屬性值設(shè)置如下:min0max100smallchange1largechange10,14,例:設(shè)計(jì)一個(gè)調(diào)色板應(yīng)用程序(ch05練習(xí)8.vbp)提示:要使用到一個(gè)RGB函數(shù)格式:RGB(red,green,blue)其中:red、green、blue數(shù)值:0255功能:返回一個(gè)RGB顏色值,15,5-4計(jì)時(shí)器控件計(jì)時(shí)器控件是一種按一定時(shí)間間隔觸發(fā)事件的控件,在應(yīng)用程序中用于在一定時(shí)間間隔執(zhí)行某些操作。關(guān)鍵性接口成員:類別名稱說明屬性name對象名稱enable決定對象是否有interval觸發(fā)計(jì)時(shí)器兩個(gè)事件之間毫秒數(shù)。單位為毫秒(1/1000秒)取值范圍:064767事件timer在間隔了一個(gè)interval設(shè)定時(shí)間后觸發(fā)該事件。過程:VB中有兩類過程1)一類是系統(tǒng)提供的內(nèi)部函數(shù)過程和事件過程。2)另一類是用戶根據(jù)自已需要定義,供事件過程多次調(diào)用的過程。,16,使用過程的好處是使程序簡練,便于調(diào)試和維護(hù)。在VB中自定義過程分以下幾種:以“sub”保留字開始的子過程以“function”保留字開始的函數(shù)過程以“property”保留字開頭的屬性過程以“event”保留字開始的事件過程1)過程的定義自定義過程和函數(shù)方法:在窗體/標(biāo)準(zhǔn)模式塊的代碼窗口中把插入點(diǎn)放在所有過程之外,輸入子過程名或function函數(shù)過程名即可。自定義過程形式:staticpublicprivatesub子過程名(參數(shù)列表)局部變量或常量定義語句exitsub語句endsub,17,自定義函數(shù):staticpublicprivatefunction函數(shù)過程名(參數(shù)列表)as類型局部變量或常量定義語句函數(shù)名=返回值exitfuntion語句函數(shù)名=返回值endfunction參數(shù)列表:byval變量名as類型,byval變量名as類型有形參和啞元(byval變量名是形參),形參是按值傳遞,啞元是按地址傳遞,(亦稱引用傳遞),亦可以無參數(shù),但在函數(shù)過程中無參數(shù)時(shí)亦要加“()”在定義函數(shù)過程中,缺省as類型則函數(shù)值是變體類型,18,例:設(shè)計(jì)一個(gè)倒計(jì)時(shí)應(yīng)用程序(ch05/練習(xí)9.vbp),分析:1)單擊“設(shè)置倒計(jì)時(shí)按鈕時(shí),輸入倒計(jì)時(shí)分鐘數(shù),顯示格式:mm:ss2)單擊“開始倒計(jì)時(shí)”按鈕后,每隔一秒鐘,必須重新向label框caption賦值所剩分鐘數(shù),顯示格式:mm:ss3)在窗體中添加一個(gè)計(jì)時(shí)器:erval=1000,19,當(dāng)timer1.enable=true則每隔一秒觸發(fā)timer1_timer事件,在該事件中向label框的caption賦以所剩的時(shí)間,顯示格式:mm:ss,ss1(秒),T,F,mm1(分),T,F,時(shí)間到timer1.enable=false退出程序,mm=mm-1,ss=59,ss=ss-1,顯示時(shí)間label1.caption=timestring(mm,ss),20,4)由于輸入的倒計(jì)時(shí)數(shù)是數(shù)值,且程序中mm,ss亦是數(shù)值型變量,所以必須編寫一個(gè)函數(shù)將這些時(shí)間轉(zhuǎn)換為指定格式:mm:ssDimmm,ssAsIntegermm表示分,ss表示秒,都是全局變量Functiontimestring(ByValmAsInteger,ByValsAsInteger)Dimmstr,sstrAsStringIfm10Thenmstr=0+Trim(Str(m)m表示分,s表示秒Elsemstr=Trim(Str(m)EndIfIfs10Thensstr=0+Trim(Str(s)Elsesstr=Trim(Str(s)EndIftimestring=mstr+:+sstrEndFunction,21,利用圖片框和計(jì)時(shí)器設(shè)計(jì)簡單動畫我們常希望在屏幕上出現(xiàn)動畫效果,比如汽車向前行駛、地球繞太陽旋轉(zhuǎn)等。其實(shí)簡單的動畫無非是使用一個(gè)圖像連續(xù)地在屏幕上移動位置而已。復(fù)雜一些動畫除了將一個(gè)圖像整體移動外,還可以改變圖像的形狀和尺寸。在VB中實(shí)現(xiàn)動畫有如下幾種方法:1)使用move方法移動控件或圖片2)改變圖像的位置和尺寸,達(dá)到動畫效果3)在不同位置顯示不同的圖片不論是用何種方法,都有可以用計(jì)時(shí)器定時(shí)觸發(fā)有關(guān)動畫的事件過程,用計(jì)時(shí)器的inetrval屬性控制圖像移動速度。Move方法:對象名.moveleft,top,width,lengthleft:表示對象左邊框離窗體邊框距離top:表示對象頂部與窗體頂部之間距離width:表示對象新寬度length:表示對象新高度,22,例:以藍(lán)天白云為背景,顯示地球圍繞太陽旋轉(zhuǎn)的畫面。(ch05練習(xí)9a.vbp),分析:1)放置一個(gè)picturebox在窗體上與窗體大小相同,放置背景圖clouder.bmp2)在picture1上放置兩個(gè)image1,image2。,23,在form_load事件中:將image1.stretch=trueimage2.stretch=true將image1移到屏幕中心并裝入圖片sum.ico,在image2中裝入earth.ico3)地球繞著太陽作園周運(yùn)動(園周半徑r=1500)即是說:image2控件的左上角坐標(biāo)(x,y)是不斷變化。,width/2,i,r,(x,y),x=r*cos(i)+width/2-image2.width/2y=height/2-r*sin(i)-image2.height/2,24,我們想每0.1秒更換一次(x,y)值,則在erval=100在timer1_timer事件中寫下:PrivateSubTimer1_Timer()Dimx,yAsSingleDimrAsIntegerStaticiAsSingler=1500 x=Cos(i)*r+Width/2-Image2.Width/2y=Height/2-r*Sin(i)-Image2.Height/2i=i+0.1Image2.Movex,yEndSub,25,例:在窗體上畫一幅明月高掛、群星閃爍的畫面。要求在程序開始運(yùn)行時(shí),將一個(gè)月亮的圖形裝入到圖像框中。窗體上有一個(gè)計(jì)時(shí)器,其interval屬性值為500,因此計(jì)時(shí)器每隔0.5秒發(fā)生一次timer事件。在timer事件過程中,在隨機(jī)產(chǎn)生的500個(gè)(x,y)坐標(biāo)處以白色“點(diǎn)亮”該點(diǎn)。因此出現(xiàn)500個(gè)亮點(diǎn),然后以cls方法清除屏幕。在下一次timer事件發(fā)生時(shí),又出現(xiàn)另外500個(gè)點(diǎn),然后又清除屏幕。如此反復(fù)就出現(xiàn)“群星閃爍”的效果。(ch05練習(xí)9c.vbp),26,5-5文件夾控件文件夾控件包含:驅(qū)動器列表框:drivelistbox文件夾列表框:dirlistbox文件列表框:filelistbox驅(qū)動器列表框:當(dāng)drivelistbox放置在窗體之后,它會顯示當(dāng)前驅(qū)動器,而拉下右邊的下拉按鈕,可以列出當(dāng)前計(jì)算機(jī)所有的磁盤驅(qū)動器,經(jīng)用戶選擇后,可改變當(dāng)前驅(qū)動器。,27,類別名稱說明屬性drive讀?。ㄐ薷模┊?dāng)前驅(qū)動器號事件change當(dāng)前驅(qū)動器有所變動時(shí)則發(fā)生該事件。文件夾列表框:當(dāng)dirlistbox放置在窗體之后,它會顯示當(dāng)前文件夾,而且用戶也可以改變這個(gè)文件夾。在程序中,可以通過它的path屬性讀取當(dāng)前文件夾或改變當(dāng)前文件夾,類別名稱說明屬性path讀?。ㄐ薷模┊?dāng)前文件夾事件change當(dāng)前文件有所變動時(shí)則發(fā)生該事件。,28,文件列表框:,當(dāng)filelistbox放置在窗體之后,它會顯示某個(gè)指定文件夾(由path屬性決定)的某類文件列表(由pattern屬性決定)。剛放置在窗體上的filelistbox控件pattern屬性值為“*.*”,表示顯示所有文件,但是可以利用屬性來改變它的值。當(dāng)用戶從文件夾列表框中選擇了文件,程序可以利用filename屬性讀取這個(gè)文件名。類別名稱說明事件click當(dāng)在文件列表框中選取了文件時(shí)發(fā)生該事件。屬性path當(dāng)前文件夾filename被選定的文件名稱pattern用來篩選filelistbox的文件,29,Filelistbox、dirlistbox、drivelistbox的連動:1)使文件夾列表框可以顯示驅(qū)動器中的文件夾。PrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSub2)使得filelistbox得以顯示當(dāng)前文件夾中的文件PrivateSubDir1_Change()File1.Path=Dir1.PathEndSub3)讀取在文件列表框中選取文件的完整文件標(biāo)識符賦給字符串變量,并輸出到立即窗口。PrivateSubFile1_Click()DimfullpathAsStringIfRight(File1.Path,1)Thenfullpath=File1.Path+File1.FileNameElsefullpath=File1.Path+File1.FileNameEndIf,30,Debug.PrintfullpathEndSub例:編寫一個(gè)簡單圖像瀏覽器程序(ch05練習(xí)12.vbp)5-6通用對話框在工具箱中添加commondialog控件單擊“工程/部件”引用“microsoftcommondialogcontrol6.o”commondialog控件顯示方法方法顯示的對話框showopen“打開”或“open“對話框showsave“另存”或“savefileas”對話框showcolor“顏色”或“color”對話框showfont“字體”或“fint”對話框showprinter“打印”或“printr”對話框showhelp調(diào)用windows幫助對話框,31,設(shè)置對話框標(biāo)題等信息屬性名稱說明dialigtitle對話框標(biāo)題initdir起始文件夾filename文件名稱filter文件類型filterindex默認(rèn)的filter索引flags標(biāo)志,參閱后面的說明filter屬性設(shè)置格式:filter=“篩選描述1|篩選條件1|篩選描述2|篩選條件2”讀取用戶所選取的文件屬性名稱說明filetitle文件名稱,但不含路徑filename文件名稱,含完整路徑例:修改ch05練習(xí)12.vbp,選擇圖片文件采用commondialog對話框。(ch05練習(xí)14.vbp),32,例:修改上一題,希望以原圖來顯示,如果圖像比顯示區(qū)小,那么將圖像顯示在顯示區(qū)的中央,如果圖像比顯示區(qū)大,就提供滾動條讓用戶瀏覽顯示區(qū)外的圖像。(ch05練習(xí)15.vbp)1)把image設(shè)置在picturebox中央image1.left=(picture1.scalewidth-image1.width)/2image1.top=(picture1.scaleheight-image1.height)/22)顯示大圖像的技巧如果picturebox里的image(用來顯示圖像)比picturebox大,則image超出picturebox的部分就不會被顯示出來。,x,y,-x,-y,紅線:表示picturebox虛綠線:表示image黑色點(diǎn)劃線:表示移動后image,(-x,-y),33,要顯示右方和下方超出部分,該怎樣辦?把image的左上角坐標(biāo)(left,top)設(shè)置成負(fù)值(-x,-y)后,則垂直坐標(biāo)小于Y,水平坐標(biāo)小于X的部分不會顯示出來,而將圖像右下方的區(qū)域顯示出來。即:image1.left=-(image1.width-picture1.scalewidth)image1.top=-(image1.height-picture1.scaleheigh)3)為了讓用戶方便瀏覽全部的圖像,還在設(shè)置一個(gè)水平滾動條和一個(gè)垂直滾動條,而滾動條的幾個(gè)關(guān)鍵屬性設(shè)置為: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寬,才正確,34,4)圖像滾動:當(dāng)單擊水平滾動條時(shí),會觸發(fā)事件:privatesubhscroll1_c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能網(wǎng)聯(lián)汽車技術(shù)概論復(fù)習(xí)題及答案
- 焊縫大小頭項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 青少年眼健康指南
- 中國灌溉農(nóng)業(yè)行業(yè)市場深度分析及行業(yè)發(fā)展趨勢報(bào)告
- 藥店服務(wù)培訓(xùn)課件
- 2024-2030年中國老婆餅行業(yè)市場發(fā)展監(jiān)測及投資潛力預(yù)測報(bào)告
- 2025年 危險(xiǎn)化學(xué)品生產(chǎn)單位安全生產(chǎn)考試練習(xí)題附答案
- 2025年 勞動關(guān)系協(xié)調(diào)員理論考試模擬練習(xí)題附答案
- 中國實(shí)驗(yàn)室安全柜行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報(bào)告
- “十三五”規(guī)劃重點(diǎn)-海洋波浪發(fā)電生產(chǎn)建設(shè)項(xiàng)目建議書(立項(xiàng)報(bào)告)
- 國家開放大學(xué)《創(chuàng)建小企業(yè)》形考任務(wù)1-4參考答案
- 企業(yè)常見稅務(wù)風(fēng)險(xiǎn)及應(yīng)對精講課件
- 2024年貴州省貴陽市中考生物地理合卷試題(含答案逐題解析)
- DL∕T 740-2014 電容型驗(yàn)電器
- 蘇州市2023-2024高二下學(xué)期期末地理試卷及答案
- 辦公室主任試用期工作總結(jié)范文
- MOOC 人工智能基礎(chǔ)-國防科技大學(xué) 中國大學(xué)慕課答案
- 數(shù)學(xué)的天空智慧樹知到期末考試答案2024年
- 情商認(rèn)知與提升智慧樹知到期末考試答案2024年
- 健康與免疫智慧樹知到期末考試答案2024年
- 知識產(chǎn)權(quán)校園講座
評論
0/150
提交評論