4,、如何充分?jǐn)U充VB功能 Visual Basic for Windowss3.0(簡(jiǎn)稱(chēng)VB)是目前開(kāi)發(fā)WINDOWS應(yīng)用軟件的最有效工具之一,,它綜合運(yùn)用了BAIC語(yǔ)言和新的 可視化設(shè)計(jì)工具,不僅功能強(qiáng)大,,而且簡(jiǎn)單易學(xué),。其次,VB具有事件驅(qū)動(dòng)的編程機(jī)制,,它充分利用WINDOWS圖形環(huán)境的特點(diǎn),,能 讓開(kāi)發(fā)人員快速地構(gòu)造強(qiáng)大的應(yīng)用程序。 那么在開(kāi)發(fā)VB應(yīng)用軟件時(shí),,如何充分地?cái)U(kuò)充VB的功能呢,?這就要求在不同的層次上要很好地利用VB最具威力和特色的部分: ●在函數(shù)層調(diào)用動(dòng)態(tài)鏈接庫(kù)。 ●在控件層使用VBX,?!裨趹?yīng)用層執(zhí)行其他應(yīng)用程序。
一,、在函數(shù)層調(diào)用功能態(tài)鏈接庫(kù)(DLL) WINDOWS操作系統(tǒng)實(shí)際上是由許多功能強(qiáng)大的動(dòng)態(tài)鏈接庫(kù)(DLL)組合而成,。VB考慮到有些工作超過(guò)自身語(yǔ)言所及的能力范圍, 所以提供了直接調(diào)用操作系統(tǒng)中這些DLL子程序的能力,。例如:在正常情況下,,窗口的控制菜單提供了七種功能:還原、移動(dòng),、 大小,、最小化、最大化,、關(guān)閉和切換,。而在實(shí)際應(yīng)用中,我們希望窗口按設(shè)計(jì)時(shí)的大小顯示,不允許用戶隨意改變窗口大小,,也 不允許切換到其他窗口,這就要求在設(shè)計(jì)時(shí)必須刪除控制菜單中除“移動(dòng)”和“關(guān)閉”選項(xiàng)以外的所有控制菜單項(xiàng),。要完成這一任務(wù),, 我們首先可把窗體的MaxButton屬性和MinButton屬性設(shè)置為False,不允許窗體最小化和最大化,,窗體也就不能還原,。然后再把 窗體的BorderSstyle屬性設(shè)置為1-Fixed Single或3-Fixed Double,不允許窗體改變大小,。但VB本身卻無(wú)法刪除“切換” 選項(xiàng)和兩條分隔線,。幸運(yùn)的是,通過(guò)調(diào)用WINDOWS DLL就很容易做到,。 通常,,要使用WINDOWS DLL,首先必須說(shuō)明要使用的DLL子程序,,我們可在兩個(gè)地方說(shuō)明所使用的DLL子程序,,即在全局模塊中 說(shuō)明,或者在窗體層的說(shuō)明部分中說(shuō)明,。其格式是: Declare Sub子程序名Lib“庫(kù)名”[Alias“別名”][([參數(shù)])] Declare Function子程序名Lib“庫(kù)名”[Aliass“別名”][([參數(shù)])][AS數(shù)據(jù)類(lèi)型] 第一種格式表示過(guò)程沒(méi)有返回值,,第二種格式表示過(guò)程返回一個(gè)值,該值可用于表達(dá)式中,,庫(kù)名如果用的是WINDOWS操作環(huán)境 (在System目錄下)中的庫(kù),,如“USER.EXE”,“KERNEL.EXE”或者“GDI.EXE”等,,就用此名作為庫(kù)名,。如果用的是其他來(lái)源的 DLL,則用包括路徑的文件名稱(chēng)(如:“C:\WINDOWS\BRUSH.DLL”),。別名(Alias)是允許另外使用別的名稱(chēng)來(lái)稱(chēng)呼子程序,, 尤其是當(dāng)外來(lái)子程序名與VB保留字相同時(shí),它就顯得特別有用,,參數(shù)指要被傳遞到子程序的參數(shù)值,,數(shù)據(jù)類(lèi)型指的是函數(shù)返回值的 數(shù)據(jù)類(lèi)型,它可能是Integer,,Long,,Single,Double,,Currency或String,。下面就是所要使用的DLL子程序的說(shuō)明: Declare Function GetSystemMenu% Lib"User"(ByValhWnd%,ByValbRevert%) Declare \function \RemoveMenu% Lib"User"(ByValhMenu%,ByValnPosition%,,ByValwFlags%) 當(dāng)說(shuō)明完DLL子程序后,,執(zhí)行DLL子程序的方法,就象在VB中執(zhí)行通用過(guò)程(函數(shù))一樣,。下面我們編寫(xiě)一個(gè)名為 Remove-Items-From-System的過(guò)程來(lái)完成上面例子中提到的功能,,過(guò)程中調(diào)用了上述說(shuō)明過(guò)的兩個(gè)DLL子程序:
Sub remove-Items-From-Sysmenu(A-Form As Form) ‘獲取窗體系統(tǒng)菜單句炳 HSysMenu=GetSystemMenu(A-Form.hWnd,0) ‘刪除除“移動(dòng)”和“關(guān)閉”外的所有菜單項(xiàng),, 刪除時(shí)必須從最后一個(gè)菜單項(xiàng)開(kāi)始 R=RemoveMenu(HSysMenu,,8,MF-BYPOSITION) ‘刪除切換 R=RemoveMenu(HSysMenu,,7,,MF-BYPOSITION) ‘刪除第一條分隔線 R=RemoveMenu(HSysMenu,5,,MF-BYPOSITION) ‘刪除第二條分隔線 End Sub
有了這個(gè)過(guò)程,,在任一窗體的Form-Load事件中加入下面一行代碼就可以刪除該窗體除“移動(dòng)”和“關(guān)閉”選項(xiàng)以外的所有控制菜單 項(xiàng): Remove-Items-From-Sysmenu Me
二、在控件層使用VBX VB功能強(qiáng)大的第二個(gè)部分是VBX的使用,,即其開(kāi)放及無(wú)限擴(kuò)增的特性,。雖然VB工具箱(ToolBox)已經(jīng)盡量將設(shè)計(jì)應(yīng)用軟件所需的 工具包括在內(nèi),但是,,為了不斷擴(kuò)充VB的功能,,VB提供了一套開(kāi)發(fā)工具(Custom Control Development Kit)供第三方開(kāi)發(fā)者 來(lái)設(shè)計(jì)所需要的控件。當(dāng)設(shè)計(jì)完控件文件后(其文件擴(kuò)展名為“.VBX”)可以從菜單“file”項(xiàng)下選“Add File...”命令,,結(jié)果畫(huà)面 上出現(xiàn)一個(gè)"Add File"對(duì)話框,,雙擊所需的VBX文件名即可將該VBX加入到VB中,這些控件裝入VB后,,VB會(huì)將這些外來(lái)控件加到 原有工具箱中,,與其他控件一起合并使用。正是因?yàn)橛辛诉@一技術(shù),,VB才能夠不斷發(fā)展,,使用VB編程也更為方便、迅速和有效,,這 是VB區(qū)別于其他程序開(kāi)發(fā)環(huán)境的主要特色之一,。自從VB推出以來(lái),第三方軟件公司設(shè)計(jì)了大量的新控件,,下面是開(kāi)發(fā)WINDOWS應(yīng)用 程序時(shí)幾個(gè)非常有用的VBX:
●三維控件Threed.vbx 它提供了包括命令按鈕,、復(fù)選框、單選鈕 ,、框架,、下推按鈕和面板在內(nèi)的六種三維控件,,使用這些控件可使窗體更具有立體感。 ●圖形控件Graph.vbx 向圖形控件發(fā)送數(shù)據(jù)后,,圖形控件可繪制二維或三維餅圖,,、直方圖,、趨勢(shì)圖,,并且可以打印或拷貝到剪貼板上。 ●通訊控件Mscomm.vbx 它提供了串行通訊的能力,,可用于串行端口之間傳送和接收數(shù)據(jù)。 ●數(shù)據(jù)網(wǎng)格控件Truegrid.vbx 它既可以作為一般的數(shù)據(jù)顯示表格,,也可把一個(gè)數(shù)據(jù)庫(kù)和一個(gè)網(wǎng)格聯(lián)系起來(lái),,它是制作數(shù)據(jù)庫(kù)瀏覽器或數(shù)據(jù)顯示的理想工具。
二,、在應(yīng)用層執(zhí)行其他應(yīng)用程序 在編制復(fù)雜的大型軟件時(shí),,我們經(jīng)常會(huì)需要有一些功能相對(duì)獨(dú)立和完善的專(zhuān)用程序,如編輯程序,,而這些程序通常是通用和流行并 經(jīng)實(shí)踐檢驗(yàn)的,。如果由開(kāi)發(fā)者重新編制這些程序,不僅大大增加了程序工作量以及調(diào)試過(guò)程,,而且功能上很難比得上這些通用程序,。 顯然,如果我們能直接調(diào)用這些程序是最為理想的,。令人欣喜的是,,VB提供了一個(gè)可用來(lái)調(diào)用其他應(yīng)用程序的Shell函數(shù),使VB的 某些功能可直接由其他應(yīng)用程序來(lái)完成,,從而大大地減少了編程任務(wù),。 格式是Shell(命令字符串[,窗口類(lèi)型]) 其中的命令字符串是欲執(zhí)行的應(yīng)用程序名,,可執(zhí)行文件的擴(kuò)展名只限于“.COM”,,“.EXE”,“.BAT”,,“.PIF”,,缺省擴(kuò)展名為.EXE 文件,窗口類(lèi)型是一整數(shù)值,,它對(duì)應(yīng)于程序執(zhí)行時(shí)的顯示窗口風(fēng)格,,是可選 的,共有下列5種選擇: 窗口類(lèi)型值 窗口類(lèi)型 1,,5,,9 正常窗口,具有指針 2 最小窗口,具有指針(缺?。?3 最大窗口,,具有指針 4,8 正常窗口,,不具指針 6,,7 最小窗口,不具指針 當(dāng)Shell函數(shù)成功地調(diào)用某一個(gè)應(yīng)用程序時(shí),,返回一個(gè)任務(wù)標(biāo)識(shí)(Task ID),,該ID表示正在執(zhí)行的程序的唯一標(biāo)識(shí)。 [例] X=Shell("C:\WINDOWS\NOTEPAD.EXE",1) 該語(yǔ)句調(diào)用WINDOWS附件中的記事本NOTEPAD.EXE作為編輯程序來(lái)使用,,并返回1個(gè)ID值到X,。
|