大家對金山毒霸、瑞星等殺毒軟件的在線升級一定不陌生吧?它們可以利用在線升級程序進行在線升級,無需用戶訪問網站下載。這樣的功能的確對於使用者來說是十分方便的。那麼,您是否也想為您的軟件添加方便的在線升級的功能呢?下面介紹一個第三方控件,能夠幫你非常容易地就實現。
bkDLControl控件一個可以快速實現在線下載的控件,它在下載的同時通過進度條顯示進度。你可以編寫當其下載完成後的事件,這樣我們就可以輕松達到在線升級的目的。
要了解該控件強大便捷的功能,下面我們就通過一個實例來講解。
第一步:首先啟動Visual Basic 6.0,新建一個窗口。
第二步:加載bkDLControl控件。
①在控件工具欄中單擊右鍵,選擇“部件”,在彈出的窗口中點擊“浏覽”,找到bkDLControl控件,載入它,命名為“DL”;因為是一個進度條,所以把大小拖成一個適當的長條狀,把它放到Form1窗體中適當位置即可。其他屬性保持默認即可。
第三步:加載其他控件,完成界面的設置。
①在窗體中添加2個CommandButton控件,名稱分別為cmdBegin和cmdCancel,Caption屬性分別為“開始”和“取消”,其中設置cmdCancel的Enabled屬性為“False”。
②添加一個ComboBox控件,名稱為cboURL,在list中添加幾個下載地址(如圖1),其他屬性保持默認。添加該控件用於選擇下載地址,這樣可以用用戶自行選擇下載的服務器。
③添加一個Listbox,命名為lstOut。為了美觀,可以把Appearance屬性設置為“0-Flat”。該控件用於顯示下載過程中的進度說明。
④在bkDLControl控件的右下方添加一個Label,命名為lblProg,設置Autosize屬性為True。它將用於實時顯示下載的大小和百分比。
程序總體界面如圖2,在界面和屬性設置上非常的簡單。
到這裡就完成了這個演示程序的界面設置,接著進行代碼的編寫。
第四步:編寫代碼,實現具體的功能。
①編寫Form1的Load事件,使程序啟動時cboURL顯示默認的下載地址。代碼如下:
Private Sub Form_Load()
cboURL.ListIndex = 0
End Sub
②添加兩個commandbutton的Click事件,分別實現開始下載和取消下載的功能。
Private Sub cmdBegin_Click()
With DL
.FileURL = cboURL.Text ’設置bkDLControl的下載地址
.SaveFilePath = App.Path ’設置下載後的保存路徑,這裡設置為當前程序所在文件夾
LogItem "請求下載" & cboURL.Text
’在lstOut中添加下載狀態說明,這裡使用了一個自定義過程,該過程的代碼將在下面第四步說明
.BeginDownload ’發出開始下載命令
End With
cmdCancel.Enabled = True ’設置cmdCancel屬性為True,使下載過程中可以中止下載
End Sub
Private Sub cmdCancel_Click()
DL.CancelDownload ’發出取消下載命令
End Sub
③編寫bkDLControl各個事件的代碼,以完成具體功能:
Private Sub DL_DLBeginDownload()
LogItem "開始下載從" & DL.FileURL
End Sub
Private Sub DL_DLCanceled()
LogItem "取消下載"
End Sub
上面兩段代碼是開始和取消下載時的事件,向lstOut輸入狀態。
Private Sub DL_DLComplete(Bytes As Long) ’下載完成的事件
cmdCancel.Enabled = False
If Bytes > 0& Then ’如果下載的不是零字節,則顯示相關信息
LogItem "完成" & SizeString(Bytes) & "下載並保存到" & DL.SaveFileName
’下面添加實現文件更新的代碼
……
Else
LogItem "下載失敗"
End If
End Sub
上面的代碼調用了一個自定義函數SizeString,代碼同樣在第四步中說明。這段bkDLControl完成下載時激發的事件是我們實現在線升級的關鍵,下載完成後就可以調用下載的內容完成更新,具體的更新辦法有很多種,大家可以充分發揮了。
Private Sub DL_DLConnected(ConnAddr As String)
LogItem "連接到 " & ConnAddr ’當連接成功時返回IP地址
End Sub
Private Sub DL_DLError(E As bkDLError, Error As String)
Dim strErrType As String ’下載錯誤時的事件
Select Case E
Case bkDLEUnavailable
strErrType = "不可下載文件"
Case bkDLERedirect
strErrType = "重定向"
Case bkDLEZeroLength
strErrType = "沒有字節返回"
Case bkDLESaveError
strErrType = "文件保存錯誤"
Case bkDLEUnknown
strErrType = "不明錯誤"
End Select
LogItem "錯誤 - " & strErrType & ": " & Error
End Sub
當bkDLControl控件返回零字節時激發上面的出錯事件,並在lstOut中顯示相關錯誤信息。
Private Sub DL_DLFileSize(Bytes As Long)
’當連接後返回文件的大小,單位為字節,我們通過自定義的函數對單位進行必要轉換
LogItem "文件大小為" & SizeString(Bytes) & " (" & CStr(Bytes) & " bytes)"
End Sub
Private Sub DL_DLMIMEType(MIMEType As String)
LogItem "MIME類型是 " & MIMEType
End Sub
Private Sub DL_DLProgress(Percent As Single, BytesRead As Long, TotalBytes As Long)
’下載過程中的事件,返回下載百分比和已下載字節數。我們通過下面一行代碼在lstOut中顯示
lblProg.Caption = Format(Percent, "0%") & " of " & SizeString(TotalBytes)
End Sub
Private Sub DL_DLRedirect(ConnAddr As String)
’返回地址如果重定向
LogItem Index, "重定向到" & ConnAddr
End Sub
上面是bkDLControl的相關代碼,是這個在線升級程序中最關鍵的地方。在其提供的事件中,我們可以有很多的發揮空間,去實現很多的功能。
④編寫SizeString函數和LogItem過程,完成最後的代碼編寫。
Private Sub LogItem(strItem As String)
With lstOut
.AddItem "> " & strItem
If .NewIndex > .TopIndex + 17 Then
.TopIndex = .NewIndex - 16
End If
End With
End Sub
上面的過程用於向lstOut添加下載進度信息,其中使用了一個變量,用於裝載相應事件描述。
Private Function SizeString(lBytes As Long) As String
If lBytes < &H400& Then
SizeString = CStr(lBytes) & "b"
ElseIf lBytes < &H100000 Then
SizeString = CStr(lBytes \ 1024) & "k"
ElseIf lBytes < &H20000000 Then
SizeString = Replace$(Format$((lBytes \ 1024) / 1024, "0.0"), ".0", vbNullString) & "M"
Else
SizeString = Replace$(Format$((lBytes \ (1024 ^ 2)) / 1024, "#,##0.0"), ".0", vbNullString) & "G"
End If
End Function
上面的函數把傳送來的lBytes根據其大小,轉換成合適的單位。
到這裡,這個演示程序就完成了,按下F5,在下拉框中選擇地址或者輸入其他下載地址後按開始就可以開始下載了。我們可以看到連接下載信息,實時的已下載進度情況,並用進度條的方式表現(如圖3)。
有了bkDLControl控件,我們可以很方便地下載更新程序,並在其下載完成激發的事件中寫入適當代碼,就可以輕松完成程序在線升級,這著實為你的軟件添加了方便和亮點!