科技时代新浪首页 > 科技时代 > 学园 > Visual Basic编程专题 > 正文

VisualBasic中第三方控件实现软件在线升级 (2)


http://www.sina.com.cn 2005年06月22日 17:15 天极yesky

  第四步:编写代码,实现具体的功能。

  ①编写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根据其大小,转换成合适的单位。

[上一页] [1] [2] [3] [下一页]


  点击此处查询全部VisualBasic新闻

评论】【应用软件论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭

 
新 闻 查 询
关键词
热 点 专 题
网友装修经验大全
经济适用房之惑
中美中欧贸易争端
变质奶返厂加工
第8届上海电影节
《头文字D》
百对网友新婚靓照
湖南卫视05超级女声
林苏版《绝代双骄》
 
 


科技时代意见反馈留言板 电话:010-82628888-5828   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2005 SINA Inc. All Rights Reserved

版权所有 新浪网