第二卷 ActiveX控件與網絡應用
序
Visual Basic的新增特性中,ActiveX控件是很重要的一部分。ActiveX控件通常用於針對網絡的設計,所以也被稱為網絡控件。利用ActiveX控件,不但可以在各個應用程序之間建立一種標準的通信機製,而且通過ActiveX控件製作的ActiveX文檔可以在Internet上發布。
從本質上說前麵幾章中介紹的CommandButton控件、TextBox和Timer等控件都是ActiveX控件,在本章中所指的ActiveX控件主要是用戶自己定製的ActiveX控件,同時還要向用戶介紹ActiveX控件在網絡上應用--ActiveX文檔和網絡瀏覽器的製作等。
第一章 定製ActiveX控件
在本節中將向用戶介紹如何在Visual Basic 中定製一個符合自己需要的ActiveX控件,示例Activex控件可以把普通的CommandButton控件和Timer控件結合起來,即可以在程序運行的過程中通過設置ActiveX控件的Interval屬性來激活計時器事件,具體的程序設計步驟如下所示。
1.開始工作
首先啟動一個新的Visual Basic項目,在彈出的"新建工程"對話框中選擇"標準EXE"選項,如圖8-1所示。
圖8-1 "新建工程"對話框
在"新建工程"對話框中選擇"ActiveX控件"選項,單擊"確定"按鈕,在Visual Basic 就新建了一個ActiveX控件的工程文件,同時打開了一個空白的窗體,新建的ActiveX控件工程窗體如圖8-2所示。
圖8-2 新建的ActiveX控件工程窗體
窗體的屬性設置如表8-1所示:
表8-1 窗體的屬性設置
屬性名
屬性值
名稱
UserControl1
ClientHeight
510
ClientLeft
0
ClientTop
0
ClientWidth
1950
ScaleHeight
510
ScaleWidth
1950
2.添加控件
向空白的窗體上添加一個Timer控件和一個CommandButton控件,其中CommandButton控件用來接受ActiveX控件的各種操作(如鼠標、鍵盤等),而Timer控件則用來幫助ActiveX控件產生計時器事件,兩個控件的屬性設置如下代碼所示。
Begin Visual Basic .Timer Timer1
Interval = 500
Left = 1440
Top = 0
End
Begin Visual Basic .CommandButton Command1
Caption = "Command1"
Height = 495
Left = 0
Style = 1
TabIndex = 0
Top = 0
Width = 1935
End
添加CommandButton控件和Timer控件後的窗體如圖8-3所示。
圖8-3 添加CommandButton控件和Timer控件後的窗體
3.添加代碼
在ActiveX控件設計的過程中,用鼠標左鍵雙擊窗體上的空白處,在彈出的代碼窗口中把光標移動到事件Private Sub UserControl_Initialize()的處理過程中,並且添加如下所示的ActiveX控件初始化代碼。
Private Sub UserControl_Initialize()
UserControl.Command1.Enabled = True
UserControl.Timer1.Enabled = True
'設置控件有效狀態
UserControl.Command1.Caption = Year(Date) & ":" & Month(Date) & ":" & Day(Date)
'顯示當前日期
UserControl.Command1.Left = 0
UserControl.Command1.Top = 0
'初始化控件位置
UserControl.Command1.Width = UserControl.Width
UserControl.Command1.Height = UserControl.Height
'初始化控件大小
End Sub
提示:
* 在ActiveX控件加載的初期,窗體Private Sub UserControl_Initialize()事件中的代碼就會被執行。
程序首先通過UserControl.Command1.Enabled = True和UserControl.Timer1.Enabled= True語句設置ActiveX控件中的兩個子控件的有效狀態,然後設置了CommandButton控件的顯示文本為係統當前的日期,最後通過四條語句對ActiveX控件的大小和位置進行了設置。
經過以上初始化後的ActiveX控件測試結果如圖8-4所示。
圖8-4 初始化設置後的ActiveX控件
注意:
* 在ActiveX控件的設計過程中,值得注意的一點就是要對控件的尺寸改變做出正確的判斷和處理,由於ActiveX控件的設計都是依賴於一定的窗體(本示例程序中為UserControl窗體)。
所以要在窗體的Private Sub UserControl_Resize()事件中添加對控件尺寸改變的響應代碼(本程序中的響應代碼如下所示)。
Private Sub UserControl_Resize()
UserControl.Command1.Left = 0
UserControl.Command1.Top = 0
'設置控件位置
UserControl.Command1.Width = UserControl.Width
UserControl.Command1.Height = UserControl.Height
'設置控件大小
End Sub
程序說明:
在ActiveX控件運行的過程中,如果ActiveX控件所在窗體的尺寸發生改變,就會激活Private Sub UserControl_Resize()事件,然後程序通過語句UserControl.Command1.Left=0、UserControl.Command1.Top=0來設置ActiveX控件的位置,之後再通過兩條語句:
UserControl.Command1.Width=UserControl.Width
UserControl.Command1.Height=UserControl.Height
來設置ActiveX控件大小,這樣,ActiveX就能夠實現跟蹤尺寸改變的功能了。
另外為了能夠在程序運行的過程中ActiveX控件能夠自動的判斷自身可見狀態,需要添加如下所示代碼。
Private Sub UserControl_Show()
MsgBox "ActiveX控件處於可見狀態"
End Sub
Private Sub UserControl_Hide()
MsgBox "ActiveX控件處於不可見狀態"
End Sub
4.設計ActiveX控件
以上進行的工作是手動的,下麵利用Visual Basic 6提供的Visual Basic ActiveX控件界麵向導程序來生成基本的ActiveX外殼(如屬性、事件和方法等)。
用鼠標選擇菜單"工程"中的"添加用戶控件"選項,就會彈出一個如圖8-5所示的"添加用戶控件"對話框。
圖8-5 "添加用戶控件"對話框
在"添加用戶控件"對話框中選擇"Visual Basic ActiveX控件界麵向導"選項,單擊"打開"按鈕就會激活Visual Basic 6的ActiveX控件界麵向導,並且彈出一個如圖8-6所示的"ActiveX控件接口向導-介紹"對話框。
圖8-6 "ActiveX控件接口向導-介紹"對話框
"ActiveX控件接口向導-介紹"對話框中是ActiveX控件界麵向導程序的的說明部分,用戶可以通過複選"以後跳過本屏幕"選項來跳過這個窗口,並且向導程序以後都不會顯示這個對話框。單擊"下一步"按鈕按鈕,進入ActiveX控件界麵向導程序的第二個窗口,如圖8-7所示。
圖8-7 "選定接口成員"對話框
"選定接口成員"對話框列舉了在定製ActiveX控件中可能會用到的屬性、事件和方法,用戶可以在其中選擇定製ActiveX控件的屬性,方法和事件。左邊的"可用名稱"列表框中列舉了可以放入定製控件的標準屬性,方法和事件,右邊的"選定名稱"列表框中列舉了選定的定製控件的標準屬性,方法和事件。
提示:
* 用戶可以通過"選定接口成員"對話框中的四個按鈕來完成常用屬性、事件和方法的添加和刪除操作。
在本示例程序中,在"可用名稱"列表框中選擇Caption選項、Interval選項、Picture選項、Timer選項和Style選項,單擊"下一步"按鈕進入下一步,顯示的"創建自定義接口成員"對話框如圖8-8所示。
圖8-8 "創建自定義接口成員"對話框
在"創建自定義接口成員"對話框中用戶可以為ActiveX控件添加自己的屬性、方法和事件。
通過單擊"新建"按鈕,就會彈出如圖8-9所示的"添加自定義成員"對話框,用戶可以在"名稱"輸入框中輸入自定義成員的名字,在"類型"中選擇自定義成員的類型,如屬性、方法和事件。
圖8-9 "添加自定義成員"對話框
在本示例程序中由於不會涉及到自定義屬性、方法和事件,所以在"創建自定義接口成員"對話框中直接單擊"下一步"按鈕進入下一步。如圖8-10所示。
圖8-10 "設置映射"對話框
在"設置映射"對話框中用戶可以把定製ActiveX控件的屬性、方法和事件映射到Visual Basic 中已經存在的ActiveX控件的屬性、方法和事件上。
從左邊的"公有名稱"列表框中選擇一個或多個屬性、方法或事件,然後在"控件"列表框中選擇對應容器控件,在"成員"列表框中選擇對應的接口成員即可。
例如在本示例程序中要把ActiveX控件的Timer屬性映射到Timer控件的Timer成員上。
結束映射後,單擊"下一步"按鈕進入下一個窗口。如圖8-11所示。
在"設置屬性"對話框中,用戶可以設置未映射成員的屬性,如設置屬性的數據類型、缺省值、運行/設計過程中的讀寫狀態等,同時對未做改變的成員使用缺省值。
例如在本示例程序中,設置Style屬性的數據類型為Integer,缺省值為0,運行和設計的過程中都是可讀、可寫的。屬性設置完成後,單擊"下一步"按鈕進入下一個窗口。如圖8-12所示。
在"已完成"對話框中用戶可以選擇是否查看ActiveX控件界麵設計的總結報告,如果一切都準備就緒,單擊"完成"按鈕就完成了對ActiveX控件的界麵設計。
圖8-11 "設置屬性"對話框
圖8-12 "已完成"對話框
5.為ActiveX控件添加代碼
按照以上的步驟完成對ActiveX控件的界麵設計後,參考如下所示的程序清單在窗體UserControl中添加代碼。