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