![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() |
|
|
主題工具 | 顯示模式 |
|
|
#1 |
|
註冊會員
|
-------------------- 閱讀本主題的最佳解答 -------------------- 爬了不少文始終不知道該如何實做IBindStatusCallback這介面 特地來問問看,是否有誰會使用 ![]() |
|
|
送花文章: 362,
|
|
|
#4 (permalink) |
|
註冊會員
|
大部份的人都用winsock, inet來設計 比較少人用URLDownloadToFile 既然你inet不熟 ,我就 回答這個URLDownloadToFile 表單先加一個 進度條ProgressBar1 一個Label1 主要是在表單加上 一行Implements olelib.IBindStatusCallback 和以下2個事件 就可以了. 語法:
Implements olelib.IBindStatusCallback
Private Function StartTheStinkinDownLoad(ByVal File2DownLoad As String, ByVal File2Save As String) As Boolean
Dim DownLoadResult As Long
DownLoadResult = olelib.URLDownloadToFile(Nothing, File2DownLoad, File2Save, 0, Me)
StartTheStinkinDownLoad = (DownLoadResult = olelib.S_OK)
End Function
Private Sub IBindStatusCallback_OnProgress(ByVal ulProgress As Long, ByVal ulProgressMax As Long, ByVal ulStatusCode As olelib.BINDSTATUS, ByVal szStatusText As Long)
On Error GoTo BadDeal
If ulProgressMax <= 0 Then Exit Sub
ProgressBar1.Max = CSng(ulProgressMax) ' set the progress bar's max value after it is known for sure
ProgressBar1.Value = CSng(ulProgress) ' set the current level of progress
DoEvents 'force a refresh... even though this slows things down
Exit Sub
BadDeal:
Form1.Text3.Text = Form1.Text3.Text & "下載出錯: " & ulProgress & "/" & ProgressBar1.Value & "/" & ulProgressMax & "/" & ProgressBar1.Max & vbCrLf
Resume Next
End Sub
語法:
Public Function ShowDownLoad(FileList As String, Optional Owner As Object)
Dim i, X As Integer
i = Split(FileList, ",")
Me.Print "正在下載... 請稍候..."
Label1.Caption = "檢查複製緩存..."
If IsMissing(Owner) = False Then
Me.Show
Else
Me.Show vbModeless, Owner
End If
Me.Refresh
Dim File2DownLoad As String, File2Save As String, DeleteCache As Boolean, TopLimit As Integer, TempDelete As String, OffSet As Integer
TopLimit = (UBound(i) - 2) / 3
OffSet = 0
For X = 0 To TopLimit
File2DownLoad = i(OffSet)
File2Save = i(OffSet + 1)
TempDelete = i(OffSet + 2)
If TempDelete = "1" Then
DeleteCache = True
Else
DeleteCache = False
End If
OffSet = OffSet + 3
ProgressBar1.Value = 0
Form1.Text3.Text = Form1.Text3.Text & "開始下載文件..." & vbCrLf
Form1.Text3.Text = Form1.Text3.Text & File2DownLoad & vbCrLf
If DeleteCache Then
If DeleteUrlCacheEntry(File2DownLoad) = 1 Then
Form1.Text3.Text = Form1.Text3.Text & "找到上次下載緩存文件刪除..." & vbCrLf
Else
Form1.Text3.Text = Form1.Text3.Text & "沒有緩存文件存在" & vbCrLf
End If
End If
Label1.Caption = File2DownLoad
If StartTheStinkinDownLoad(File2DownLoad, File2Save) Then
Form1.Text3.Text = Form1.Text3.Text & "文件下載完畢: " & File2DownLoad & vbCrLf & vbCrLf
ShowDownLoad = True
Else
Form1.Text3.Text = Form1.Text3.Text & "文件下載失敗!" & vbCrLf
ShowDownLoad = False
End If
Next
Form1.Text3.Text = Form1.Text3.Text & "結束下載文件..." & vbCrLf
Unload Me
Set frmDnLoad = Nothing
End Function
Private Sub Command1_Click() Dim FileList As String FileList = Text1.Text & "," & Text2.Text & "," & "1" Call frmDnLoad.ShowDownLoad(FileList, Me) End Sub 此帖於 2008-09-29 01:49 AM 被 飛行船大大 編輯. |
|
|
送花文章: 185,
|
|
向 飛行船大大 送花的會員:
|
|
|
#6 (permalink) |
|
註冊會員
|
我找到元件了,可以跑了
可是問題來了,我的進度表那裡一直弄不好,能否幫我看看 一直常發生溢位和錯誤 語法:
Implements olelib.IBindStatusCallback
Private Function StartTheStinkinDownLoad(ByVal File2DownLoad As String, ByVal File2Save As String) As Boolean
Dim DownLoadResult As Long
DownLoadResult = olelib.URLDownloadToFile(Nothing, File2DownLoad, File2Save, 0, Me)
StartTheStinkinDownLoad = (DownLoadResult = olelib.S_OK)
End Function
Private Sub IBindStatusCallback_GetBindInfo(grfBINDF As olelib.BINDF, pbindinfo As olelib.BINDINFO)
End Sub
Private Function IBindStatusCallback_GetPriority() As Long
End Function
Private Sub IBindStatusCallback_OnDataAvailable(ByVal grfBSCF As olelib.BSCF, ByVal dwSize As Long, pformatetc As olelib.FORMATETC, pStgmed As olelib.STGMEDIUM)
End Sub
Private Sub IBindStatusCallback_OnLowResource(ByVal reserved As Long)
End Sub
Private Sub IBindStatusCallback_OnObjectAvailable(riid As olelib.UUID, ByVal pUnk As stdole.IUnknown)
End Sub
Private Sub IBindStatusCallback_OnProgress(ByVal ulProgress As Long, ByVal ulProgressMax As Long, ByVal ulStatusCode As olelib.BINDSTATUS, ByVal szStatusText As Long)
ProgressBar1.Min = 0
ProgressBar1.Max = 100
If ulProgressMax <> 0 Then
ProgressBar1.Value = CInt(100 * (ulProgress / ulProgressMax))
End If
If ulProgressMax <> 0 Then
Debug.Print ulProgress
Debug.Print ulProgressMax
Debug.Print ulProgress / ulProgressMax
End If
End Sub
Private Sub Command1_Click()
StartTheStinkinDownLoad "http://www.google.com.tw/", "C:/abc.txt"
End Sub
Private Sub IBindStatusCallback_OnStartBinding(ByVal dwReserved As Long, ByVal pib As olelib.IBinding)
End Sub
Private Sub IBindStatusCallback_OnStopBinding(ByVal hresult As Long, ByVal szError As Long)
End Sub
|
|
|
送花文章: 362,
|
|
|
#8 (permalink) |
|
註冊會員
|
ProgressBar1.Value = CInt(100 * (ulProgress / ulProgressMax))
是這一行會發生錯誤,照理說ulProgressMax應該會比ulProgress大 但事實跑起來並不然,使得我的ProgressBar1.Value 的值超出100而超出範圍造成錯誤 而且從頭到尾的數值改變只有變動一次...我把我Debug 印的PO上來好了 [1] Progress event received: 0 of 0, StatusCode: 34 [2] Progress event received: 0 of 0, StatusCode: 1 [3] Progress event received: 0 of 0, StatusCode: 2 [4] Progress event received: 0 of 0, StatusCode: 11 [5] Progress event received: 0 of 0, StatusCode: 24 [6] Progress event received: 0 of 0, StatusCode: 13 [7] Progress event received: 6779 of 3115, StatusCode: 4 [8] Progress event received: 6779 of 3115, StatusCode: 14 [9] Progress event received: 6779 of 3115, StatusCode: 6 以上就是我Debug印出來的狀態 |
|
|
送花文章: 362,
|
![]() |
|
|
相似的主題
|
||||
| 主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
| 如何在w2k底下看下載的DVDrip?(無DVDRom) | darren52d | 一般電腦疑難討論區 | 2 | 2003-07-23 06:52 AM |
| 如何讓ftp軟體在下載時有續傳的功能 | 左非 | 一般電腦疑難討論區 | 0 | 2003-03-08 11:27 PM |
| 請問IE如何取消下載的時間限制,或更改下載時間限制? | vivivi | 軟體應用問題討論區 | 4 | 2003-02-22 03:33 AM |