- Katılım
- 5 Kasım 2011
- Mesajlar
- 9,782
- Reaksiyon puanı
- 352
- Puanları
- 83
Bu makalede, basit ama etkili bir download programının nasıl yapılacağını göreceğiz.
Yeni bir boş proje formu açarak, menüden Add User Control ile yeni bir usercontrolu projemize ekliyoruz.
Eklediğimiz usercontrolun özelliklerinden ismini downloader yapıp, üzerine de image nesnesi ile ufak bir icon yerleştirtim. Böylelikle oluşturduğumuz usercontrolu formumuza eklediğimizde yeri belli olsun.
Usercontrolun üzerinde çift tıklayarak içine giriyoruz. ve aşağıdaki kodu olduğu gibi bu kısma ekleyelim.
Usercontroll ile işimiz bitti. Artık oluşan usercontrolu ToolBox ta görebiliyoruz.
Sırada formumuzu oluşturmaya geldi. Boş olan formumuz (Form1) üzerine örnekteki gibi textbox, command1 (İndir), command2(İptal) ,progressbar, label ve tabiki oluşturduğumuz usercontrol (downloader) nesnelerini ekledim.
Download işlemini başlatmak için gerekli olan komutumuz.
Bu aşamada kayıt yapabilmek için, url nin içinden dosyanın adını ve uzantısını almak gerekecekti. Bunun için de ufak bir fonksiyon oluşturdum (GetFileName) . Bunun üzerinde ufak bir değişiklik ile işinize yarayacak ise GetFilePath olarak da düzenleyebilir, yalnızca path i alabilirsiniz.
Kodlar anlaşılır olduğu için tek tek anlatmak yerine Form1 içinde yazılan kodları bir defada yazıyorum.
Ve işte sonuçlar.
Bu makalede kullanılan programlar : Visual Basic 6.0
Bir sonraki makalede görüşmek üzere..
eSa
Yeni bir boş proje formu açarak, menüden Add User Control ile yeni bir usercontrolu projemize ekliyoruz.
Eklediğimiz usercontrolun özelliklerinden ismini downloader yapıp, üzerine de image nesnesi ile ufak bir icon yerleştirtim. Böylelikle oluşturduğumuz usercontrolu formumuza eklediğimizde yeri belli olsun.
Usercontrolun üzerinde çift tıklayarak içine giriyoruz. ve aşağıdaki kodu olduğu gibi bu kısma ekleyelim.
Kod:
[COLOR=#0000cd]Public Event[/COLOR] DownloadProgress(CurBytes [COLOR=#0000cd]As Long[/COLOR], MaxBytes[COLOR=#0000cd] As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Public Event[/COLOR] DownloadComplete(MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Public Event[/COLOR] DownloadCancelled(CurBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]Private [/COLOR]uFileName [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Public [/COLOR]ilabel[COLOR=#0000cd] As Long[/COLOR]
[COLOR=#0000cd]Public [/COLOR]FileSizeWithMB [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Public [/COLOR]FileSizeWithKB [COLOR=#0000cd]As String[/COLOR]
[COLOR=#0000cd]Dim [/COLOR]FileNO [COLOR=#0000cd]As Long[/COLOR], BytesPos[COLOR=#0000cd] As Long[/COLOR]
[COLOR=#0000cd]Public Event [/COLOR]DownloadError(SaveFile [COLOR=#0000cd]As String[/COLOR], strError[COLOR=#0000cd] As String[/COLOR])
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_AsyncReadComplete(AsyncProp [COLOR=#0000cd]As [/COLOR]AsyncProperty)
[COLOR=#0000cd]On Error GoTo[/COLOR] errlabel
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadComplete(AsyncProp.BytesMax, uFileName)
[COLOR=#0000cd]Close [/COLOR]#FileNO
[COLOR=#0000cd] Exit Sub[/COLOR]
errlabel:
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
Err.Clear
[COLOR=#0000cd]Close [/COLOR]#FileNO
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_AsyncReadProgress(AsyncProp [COLOR=#0000cd]As [/COLOR]AsyncProperty)
[COLOR=#0000cd] On Error GoTo[/COLOR] AsyncReadProgressERR
[COLOR=#0000cd]Dim [/COLOR]tempFileSize [COLOR=#0000cd]As String[/COLOR]
tempFileSize = CStr(AsyncProp.BytesMax / 1024)
FileSizeWithKB = Mid(tempFileSize, 1, InStr(1, tempFileSize, ".") + 2) & "KB"
tempFileSize = CStr(AsyncProp.BytesMax / 1024 / 1024)
FileSizeWithMB = Mid(tempFileSize, 1, InStr(1, tempFileSize, ".") + 2) & "MB"
[COLOR=#0000cd]Dim [/COLOR]b() [COLOR=#0000cd]As Byte[/COLOR]
b = AsyncProp.Value
[COLOR=#0000cd]For [/COLOR]I = BytesPos To AsyncProp.BytesRead - 1
Put #FileNO, , b(I)
[COLOR=#0000cd]Next [/COLOR]I
BytesPos = AsyncProp.BytesRead
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadProgress(AsyncProp.BytesRead, AsyncProp.BytesMax, uFileName)
[COLOR=#0000cd]DoEvents[/COLOR]
[COLOR=#0000cd] Exit Sub[/COLOR]
AsyncReadProgressERR:
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
Err.Clear
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Public Sub [/COLOR]BeginDownload([COLOR=#0000cd]ByVal[/COLOR] URL[COLOR=#0000cd] As String[/COLOR], [COLOR=#0000cd]ByVal [/COLOR]FileName[COLOR=#0000cd] As String[/COLOR])
'filename = target
uFileName = FileName 'target
[COLOR=#0000cd]On Error GoTo[/COLOR] DownloadBeginERR
FileNO = FreeFile()
[COLOR=#0000cd]Open [/COLOR]FileName [COLOR=#0000cd]For [/COLOR]Binary [COLOR=#0000cd]As [/COLOR]FileNO
BytesPos = 0
UserControl.AsyncRead URL, vbAsyncTypeByteArray, FileName, vbAsyncReadForceUpdate
[COLOR=#0000cd] Exit Sub[/COLOR]
DownloadBeginERR:
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(FileName, Err.Description)
Err.Clear
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Public Sub[/COLOR] DownLoadStop()
[COLOR=#0000cd] On Error Resume Next[/COLOR]
UserControl.CancelAsyncRead uFileName 'uTarget
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Public Function[/COLOR] CancelAllDownload()[COLOR=#0000cd] As Boolean[/COLOR]
[COLOR=#0000cd]On Error GoTo[/COLOR] CancelAllDownloadErr
UserControl.CancelAsyncRead uFileName 'uTarget
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadCancelled(BytesPos, uFileName)
CancelAllDownload = True
[COLOR=#0000cd]Exit Function[/COLOR]
CancelAllDownloadErr:
[COLOR=#0000cd]RaiseEvent [/COLOR]DownloadError(uFileName, Err.Description)
CancelAllDownload = False
Err.Clear
[COLOR=#0000cd]End Function[/COLOR]
[COLOR=#0000cd]Private Sub[/COLOR] UserControl_Resize()
UserControl.Width = ScaleX(32, vbPixels, vbTwips)
UserControl.Height = ScaleY(32, vbPixels, vbTwips)
[COLOR=#0000cd]End Sub[/COLOR]
Usercontroll ile işimiz bitti. Artık oluşan usercontrolu ToolBox ta görebiliyoruz.
Sırada formumuzu oluşturmaya geldi. Boş olan formumuz (Form1) üzerine örnekteki gibi textbox, command1 (İndir), command2(İptal) ,progressbar, label ve tabiki oluşturduğumuz usercontrol (downloader) nesnelerini ekledim.
Download işlemini başlatmak için gerekli olan komutumuz.
Kod:
downloader1.begindownload "URL" , "KAYIT_YERİ_VE_DOSYA_ADI"
Bu aşamada kayıt yapabilmek için, url nin içinden dosyanın adını ve uzantısını almak gerekecekti. Bunun için de ufak bir fonksiyon oluşturdum (GetFileName) . Bunun üzerinde ufak bir değişiklik ile işinize yarayacak ise GetFilePath olarak da düzenleyebilir, yalnızca path i alabilirsiniz.
Kod:
[COLOR=#0000cd]Function[/COLOR] GetFileName([COLOR=#0000cd]ByVal [/COLOR]path [COLOR=#0000cd]As String[/COLOR]) [COLOR=#0000cd]As String[/COLOR]
GetFileName = Mid(StrReverse(path), 1, InStr(1, StrReverse(path), "/") - 1)
GetFileName = StrReverse(GetFileName)
[COLOR=#0000cd]End Function[/COLOR]
Kodlar anlaşılır olduğu için tek tek anlatmak yerine Form1 içinde yazılan kodları bir defada yazıyorum.
Kod:
[COLOR=#0000cd]Private Sub[/COLOR] Command1_Click() '[COLOR=#008000]İndir[/COLOR]
downloader1.BeginDownload Text1.Text, "c:\test\" & GetFileName(Text1.Text)
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Private Sub[/COLOR] Command2_Click() '[COLOR=#008000]iptal[/COLOR]
downloader1.DownLoadStop
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Private Sub[/COLOR] downloader1_DownloadComplete(MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
[COLOR=#0000cd]MsgBox [/COLOR]"İndirme işlemi tamamlandı.." & vbCrLf & SaveFile & " - " & downloader1.FileSizeWithMB
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Private Sub[/COLOR] downloader1_DownloadProgress(CurBytes [COLOR=#0000cd]As Long[/COLOR], MaxBytes [COLOR=#0000cd]As Long[/COLOR], SaveFile [COLOR=#0000cd]As String[/COLOR])
Label1.Caption = Format((CurBytes / 1024 / 1024), "0.##MB") & " / " & Format((MaxBytes / 1024 / 1024), "0.##MB")
ProgressBar1.Max = MaxBytes
ProgressBar1.Value = CurBytes
[COLOR=#0000cd]End Sub[/COLOR]
[COLOR=#0000cd]Function[/COLOR] GetFileName([COLOR=#0000cd]ByVal [/COLOR]path [COLOR=#0000cd]As String[/COLOR]) [COLOR=#0000cd]As String[/COLOR]
GetFileName = Mid(StrReverse(path), 1, InStr(1, StrReverse(path), "/") - 1)
GetFileName = StrReverse(GetFileName)
[COLOR=#0000cd]End Function[/COLOR]
Ve işte sonuçlar.
Bu makalede kullanılan programlar : Visual Basic 6.0
Bir sonraki makalede görüşmek üzere..
eSa