《VB基礎(chǔ)語法》PPT課件
《《VB基礎(chǔ)語法》PPT課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《《VB基礎(chǔ)語法》PPT課件(44頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第三章 VBS的基本語法,3.1 基本數(shù)據(jù)類型 數(shù)值型 integerlongsingledoublecurrencybyte 字符串類型 string 日期類型 date 同時(shí)表示日期和時(shí)間 dim firstday as date firstday=#99/12/31# firstday=“99/12/31” firstday=“22:30:50”,邏輯類型 boolean 邏輯型變量的取值范圍只能是true(-1)或false(0)。 Dim switch as boolean switch=true switch=-1 這兩條賦值語句功能是相同。 變體類型 variant 變體型變量
2、是一種十分靈活的變量,可以保存各種類型 的數(shù)據(jù)。在定義變量中沒有明確指明數(shù)據(jù)類型時(shí),變量缺省時(shí)定義為變體類型。 dim x dim y as variant 上述兩個(gè)語句都是定義一個(gè)變體變量。,對(duì)象類型 定義對(duì)象變量時(shí),可以直接指明對(duì)象的類型。 dim obj1 as commandbutton dim obj2 as textbox 定義了對(duì)象變量后,使用set語句為對(duì)象變量賦值。 Set obje=command1 obj1.caption=“打開” 修改命令按鈕的標(biāo)題 obj1.fontbold=true 用戶自定義類型 它類似于C語言中的“結(jié)構(gòu)體”類型的數(shù)據(jù)。 Type 類型名
3、元素名 as 類型 元素名 as 類型 元素名 as 類型 end type,例:定義一個(gè)employee(職工)類型,其中包括職工號(hào)、姓名、年齡。 Type employee empno as integer name as string*10 age as integer end type dim emp as emloyee 在后面的程序中我們可以用“變量.元素”這樣的形式來引用各個(gè)成員。 emp.name=“張三” emp.no=83001 emp.age=21 3.2 變量的聲明 在VB中使用一個(gè)變量時(shí),可不加任何聲明而直接使用,叫做隱式聲明。使用這種方
4、法雖簡(jiǎn)單,但卻不利于程序調(diào)試,所以一般對(duì)于變量最好先聲明,后使用。設(shè)置方式: 在“工具”菜單中選“選項(xiàng)”,在對(duì)話框中選“編輯器”,在“要求變旦聲明”中選中。 dim 變量名 as 數(shù)據(jù)類型 dim name as string dim sum(3) as integer,使用static聲明變量 static 變量名 as 數(shù)據(jù)類型 static a as integer 使用static聲明變量為靜態(tài)變量。它與dim聲明的變量不同之處在于在執(zhí)行一個(gè)過程結(jié)束時(shí),過程中所用到的static變量的值會(huì)保留,下次再調(diào)用此過程時(shí),變量的初值是上次調(diào)用結(jié)束時(shí)被子保存留的值,而dim 聲明的變量在過程結(jié)
5、束時(shí)不保留,每次調(diào)用時(shí)需要重新初始化。 3.3 運(yùn)算符和表達(dá)式 算術(shù)運(yùn)算符 +-*/(整除)mod 關(guān)系運(yùn)算符 == 邏輯運(yùn)算符 notandorxor(邏輯異或)eqv(邏輯等于),3.3 字符串連接運(yùn)算符 +& c=“abcd” + “ef” c=“abcd” & “ef”這兩式子的運(yùn)算結(jié)果是相同。 但是,由于“+”號(hào)同時(shí)也是加法運(yùn)算符,VB又支持變體型的變量,所以將加號(hào)用做字符串連接運(yùn)算符有時(shí)會(huì)引起混淆。因此,在進(jìn)行字符串連接時(shí)應(yīng)該 選用“&”操作符而不是“+”操作符。 3.4 基本語句 賦值語句 變量名=表達(dá)式 條件語句 1)if then 語句 2)if then 語句組
6、 endif,3)if then 語句組1 else 語句組2 endif (例:ch03 ex3.vbp) 4)if then 語句組1 else if then 語句組2 else 語句組3 endif (例:ch03ex4.vbp),,,,,,,語句組1,條件,語句組2,,,,,T,F,,,條件1,,,,語句組1,,,條件2,,,,語句組2,,語句組3,,,,,,,,T,F,T,F,多分支語句 select case 變量或表達(dá)式 case 值1 語句組1 case 值2 語句組2 case 值3
7、語句組3 case else 語句組n end select (例:ch03ex5.vbp) 變量或表達(dá)式:可以是整型或字符串表達(dá)式 值:是一組用逗號(hào)分隔枚舉值。,(例:編寫一個(gè)分?jǐn)?shù)等級(jí)轉(zhuǎn)換表 分?jǐn)?shù)等級(jí) =90 優(yōu) =80 良 =70 中 =60 及格 <=60 不及格 x = Val(Text1.Text) Select Case x 10 Case 10, 9 Text2.Text = 優(yōu) Case 8 Text2.Text = 良 Case 7 Text2.Text = 中 Case 6 Te
8、xt2.Text = 及格 Case 0, 1, 2, 3, 4, 5 Text2.Text = 不及格 End Select 轉(zhuǎn)向語句 goto 標(biāo)號(hào) on 表達(dá)式 goto 標(biāo)號(hào)1,標(biāo)號(hào)2,,循環(huán)語句 1)do while 條件 語句體 exit do 語句體 loop 2)do 語句體 exit do 語句體 loop while 條件 條件真時(shí)退出循環(huán) 3)do until 條件 條件假時(shí)執(zhí)行循環(huán)體 語句體 exit do 語句體 loop 4)for 循環(huán)變量=初值 to 終值 step步長(zhǎng) 語句體
9、 exit for 語句體 next 循環(huán)變量,例:(實(shí)驗(yàn)書第三章練習(xí)三)編寫求一元二次方程根。(ch03練習(xí)3.vbp) 注:format(numer,fmt) 功能:將數(shù)值型量轉(zhuǎn)為字符型量。 Numer:為一個(gè)數(shù)值型 量。 Fmt:為用戶定義格式。 #:顯示數(shù)字,不在前或后補(bǔ)0。 0:顯示數(shù)字,在前或后補(bǔ)0 . :小數(shù)點(diǎn)。 ,:千位符。 %:百分比。 例:x=2.33333 format(x, “##.##”) 結(jié)果為:2.33 字符串 例:求 1+2+3++100的和 (ch03ex6.vbp) 例:設(shè)計(jì)一個(gè)窗體打印九九乘法表 (ch03ex7.vbp) 例:編寫求1*1+2*
10、2+3*3+100*100的和。 Vb常用函數(shù):(見P67),,3.5 以對(duì)象為核心的程序設(shè)計(jì) 在VB的程序設(shè)計(jì)中,對(duì)象起著最重要的角色,窗體是一個(gè)對(duì)象,每一個(gè)放置在窗體上控件也都是對(duì)象。由于VB是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它的代碼結(jié)構(gòu)與對(duì)象有著很大關(guān)系,在VB中每一 個(gè)窗體和控件都有一些預(yù)先定義好了的事件。 例:命令按鈕對(duì)象,當(dāng)用戶單擊命令按鈕時(shí),命令按鈕對(duì)象會(huì)產(chǎn)生click事件。,,Click事件,,Private sub command1_click() 被驅(qū)動(dòng)執(zhí)行的程序 end sub,(單擊鼠標(biāo)左鍵),對(duì)程序而言,可以不處理這個(gè)事件,此時(shí)這個(gè)事件對(duì)程序便沒有什么作用。但是如果程序要處
11、理這個(gè)事件,該如何進(jìn)行?,因此,如果覺得某個(gè)對(duì)象的某種事件有進(jìn)行處理的必要,則以“該 對(duì)象的名稱”與“該事件的名稱”定義這個(gè)事件程序,如下示: private sub 對(duì)象名_事件名() 在此編寫希望被驅(qū)動(dòng)執(zhí)行的程序 end sub 將來該對(duì)象的這個(gè)事件發(fā)生時(shí),其對(duì)應(yīng)的事件程序會(huì)被驅(qū)動(dòng)。以后學(xué)習(xí)每一種對(duì)象時(shí),需了解該對(duì)象會(huì)產(chǎn)生哪些事件和事件發(fā)生時(shí)機(jī),這樣才能讓用戶與所編寫的程序充分產(chǎn)生交互關(guān)系。 了解對(duì)象的特性 其實(shí)很多對(duì)象只要看它的名字,就可以了解它的基本特性。 例如:textbox 同時(shí)亦可以通過了解對(duì)象的屬性。 懂得控制對(duì)象 控制對(duì)象的方法不外乎以下兩種: 1
12、)設(shè)置對(duì)象屬性 2)調(diào)用對(duì)象方法,其實(shí)方法是對(duì)象內(nèi)部的子程序,這種子程序的作用是要求對(duì)象執(zhí)行某件工作。 例如:很多控件都具有move方法,調(diào)用這個(gè)方法可讓控件移動(dòng)它的位置。 查閱“方法” 要了解某一種對(duì)象提供了哪些方法,可以打開該 對(duì)象的MSDN幫助文件,再選取“方法”選。 3.6 常用事件在程序設(shè)計(jì)中應(yīng)用 事件驅(qū)動(dòng)模式是VB程序的主流,我們必須了解每一種對(duì)象會(huì)產(chǎn)哪些事件,以及這些事件產(chǎn)生的時(shí)機(jī)。隨著對(duì)象在特性上的差異,可能產(chǎn)生的事件也會(huì)有的不同。下面先介紹一些常用事件,及在程序設(shè)計(jì)中應(yīng)用。 生與滅事件 事件 發(fā)生時(shí)機(jī) initialize 窗體第一次被裝入時(shí)
13、terminate 窗體最后一次被卸載時(shí) load 窗體每一次被裝入時(shí) unload 窗體每一次被卸載時(shí) queryunload 窗體每一次被卸載時(shí),Initialize與load事件區(qū)別 同樣都是發(fā)生在窗體被裝入時(shí),兩者很容易混淆,實(shí)際上intialize事件只有在窗體第一次被裝入時(shí)發(fā)生,而load事件是在窗體每次被裝入時(shí)都有發(fā)生。 例:打開第三章formlife.vbp 什么程序代碼寫在intialize或load事件程序? 1)控件的初始化:幾乎都是放在load事件程序中,因?yàn)榭丶?huì)隨著窗體的卸載而一起被清除,所以每次被裝入時(shí)都
14、要進(jìn)行初始化。 2)變量的初始化:放在initialize事件程序中居多,因?yàn)樽兞康膬?nèi)容光煥發(fā)不會(huì)隨著窗體的卸載波而消失。當(dāng)然,如果希望每次窗體被裝入時(shí)都有重新設(shè)置變量的內(nèi)容,就要將變量的初始化放在load事件程序中。 如何禁止用戶使用關(guān)閉按鈕半閉窗體? 在unload事件程序中含有一個(gè)cancel參數(shù),如果將這個(gè)參數(shù)設(shè)置為true則窗體就不能關(guān)閉。,例:在程序中不允許用戶通過單擊關(guān)閉按鈕關(guān)閉窗體。 Dim switch as boolean form_unload if not switch then cancel=true endif end sub command1_cli
15、ck switch=true unload me end sub Queryunloadd與unload事件有何區(qū)別 queryunload比unload事件先發(fā)生。,Queryunload事件比unload事件多了一個(gè)unloadmode參數(shù) unloadmode可以取值 意義 vbformcontrolmenu(=0) 用戶單擊窗體上的關(guān)閉按鈕 vbformcode(=1) unload語句調(diào)用 vbappwindows(=2) 用戶結(jié)束windows操作系統(tǒng) 也即可以利用unloadmode參數(shù)來判斷用戶是否用鼠標(biāo)單
16、擊了窗體上的關(guān)閉按鈕。借助queryunload事件的參數(shù)簡(jiǎn)化上面的程序。 Private sub command1_click() unload me end sub private sub form_queryunload(cancel as integer,unloadmode as integer) if unloadmode=vbformcontrolmenu then cancel=true end sub,,Queryunload事件另一個(gè)應(yīng)用: 經(jīng)常用來檢驗(yàn)程序結(jié)束前,窗口關(guān)閉前是否已經(jīng)保存了該保存的東西,如果尚未保存,就顯示一個(gè)對(duì)話框的信息。 對(duì)話框msgbox函數(shù)使用。
17、 Msgbox函數(shù)格式: msgbox(prompt ,buttons,title) prompt:是一個(gè)字符串,設(shè)置顯示在對(duì)話框中信息內(nèi)容。 Buttons:(可選參數(shù))用于顯示對(duì)話框中顯示按鈕數(shù)。形式、圖樣見P77。 Tile:(可選參數(shù))設(shè)置顯示在對(duì)話框標(biāo)題中信息。,,,title,prompt,,,,,,buttons,例:練習(xí)使用msgbox函數(shù)(ch03練習(xí)11.vbp) 1)調(diào)用msgbox顯示兩個(gè)按鈕(是,否),提示信息“要關(guān)閉窗體嗎?”。是,關(guān)閉窗體,否, 2)調(diào)用msgbox提示信息為“操作錯(cuò)誤”顯示圖標(biāo)為 3)調(diào)用msgbox提示信息為“沒有滿足條件的記錄”,顯示圖標(biāo)為
18、: 例:(第三章練習(xí)5)編寫一個(gè)程序,當(dāng)用戶單擊窗體關(guān)閉按鈕時(shí),彈出對(duì)話框,要用戶確定是否真的關(guān)閉窗體,是關(guān)閉,否取消關(guān)閉窗體。 狀態(tài)改變的事件 事件發(fā)生時(shí)機(jī) activate 當(dāng)窗體成為活動(dòng)窗口時(shí) deactivate 當(dāng)窗體不再是活動(dòng)窗口時(shí) gotfocus 對(duì)象獲得焦點(diǎn)時(shí) lostfocus 對(duì)象丟失焦點(diǎn)時(shí) rezies 對(duì)象大小改變時(shí),Activate與gotfocus事件有何區(qū)別 只有窗體對(duì)象才有activate事件,其他控件都有沒有activate事件,它表示窗體變成“活動(dòng)窗口” gotfocus事件中,除
19、了窗體對(duì)象含有這個(gè)事件外,其它控件如命令按鈕,文本框、復(fù)選框、圖片框等,也都有含有這個(gè)事件。 當(dāng)光標(biāo)落在某個(gè)對(duì)象上(對(duì)象獲得焦點(diǎn)時(shí))則會(huì)發(fā)生gotfocus事件。 例:當(dāng)輸入光標(biāo)移到textbox時(shí),整個(gè)textbox都變成被選區(qū)。 注:在textbox控件對(duì)象中有兩個(gè)屬性,用途是用來設(shè)置選取區(qū)。 Selstart 設(shè)置選取區(qū)的起始位置 sellength 用來設(shè)置選區(qū)的長(zhǎng)度 private sub text1_gotfocus() text1.selstart=0 text1.sellength=len(text1.text) end sub 例:(第三章練習(xí)六)當(dāng)輸入光標(biāo)移到t
20、extbox時(shí),希望將其文字顏色設(shè)置為紅色,以提醒用戶注意,當(dāng)輸入光標(biāo)離開textbox其文字還原原來的黑色。,當(dāng)窗體大小改變時(shí)會(huì)發(fā)生resize事件 例:讓控件隨著窗體一起調(diào)整大小。(在窗體上放置textbox及picturebox) private sub form_resize() text1.left=0 text1.top=0 text1.width=me.scalewidth/2 text1.height=me.scaleheight picture1.left=me.scalewidth/2 picture1.top=0 picture1.height=me.scaleheigh
21、t end sub 鍵盤類事件 事件 發(fā)生時(shí)機(jī) keypress 用戶按下鍵盤并且放開時(shí) keydown 用戶按下鍵盤時(shí) keyup 用戶放開按鍵時(shí),例:(ch03/ex12.vbp)P85 鼠標(biāo)類事件 事件 發(fā)生時(shí)機(jī) click 用戶在對(duì)象上按下鼠標(biāo)左鍵并且放開時(shí) dblclick 用戶在對(duì)象上面雙擊鼠標(biāo)時(shí) mousedown 用戶在對(duì)象上面按下鼠標(biāo)左鍵時(shí) mouseup 用戶在對(duì)象上面放開鼠標(biāo)左鍵時(shí) mousemove 用戶在對(duì)象上面移動(dòng)鼠標(biāo)時(shí) mouseup和click事件有何
22、區(qū)別 1)如果用戶在對(duì)象上按下鼠標(biāo)左鍵,而鼠標(biāo)仍然在對(duì)象上時(shí)放開鼠標(biāo),會(huì)先發(fā)生mouseup事件再發(fā)生click事件。 2)若用戶在對(duì)象上按下鼠標(biāo)左鍵,然后將鼠標(biāo)移到對(duì)象之外再放開鼠標(biāo):只發(fā)生mouseup事件。 3)若用戶在對(duì)象之外按下鼠標(biāo)左鍵,然后將鼠標(biāo)移到對(duì)象上再入開鼠標(biāo):只發(fā)生mouseup事件。,Mouseup與click選擇 在windows操作的慣例中,所謂“用鼠標(biāo)單擊”指的是“按下鼠標(biāo)左鍵,不要移開鼠標(biāo)并放開鼠標(biāo)左鍵”(也就是click意思)。因此,如果程序想要針對(duì)用戶“用鼠標(biāo)單擊”做反應(yīng),就應(yīng)該 將程序編寫在click事件程序中。 至于mouseup事件通常與mousedow
23、n配對(duì)使用。 例:寫一個(gè)可供用戶畫線的程序,當(dāng)用戶按下鼠標(biāo)左鍵時(shí),決定線段的第一點(diǎn),然后用戶會(huì)移動(dòng)鼠標(biāo),當(dāng)放開鼠標(biāo)左鍵時(shí),就由第一點(diǎn)畫一條線到鼠標(biāo)指針?biāo)诘奈恢谩?ch03練習(xí)7a.vbp) 如何在對(duì)象上作圖 1)用pset方法畫點(diǎn) 格式:對(duì)象名.pset (x,y) ,顏色 其中顏色可以用RGB函數(shù)指定或符號(hào)常量(vbred vbgreen vbblue) rgb(red,green,blue) 其中:red,green,blue取值0255的整數(shù)。點(diǎn)的大小由對(duì)象的drawWidth屬性決定。 功能:返回一個(gè)顏色值。,,例:在窗體中隨機(jī)地顯示若干彩色的點(diǎn)。窗體上有兩個(gè)命令按鈕:“畫點(diǎn)”和“退
24、出”。單擊“畫點(diǎn)”按鈕,則在窗體上隨機(jī)畫上若干點(diǎn)。單擊“退出”按鈕,結(jié)束程序的運(yùn)行。(ch03練習(xí)13.vbp) Private Sub Command1_Click() For i = 1 To 3000 x = Rnd * Width y = Rnd * Height r = Int(256 * Rnd) g = Int(256 * Rnd) b = Int(256 * Rnd) PSet (x, y), RGB(r, g, b) Next i End Sub,例:設(shè)計(jì)一個(gè)窗體使用鼠標(biāo)在其上任意繪制圖形。(ch03ex8.vbp) Dim mouse As Boolean mouse變
25、量用來標(biāo)志畫圖的開始 Private Sub Form_Load() mouse = False Me.ForeColor = vbRed Me.DrawWidth = 2 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) mouse = True PSet (X, Y) End Sub,Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
26、Single) If mouse Then PSet (X, Y) End If End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) mouse = False End Sub,2)line方法 對(duì)象.line step(x1,y1) - step(x2,y2),顏色,BF 功能:用來畫直線和矩形框等。 Step:設(shè)置坐標(biāo)值是絕對(duì)坐標(biāo)還是相對(duì)坐標(biāo)。(有step 是相對(duì)坐標(biāo)) 缺省step(x1,y1)時(shí):從上一次畫圖點(diǎn)到當(dāng)前點(diǎn)畫直線。 選擇B:利用對(duì)角坐標(biāo)
27、畫出矩形。 選擇F:矩形以矩形邊框填充。 直線的寬度由對(duì)象的drawWidth指定,直線的樣式由對(duì)象的drawStyle屬性指定。(P145) 3)circle方法 對(duì)象.circle step(x,y),r,c,sang,eang,mod (x,y) 園、園弧或者橢圓的園心坐標(biāo)。 r 園、園弧的半徑。 c 設(shè)置繪圖顏色。 sang 在畫園弧時(shí)設(shè)置園弧或橢圓弧的起始角度(0--2)。 eand 在畫園弧時(shí)設(shè)置園弧或橢圓弧的終止角度(0--2) 。 Mod 在畫橢圓時(shí)設(shè)置橢圓的縱橫比值(大于1則橢圓細(xì)而高) 園的樣式:由對(duì)象的fillStyle屬性決定。P150。線的寬度由對(duì)象的dr
28、awWidth指定,線的樣式由對(duì)象的drawStyle屬性指定。 畫扇形:則起始角及終止角都是取負(fù)值。(ch03ex10.vbp),例:設(shè)計(jì)一個(gè)窗體,單擊繪圖按鈕時(shí),在窗體繪制如下圖形:(ch03ex9.vbp),Private Sub Command1_Click() Circle (2500, 1500), 1000 Circle (2500, 1500), 1000, , , , 2.5 Form1.FillStyle = 7 Circle (2500, 1500), 1000, , , , 0.4 End Sub,例:設(shè)計(jì)一個(gè)窗體,在上面繪制如下圖所示的弧和扇形(ch03ex10.vb
29、p),Const pi = 3.14159 Private Sub Form_Load() Me.Show Me.ForeColor = vbRed Me.DrawWidth = 2 Circle (1800, 500), 1000, , -pi, -1.5 * pi Circle (3500, 500), 1000, , pi, 1.5 * pi End Sub,例: 1)在picture1(300,300)上畫一點(diǎn),(ch03畫圖方法.vbp) 2)在picture1上畫從(600,600)(1000,1000)兩點(diǎn)直線,顏色紅色。 3)在picture1上畫以點(diǎn)(1200,1000)到點(diǎn)
30、(2000,2500)對(duì)角點(diǎn)矩形,顏色為綠色。 4)在picture1上畫以(1500,600)為園心半徑200,顏色為藍(lán)色的園。 5)在picture1上畫園弧,以(4500,600)為園弧園心,半徑400,起始角900,終止角2700。 6)在picture1上畫橢圓,橢園園心為(3500,1500),半徑為500,橢園橫軸與縱軸比率0.5,線條顏色為黃色。,例:設(shè)計(jì)一個(gè)窗體,根據(jù)用戶輸入的三個(gè)班的學(xué)生人數(shù),顯示各班人數(shù)所占比例的餅圖(ch03ex11.vbp),Option Explicit Const pi = 3.14159 Private Sub Command1_Click()
31、Dim a, b, c, s, i As Integer a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) s = a + b + c,Picture1.FillStyle = 0 For i = 1 To 200 Picture1.FillColor = vbRed Picture1.Circle (1500, 1500 - i), 1000, vbRed, -2 * pi, -2 * pi * a / s, 2 / 3 Picture1.FillColor = vbGreen Picture1.Circle (1500,
32、 1500 - i), 1000, vbGreen, -2 * pi * a / s, -2 * pi * (a + b) / s, 2 / 3 Picture1.FillColor = vbBlue Picture1.Circle (1500, 1500 - i), 1000, vbBlue, -2 * pi * (a + b) / s, -2 * pi, 2 / 3 Next i Picture1.FillColor = vbRed Picture1.Circle (1500, 1500 - i), 1000, vbWhite, -2 * pi, -2 * pi * a / s, 2 /
33、3 Picture1.FillColor = vbGreen Picture1.Circle (1500, 1500 - i), 1000, vbWhite, -2 * pi * a / s, -2 * pi * (a + b) / s, 2 / 3 Picture1.FillColor = vbBlue Picture1.Circle (1500, 1500 - i), 1000, vbWhite, -2 * pi * (a + b) / s, -2 * pi, 2 / 3 End Sub,回到上一例(ch03練習(xí)7a.vbp) dim x0,y0 as integer private su
34、b form_mousedown(button as integer,shift as integer, x as single, y as single) x0=x y0=y me.mousepointer=2 end sub private sub form_mouseup(button as integer, shift as integer, x as single,y as single) line (x0,y0)-(x,y) end sub,,如何讓畫線的程序具有預(yù)覽的功能?(ch03練習(xí)7.vbp) 所謂“預(yù)覽”意思是移動(dòng)鼠標(biāo)時(shí),可以看到要畫的線,而當(dāng)放開鼠標(biāo)時(shí),決定最終直線。
35、分析: 定義 全程變量 (x0,y0) 表示畫直線起始點(diǎn) (x1,y1) 表示上一次畫直線的終點(diǎn)坐標(biāo)。 1)利用mousedown獲得畫直線起始點(diǎn) x0=x, y0=y 并將畫圖方式選擇為: me.drawmode=vbnotxorpen (原值:vbcopypen) 含義:同一圖形(在同一位置上)畫兩次等于沒有畫。 2)利用mousemove(鼠標(biāo)移動(dòng)時(shí)發(fā)生事件) 首先注意畫直線起始點(diǎn)確定沒有?(有起始點(diǎn)才能畫直線 isempty(x0)=false) 第一次(從起始點(diǎn))移鼠標(biāo)時(shí)畫直線(isempty(x1)=true) line(x0,y0)-(x,y) x1=x, y
36、1=y 、,第二次(及以上)移動(dòng)鼠標(biāo)時(shí): 首先將上一次畫直線擦去 (isempty(x1)=false ) line (x0,y0)-(x1,y1) 然后再畫新的直線 line(x0,y0)-(x,y) x1=x, y1=y 3)利用mouseup事件捕獲畫直線最后一點(diǎn)。 如果有直線起始點(diǎn)(x0,y0)且有(x1,y1) 首先擦去已畫過直線 line(x0,y0)-(x1,y1) x1=empty 將畫筆改回初始值:me.drawmode=vbco
37、pypen 畫直線:line(x0,y0)-(x,y) x0=empty 4)利用isempty(變量名)判斷是否有直線的起始點(diǎn)及上一次畫直線的終止點(diǎn)。(ch03練習(xí)7.vbp) 對(duì)話框的設(shè)計(jì) 對(duì)話框是VB應(yīng)用程序與用戶進(jìn)行信息交換的窗口,可以使用VB提供函數(shù),msgbox函數(shù)或inputbox函數(shù)作為對(duì)話框,亦可以使用commondialog控件設(shè)計(jì)對(duì)話框,甚至用戶自已設(shè)計(jì)對(duì)話框。,Inputbox函數(shù) inputbox(prompt ,title) prompt:用于設(shè)定顯示在對(duì)話框中的信息內(nèi)容。 Title:是一個(gè)可選參數(shù),用于設(shè)定顯示在對(duì)話框中標(biāo)題的信息內(nèi)容。 函數(shù)返回值:返回用戶輸入
38、字符串,如果用戶單擊cancel則返回空字符串。 注意:使用inputbox函數(shù)作對(duì)話框,一般只用于簡(jiǎn)單數(shù)據(jù)輸入到窗口。 例:編寫一個(gè)具有預(yù)覽功能畫弧程序。(ch03練習(xí)10.vbp) 在對(duì)象上畫弧的方法: 對(duì)象名.circle (x,y),r,c,sang,eang 1)在通用中定義全局變量 Dim ang1, ang2 As Single Dim r1 As Single Dim x0, y0 As Single 2)在窗體上放置一個(gè)命令按鈕,單擊命令按鈕開始畫弧,輸入畫弧起始角及終止角。,Private Sub Command1_Click() pi = 3.14 ang1 = pi *
39、 (Val(InputBox(輸入起始角:))) / 180 ang2 = pi * (Val(InputBox(輸入終止角:))) / 180 End Sub 3)在mousedown事件中獲得畫弧的園心。 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) x0 = X y0 = Y Me.DrawMode = vbNotXorPen End Sub 4)在mousemove事件中,將上一次弧擦掉,畫新的弧。,Private Sub Form_MouseMove(
40、Button As Integer, Shift As Integer, X As Single, Y As Single) If Not IsEmpty(x0) Then If Not IsEmpty(r1) Then Circle (x0, y0), r1, , ang1, ang2 End If r1 = ((X - x0) 2 + (Y - y0) 2) 0.5 Circle (x0, y0), r1, , ang1, ang2 End If End Sub,5)在mouseup 事件中畫出最后圖形 Private Sub Form_MouseUp(Button A
41、s Integer, Shift As Integer, X As Single, Y As Single) If Not IsEmpty(x0) Then If Not IsEmpty(r1) Then Circle (x0, y0), r1, , ang1, ang2 End If Me.DrawMode = vbCopyPen r1 = ((x0 - X) 2 + (y0 - Y) 2) 0.5 Circle (x0, y0), r1, , ang1, ang2 x0 = Empty r1=empty End If End Sub,3.7 主動(dòng)模式的程序設(shè)計(jì) 除了“事件驅(qū)動(dòng)”
42、程序設(shè)計(jì)模式之外,VB也允許我們將程序設(shè)置成“主動(dòng)模式”。主動(dòng)模式的程序與以前我們所講DOS程序很相似。 如何將程序設(shè)置為主動(dòng)模式 1)啟動(dòng)VB,建立一個(gè)“標(biāo)準(zhǔn)EXE”工程,選取“工程/工程名稱屬性”菜單命令,在“工程屬性”對(duì)話框中,將“啟動(dòng)對(duì)象”設(shè)置為“sub main()” 2)利用菜單的“工程/添加模塊”命令新增一個(gè)模塊,在標(biāo)準(zhǔn)模塊的代碼窗口中輸入sub main子程序。 3)執(zhí)行這個(gè)程序。 例:建立一個(gè)工程名為:主動(dòng) .vbp 工程,并且在該工程中建立一個(gè)submain()子程序,讀取用戶數(shù)據(jù),且設(shè)置為啟動(dòng)對(duì)象。 1)啟動(dòng)VB,在“工程/工程屬性”中將“啟動(dòng)對(duì)象設(shè)置為:submain
43、2)在“工程/添加模塊”中添加一個(gè)標(biāo)準(zhǔn)模塊。在標(biāo)準(zhǔn)模塊代碼窗口中輸入submain子程序。,使用MSChart控件繪制圖形 除了利用line和circle方法繪制各種幾何圖形外,也可以直接利用VB中的MSChart控件支持真正的三維表示,支持所有主要的圖表類型,值和數(shù)據(jù)點(diǎn)以條形圖、折線圖、標(biāo)記圖、填充區(qū)域圖或餅圖形式顯示。,sub main() dim s as string s=inputbox(“ 請(qǐng)輸入數(shù)據(jù)“) msgbox “您輸入了” + s end sub doevents與主動(dòng)模式程序 對(duì)VB程序而言,主動(dòng)模式與事件驅(qū)動(dòng)模式是可以并存的,如果我們所編寫的程序只含有主動(dòng)模式程序代碼,將語句一行一行地編寫成主程序和相關(guān)子程序即可。 但是如果所編寫的程序同時(shí)有主動(dòng)模式和事件驅(qū)動(dòng)模式的程序代碼,那么就不應(yīng)該讓主動(dòng)模式的程序執(zhí)行費(fèi)時(shí)很多工作,因?yàn)橹鲃?dòng)模式的程序執(zhí)行時(shí),其他事件驅(qū)動(dòng)模式的程序代碼將被鎖住,而無法執(zhí)行。 當(dāng)然有時(shí)候還是很難避免讓主動(dòng)模式的程序執(zhí)行費(fèi)時(shí)很久的工作,就必須在主程序中插入doevents語句使主程序做間歇性的休息,允許其他的事件驅(qū)動(dòng)模式的程序代碼有機(jī)會(huì)被執(zhí)行。,例:打開ch03doevets.vbp工程,,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。