大家对金山毒霸、瑞星等杀毒软件的在线升级一定不陌生吧?它们可以利用在线升级程序进行在线升级 ,无需用户访问网站下载。这样的功能的确对于使用者来说是十分方便的。那么,您是否也想为您的软件添加方便的在线升级的功能呢?下面介绍一个第三方控件,能够帮你非常容易地就实现。
bkDLControl控件一个可以快速实现在线下载的控件,它在下载的同时通过进度条显示进度。你可以编写当其下载完成后的事件,这样我们就可以轻松达到在线升级的目的。
要了解该控件强大便捷的功能,下面我们就通过一个实例来讲解。
第一步:首先启动Visual Basic 6.0,新建一个窗口。
第二步:加载bkDLControl控件。
①在控件工具栏中单击右键,选择“部件”,在弹出的窗口中点击“浏览”,找到bkDLControl控件,载入它,命名为“DL”;因为是一个进度条,所以把大小拖成一个适当的长条状,把它放到Form1窗体中适当位置即可。其他属性保持默认即可。
第三步:加载其他控件,完成界面的设置。
①在窗体中添加2个CommandButton控件,名称分别为cmdBegin和cmdCancel,Caption属性分别为“开始”和“取消”,其中设置cmdCancel的Enabled属性为“False”。
②添加一个ComboBox控件,名称为cboURL,在list中添加几个下载地址(如图1),其他属性保持默认。添加该控件用于选择下载地址,这样可以用用户自行选择下载的服务器。

④在bkDLControl控件的右下方添加一个Label,命名为lblProg,设置Autosize属性为True。它将用于实时显示下载的大小和百分比。
程序总体界面如图2,在界面和属性设置上非常的简单。

到这里就完成了这个演示程序的界面设置,接着进行代码的编写。
第四步:编写代码,实现具体的功能。
①编写Form1的Load事件,使程序启动时cboURL显示默认的下载地址。代码如下:
cboURL.ListIndex = 0
End Sub
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
LogItem "开始下载从" & DL.FileURL
End Sub
Private Sub DL_DLCanceled()
LogItem "取消下载"
End Sub
cmdCancel.Enabled = False
If Bytes > 0& Then ’如果下载的不是零字节,则显示相关信息
LogItem "完成" & SizeString(Bytes) & "下载并保存到" & DL.SaveFileName
’下面添加实现文件更新的代码
……
Else
LogItem "下载失败"
End If
End Sub
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
’当连接后返回文件的大小,单位为字节,我们通过自定义的函数对单位进行必要转换
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
④编写SizeString函数和LogItem过程,完成最后的代码编写。
With lstOut
.AddItem "> " & strItem
If .NewIndex > .TopIndex + 17 Then
.TopIndex = .NewIndex - 16
End If
End With
End Sub
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
到这里,这个演示程序就完成了,按下F5,在下拉框中选择地址或者输入其他下载地址后按开始就可以开始下载了。我们可以看到连接下载信息,实时的已下载进度情况,并用进度条的方式表现(如图3)。

