VB 진행바 표시 만들기
페이지 정보
작성자
본문
아래 예제를 참고하세요. 질문란의 코드 기준으로 글꼴 색상 파란색으로 정의된 세 개의 변수는 다음 기능을 위해 추가된 것입니다.
- 경과시간을 lblElapsed에 초 단위로 표시
- 수신데이터양을 lblFSize에 KB단위로 표시
- 진행률을 프로그레스바 PB1에 표시
Sub Download_with_ProgressBar()
Dim dURL As String '다운로드할 파일의 URL (source)
Dim FileName As String '저장할 파일명 (destination)
Dim DownURL() As Byte '매 수신 데이터를 저장할 바이트 배열
Dim BytesIn As Double '전송받은 데이터양(바이트 단위)
Dim FileSize As Long '전송받을 파일의 크기(바이트 단위)
Dim StartTime As Double '전송시작시간
dURL = "" '다운로드할 파일의 URL
FileName = "C:\file.zip" '저장할 파일명
'(1) 전송받을 파일크기 가져오기 -------------------------------------------
fInet.URL = dURL
fInet.Execute , "GET", , "FSize in Bytes: " & CStr(FileSize) & vbCrLf
'요청한 정보의 전송이 끝날 때까지 대기하되
Do While fInet.StillExecuting
'VB가 할 일이 없는 동안에는 시스템이 일할 수 있도록
DoEvents
Loop
'전송받은 헤더정보에서 파일크기를 추출
FileSize = CLng(fInet.GetHeader("Content-length"))
'(2) 저장할 파일을 열어 다운로드 실행 -------------------------------------
'저장할 파일을 열어
StartTime = Now()
Open FileName For Binary As #1
Do
'1024바이트 단위로 전송받되 바이트 어레이로
DownURL = fInet.GetChunk(1024, icByteArray)
'열린 파일에 전송받은 데이터를 추가
Put #1, , DownURL
'받은 데이터량을 적산
BytesIn = BytesIn + UBound(DownURL, 1) + 1
'경과시간 표시
lblElapsed = Int(86400 * (Now() - StartTime)) & " sec"
'받은 데이터량 라벨에 표시
lblFSize = Round(BytesIn / 1024) & " KB"
'프로그레스바 업데이트
PB1.Value = Round(100 * BytesIn / FileSize)
'VB가 할 일이 없는 동안에는 시스템이 일할 수 있도록
DoEvents
'더 이상 다운로드 받은 데이터가 없을 때까지 계속
Loop While UBound(DownURL, 1) > 0
Close #1
End Sub
※ Internet Transfer Control 관련 다음 메소드/속성들의 상세한 설명은 VB도움말에 있습니다: Execute, StillExecuting, GetHeader, GetChunk
[이 게시물은 오원장님에 의해 2013-02-28 16:41:58 오피스팁에서 이동 됨]댓글목록
오원장님의 댓글
