사용자 정의 컨트롤에 AsyncRead 메소드는 지정된 URL에서 다운로드 한다(이미지나, 파일)
다운로드한 데이타를 이미지 또는 이진 데이타로 취급할지를 나타내다.

다운로드 시작시는 사용자 정의 컨트롤에 AsyncRead와 URL, 타입을 지정하면 된다.

다운로드 완료시는 사용자 정의 컨트롤에 AsyncReadComplete 이벤트가 발생하며
이벤트 발생할때 AsyncProp인수가 전달되며
AsyncProp의 Value 값을 참조하면 다운로드한 값을 얻을수 있다.

AsyncReadProgress 이벤트는 다운로드 중에 데이타가 다운로드 될때마다 발생된다.
이벤트 발생할때 AsyncProp인수가 전달되며
AsyncProp의 BytesMax를 참조하면 다운로드할 데이타의 전체 크기
AsyncProp의 BytesRead를 참조하면 현재까지 다운로드한 데이타의 크기를 얻을 수 있다.

우선 프로젝트에 사용자 정의 컨트롤을 하나 추가한다.


다음 이미지는 소스의 초기 이미지이다.


다음 이미지는 다운로드 진행중인 이미지이다.


진행률 표시는 픽처박스와 2개의 레이블을 사용해서 표시했다.

다음은 소스이다.
폼의 소스이다.
'폼에 사용자 정의 컨트롤과,픽처박스,커맨드 버튼을 올린다
Option Explicit

Private Sub cmdStart_Click() ' 다운로드 시작
    UserControl11.Read "http://www.shareware.co.kr/action/getFile.asp?id=602a919e&sh=T"
End Sub

Private Sub Form_Load()
    With labProgress
        .BorderStyle = vbBSNone
        .Top = -10
        .Left = 0
        .Visible = False
        .BackColor = vbBlack
    End With
    With labProgressValue
        .BorderStyle = vbBSNone
        .Width = picProgress.ScaleWidth
        .Left = 0
        .Top = (picProgress.ScaleHeight - .Height) / 2
        .Alignment = vbCenter
        .ForeColor = vbWhite
        .BackStyle = vbTransparent
    End With
End Sub

Private Sub UserControl11_DownloadComplete(Data() As Byte) ' 다운로드 완료시 발생
'    Dim fd As Integer
'    fd = FreeFile ' 데이타를 파일로 저장
'    Open "a.exe" For Binary As #fd
'    Put #fd, 1, Data
'    Close #fd
End Sub

Private Sub UserControl11_DownLoadProgress(ByVal MaxByte As Long, ByVal ProgressByte As Long) ' 다운로드 진행 중에 발생
    If MaxByte = 0 Then Exit Sub
    labProgress.Visible = True
    labProgress.Width = (picProgress.ScaleWidth * ProgressByte) / MaxByte
    labProgressValue.Caption = ProgressByte & " / " & MaxByte
End Sub

사용자 정의 컨트롤 소스이다.
' 사용자 정의 컨트롤
Option Explicit

Event DownloadComplete(Data() As Byte)
Event DownLoadProgress(ByVal MaxByte As Long, ByVal ProgressByte As Long)

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
    Dim Data() As Byte
   
    Data = AsyncProp.Value
    RaiseEvent DownloadComplete(Data)
End Sub

Public Sub Read(ByVal URL As String) ' 다운로드 시작 메소드
    UserControl.AsyncRead URL, AsyncTypeConstants.vbAsyncTypeByteArray ' 다운로드 시작
End Sub

Private Sub UserControl_AsyncReadProgress(AsyncProp As AsyncProperty) ' 다운로드 진행중
    RaiseEvent DownLoadProgress(AsyncProp.BytesMax, AsyncProp.BytesRead)
End Sub

+ Recent posts