bkDLControl控件一個(gè)可以快速實(shí)現(xiàn)在線下載的控件,它在下載的同時(shí)通過(guò)進(jìn)度條顯示進(jìn)度。你可以編寫當(dāng)其下載完成后的事件,這樣我們就可以輕松達(dá)到在線升級(jí)的目的。
要了解該控件強(qiáng)大便捷的功能,下面我們就通過(guò)一個(gè)實(shí)例來(lái)講解。
第一步:首先啟動(dòng)Visual Basic 6.0,新建一個(gè)窗口。
第二步:加載bkDLControl控件。
?、僭诳丶ぞ邫谥袉螕粲益I,選擇“部件”,在彈出的窗口中點(diǎn)擊“瀏覽”,找到bkDLControl控件,載入它,命名為“DL”;因?yàn)槭且粋€(gè)進(jìn)度條,所以把大小拖成一個(gè)適當(dāng)?shù)拈L(zhǎng)條狀,把它放到Form1窗體中適當(dāng)位置即可。其他屬性保持默認(rèn)即可。
第三步:加載其他控件,完成界面的設(shè)置。
?、僭诖绑w中添加2個(gè)CommandButton控件,名稱分別為cmdBegin和cmdCancel,Caption屬性分別為“開始”和“取消”,其中設(shè)置cmdCancel的Enabled屬性為“False”。
②添加一個(gè)ComboBox控件,名稱為cboURL,在list中添加幾個(gè)下載地址(如圖1),其他屬性保持默認(rèn)。添加該控件用于選擇下載地址,這樣可以用用戶自行選擇下載的服務(wù)器。
![]() |
?、厶砑右粋€(gè)Listbox,命名為lstOut。為了美觀,可以把Appearance屬性設(shè)置為“0-Flat”。該控件用于顯示下載過(guò)程中的進(jìn)度說(shuō)明。
?、茉赽kDLControl控件的右下方添加一個(gè)Label,命名為lblProg,設(shè)置Autosize屬性為True。它將用于實(shí)時(shí)顯示下載的大小和百分比。
程序總體界面如圖2,在界面和屬性設(shè)置上非常的簡(jiǎn)單。
![]() |
到這里就完成了這個(gè)演示程序的界面設(shè)置,接著進(jìn)行代碼的編寫。
第四步:編寫代碼,實(shí)現(xiàn)具體的功能。
?、倬帉慒orm1的Load事件,使程序啟動(dòng)時(shí)cboURL顯示默認(rèn)的下載地址。代碼如下:Private Sub Form_Load()
cboURL.ListIndex = 0
End Sub
②添加兩個(gè)commandbutton的Click事件,分別實(shí)現(xiàn)開始下載和取消下載的功能。Private Sub cmdBegin_Click()
With DL
.FileURL = cboURL.Text ’設(shè)置bkDLControl的下載地址
.SaveFilePath = App.Path ’設(shè)置下載后的保存路徑,這里設(shè)置為當(dāng)前程序所在文件夾
LogItem "請(qǐng)求下載" & cboURL.Text
’在lstOut中添加下載狀態(tài)說(shuō)明,這里使用了一個(gè)自定義過(guò)程,該過(guò)程的代碼將在下面第四步說(shuō)明
.BeginDownload ’發(fā)出開始下載命令
End With
cmdCancel.Enabled = True ’設(shè)置cmdCancel屬性為True,使下載過(guò)程中可以中止下載
End Sub
Private Sub cmdCancel_Click()
DL.CancelDownload ’發(fā)出取消下載命令
End Sub
③編寫bkDLControl各個(gè)事件的代碼,以完成具體功能:Private Sub DL_DLBeginDownload()
LogItem "開始下載從" & DL.FileURL
End Sub
Private Sub DL_DLCanceled()
LogItem "取消下載"
End Sub
上面兩段代碼是開始和取消下載時(shí)的事件,向lstOut輸入狀態(tài)。Private Sub DL_DLComplete(Bytes As Long) ’下載完成的事件
cmdCancel.Enabled = False
If Bytes > 0& Then ’如果下載的不是零字節(jié),則顯示相關(guān)信息
LogItem "完成" & SizeString(Bytes) & "下載并保存到" & DL.SaveFileName
’下面添加實(shí)現(xiàn)文件更新的代碼
……
Else
LogItem "下載失敗"
End If
End Sub
上面的代碼調(diào)用了一個(gè)自定義函數(shù)SizeString,代碼同樣在第四步中說(shuō)明。這段bkDLControl完成下載時(shí)激發(fā)的事件是我們實(shí)現(xiàn)在線升級(jí)的關(guān)鍵,下載完成后就可以調(diào)用下載的內(nèi)容完成更新,具體的更新辦法有很多種,大家可以充分發(fā)揮了。Private Sub DL_DLConnected(ConnAddr As String)
LogItem "連接到 " & ConnAddr ’當(dāng)連接成功時(shí)返回IP地址
End Sub
Private Sub DL_DLError(E As bkDLError, Error As String)
Dim strErrType As String ’下載錯(cuò)誤時(shí)的事件
Select Case E
Case bkDLEUnavailable
strErrType = "不可下載文件"
Case bkDLERedirect
strErrType = "重定向"
Case bkDLEZeroLength
strErrType = "沒(méi)有字節(jié)返回"
Case bkDLESaveError
strErrType = "文件保存錯(cuò)誤"
Case bkDLEUnknown
strErrType = "不明錯(cuò)誤"
End Select
LogItem "錯(cuò)誤 - " & strErrType & ": " & Error
End Sub
當(dāng)bkDLControl控件返回零字節(jié)時(shí)激發(fā)上面的出錯(cuò)事件,并在lstOut中顯示相關(guān)錯(cuò)誤信息。Private Sub DL_DLFileSize(Bytes As Long)
’當(dāng)連接后返回文件的大小,單位為字節(jié),我們通過(guò)自定義的函數(shù)對(duì)單位進(jìn)行必要轉(zhuǎn)換
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)
’下載過(guò)程中的事件,返回下載百分比和已下載字節(jié)數(shù)。我們通過(guò)下面一行代碼在lstOut中顯示
lblProg.Caption = Format(Percent, "0%") & " of " & SizeString(TotalBytes)
End Sub
Private Sub DL_DLRedirect(ConnAddr As String)
’返回地址如果重定向
LogItem Index, "重定向到" & ConnAddr
End Sub
上面是bkDLControl的相關(guān)代碼,是這個(gè)在線升級(jí)程序中最關(guān)鍵的地方。在其提供的事件中,我們可以有很多的發(fā)揮空間,去實(shí)現(xiàn)很多的功能。
④編寫SizeString函數(shù)和LogItem過(guò)程,完成最后的代碼編寫。Private Sub LogItem(strItem As String)
With lstOut
.AddItem "> " & strItem
If .NewIndex > .TopIndex + 17 Then
.TopIndex = .NewIndex - 16
End If
End With
End Sub
上面的過(guò)程用于向lstOut添加下載進(jìn)度信息,其中使用了一個(gè)變量,用于裝載相應(yīng)事件描述。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
上面的函數(shù)把傳送來(lái)的lBytes根據(jù)其大小,轉(zhuǎn)換成合適的單位。
到這里,這個(gè)演示程序就完成了,按下F5,在下拉框中選擇地址或者輸入其他下載地址后按開始就可以開始下載了。我們可以看到連接下載信息,實(shí)時(shí)的已下載進(jìn)度情況,并用進(jìn)度條的方式表現(xiàn)(如圖3)。
![]() |
有了bkDLControl控件,我們可以很方便地下載更新程序,并在其下載完成激發(fā)的事件中寫入適當(dāng)代碼,就可以輕松完成程序在線升級(jí),這著實(shí)為你的軟件添加了方便和亮點(diǎn)!