UserControl에서 지원하는 AsyncRead 메서드를 이용하여 웹이미지를 가져오는 컨트롤을 만들어보겠습니다.
웹 이미지 뿐만 아니라 이를 이용하면 쉽게 파일 업데이트 기능도 만들 수 있습니다.(검색.. 검색)

예를 들어 고객관리 프로그램이 있는데 고객의 기본정보는 데이터베이스에서 가져오고 이용자의 키값으로 웹서버에 사진이미지나
명함 이미지를 가져올 경우... 
이미지고 뭐고 바이너리한 데이터를 전부 데이터베이스에 넣어놓고 가져올 수 있게 만들면 되잖아.. 
뭐.. 예를 들어본거니 이러한 경우가 있다고 가정합시다. 웹이 아닌경우일 뿐이지 실제로 이러한 경우는 꽤 있는편입니다...

프로젝트를 한개 만들어서 사용자 정의 컨트롤을 한개 추가합니다.
추가된 사용자 정의 컨트롤에 PictureBox 한개를 놓고 아래 소스를 붙여넣기 합니다.

Private Sub UserControl_Initialize()
  Picture1.AutoSize = True
  Picture1.Visible = False
End Sub

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
  On Error Resume Next
  If AsyncProp.StatusCode <> vbAsyncStatusCodeEndDownloadData Then Exit Sub
  If AsyncProp.BytesRead <= 0 Then Exit Sub
  If AsyncProp.AsyncType = vbAsyncTypePicture Then
    Picture1.Picture = AsyncProp.Value
    UserControl.Picture = Picture1.Picture
    UserControl.Width = Picture1.ScaleWidth
    UserControl.Height = Picture1.ScaleHeight
  End If
End Sub

Public Sub AsyncImage(ByVal Url As String)
  On Error Resume Next
  UserControl.AsyncRead Url, vbAsyncTypePicture
End Sub


도구상자에서 방금 만들어 놓은 사용자 정의 컨트롤을 폼에 올려 놓고 CommandBox 도 한개 가져다 놓습니다.
버튼 Click 이벤트에 다음과 같이 코드를 입력합니다.

UserControl11.AsyncImage "http://buery.co.kr/parking/title.jpg"

정상적인 경로를 넘겨주면 AsyncRead를 통해 전달된 이미지를 컨트롤을 통해 볼 수 있습니다.
Event 를 정의하여 읽어오기가 진행중인지 완료되었는지 실패하였는지 등.. 도 구현가능하겠죠..


+ Recent posts