用vb6的ActiveX控件实现异步下载

发表于:2007-07-01来源:作者:点击数: 标签:
用vb6的ActiveX控件实现异步下载 序:笔者(airon,softWorker)注意到,在 VB 6中,要实现文件下载,一般用和方法都是使用第三方控件,比如IE控件呀,winscok呀,但在本文中,不用添加任何控件,也不引用任何object,就可实现文件下载,而且程序不支持文件下载

用vb6的ActiveX控件实现异步下载


序:笔者(airon,softWorker)注意到,在VB6中,要实现文件下载,一般用和方法都是使用第三方控件,比如IE控件呀,winscok呀,但在本文中,不用添加任何控件,也不引用任何object,就可实现文件下载,而且程序不支持文件下载进度,捕获下载错误,激活下载完成事件等。

具体方法:
1.新建一VB6工程(默认有一个Form1窗体)
2.选择工程菜单的“添加用户控件”来添加一个用户控件。
3.更改Activex用户控件的名称,更改为 Downloader  (此项可省) 。
4.输入代码:(在用户控件的代码窗口中)

Option Explicit
Event DownloadProgress(CurBytes As Long, MaxBytes As Long, SaveFile As String)
Event DownloadError(SaveFile As String)
Event DownloadComplete(MaxBytes As Long, SaveFile As String)
´Public downStat As Boolean


Public Function CancelAsyncRead() As Boolean
    On Error Resume Next
    UserControl.CancelAsyncRead
End Function
´Private Sub Timer1_Timer()
´    If Not downStat Then
´        Timer1.Enabled = False
´        Exit Sub
´    End If
´    Static Cs As Integer
´    If Cs > 2 Then Cs = 0
´    UserControl.Picture = P1(Cs).Picture
´    Cs = Cs + 1
´    DoEvents
´End Sub
Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
    On Error Resume Next
    Dim f() As Byte, fn As Long
    If AsyncProp.BytesMax <> 0 Then
        fn = FreeFile
        f = AsyncProp.Value
        Open AsyncProp.PropertyName For Binary Aclearcase/" target="_blank" >cc
ess Write As #fn
        Put #fn, , f
        Close #fn
    Else
        RaiseEvent DownloadError(AsyncProp.PropertyName)
    End If
    RaiseEvent DownloadComplete(CLng(AsyncProp.BytesMax), AsyncProp.PropertyName)
    downStat = False
End Sub
Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty)
    On Error Resume Next
    If AsyncProp.BytesMax <> 0 Then
        RaiseEvent DownloadProgress(CLng(AsyncProp.BytesRead), CLng(AsyncProp.BytesMax), AsyncProp.PropertyName)
        downStat = True: Timer1.Enabled = True
    End If
End Sub
´Private Sub UserControl_Resize()
´    SizeIt
´End Sub
Public Sub BeginDownload(url As String, SaveFile As String)
    On Error GoTo ErrorBeginDownload
    downStat = True
    UserControl.AsyncRead url, vbAsyncTypeByteArray, SaveFile, vbAsyncReadForceUpdate
    Timer1.Enabled = True
    Exit Sub
ErrorBeginDownload:
    downStat = False
    MsgBox Err & "开始下载数据失败!" _
    & vbCrLf & vbCrLf & "错误:" & Err.Description, vbCritical, "错误"
End Sub
´Public Sub SizeIt()
´    On Error GoTo ErrorSizeIt
´    With UserControl
´        .Width = ScaleX(32, vbPixels, vbTwips)
´        .Height = ScaleY(32, vbPixels, vbTwips)
´    End With
´    Exit Sub
´ErrorSizeIt:
´End Sub
´Public Sub kill()
´    downStat = False
´    Dim m As AsyncProperty
´    MsgBox m.Value
´End Sub

-----------------------------------------------------
程序说明:

本文采取VB6中OCX中的 异步获取方法来下载文件。
用到 AsyncRead(异步读取)

文中带注解的部分为下载界面控制,在下载时,会有像 FlashGet一样的有动画图标在动,要添加此功能,请在用户控件上添加三个image,(image上要带图片)
 

-----------------------------------------------------

4.关闭用户控件的代码与设置窗口,回到 Form1
5.这时你会看到在左边的工具栏下多了一用户控件,把它添加到窗体上。命名为 Downloader1
6.在窗体上添加一 command 控钮,命名为 Command1
7.在窗体 Form1的代码窗口输入代码:

Option Explicit
´============================================
´
´   程序编写, airon,softWoker  2004-02-20
´  
 
´  
´
´============================================
Private Sub Command1_Click()
    Downloader1.BeginDownload url, SaveFile
    ´请把 URL 替代为 Http://文件路径
    ´请把 savefile 替代为下载到本地文件的路径与名称。
End Sub
   
Private Sub Downloader1_DownloadComplete(MaxBytes As Long, SaveFile As String)
    MsgBox "文件下载完成,保存文件名为:" & SaveFile, vbInformation Or vbOKOnly, "提示:"
End Sub

Private Sub Downloader1_DownloadError(SaveFile As String)
    MsgBox "下载发生错误!", vbExclamation Or vbOKOnly, "错误:"
End Sub

Private Sub Downloader1_DownloadProgress(CurBytes As Long, MaxBytes As Long, SaveFile As String)
    ´在这里添加进度第的代码
End Sub

最后申明:  本文为 airon,softWorker 原作,未经本人同意,不作出版,(CSDN 除外),但可以转载,转载时请注明作者。  如需在源程序的请mail联系我, 。希望本文能给广大读者带来帮助。


原文转自:http://www.ltesting.net