약간의 For ~ Next 문을 이해하는 설명을 조금 곁들여서 폼의 배경타일 입히는 방법을
소개하도록 하겠습니다.
이미지를 출력하는 용도로만 사용하면 되므로 리소스를 잡아먹는 컨트롤들(픽쳐박스,이미지박스) 등은 제하고 ImageList 컨트롤을 사용하도록 합니다
** ImageList 컨트롤 **
ActiveX 컨트롤이라해서 기본 컨트롤은 아니고 구성요소 추가를 통해서 사용할수 있는 컨트롤입니다
프로젝트 >> 구성요소 를 통해서 추가 가능하구요 이름은 Microsoft Window CommonControl 6.0 입니다 다수의 컨트롤이 같이 추가됩니다만 이중에서 ImageList 컨트롤만 폼에 그려주시면 됩니다
이미지 리스트의 주된 용도는 사용될 그림을 모아두는 가방 같은 역활입니다
실행시에는 컨트롤의 모습이 자동 숨겨지게 되구요 필요할때 언제든 담아놓은 그림을
불러올수 있습니다 이제 이 컨트롤에 그림을 저장하는 법을 설명드리죠
그림) 이미지리스트에 그림 넣기
폼에 이미지리스트를 포함하면 저런 모습이 됩니다 우 클릭하면 속성 메뉴가 보일거에요
그림) 속성 설정
세가지 탭중 일반 탭을 선택하시면 위와 같이 그림의 크기를 지정할수 있습니다
원하는 크기로 지정해 주시면 되겠죠
그림) 이미지 탭 설정
이미지 탭을 선택하면 위와 같은 모습으로 바뀝니다
이곳에서 그림 삽입 버튼을 누르면 그림이 위치한 경로를 묻는 대화상자가 뜨게 되고
이곳에서 원하는 그림을 선택하면 됩니다. 필요한 만큼 그림을 삽입하시고
여기에서 알아두셔야 할 중요 속성 두가지가 있습니다
1. Index 속성
그림이 삽입된 순서를 나타내는 값이 됩니다
나중에 그림을 불러올때 이용할수 있겠으나 숫자라는게 영 기억하기 힘든 부분이 많죠
2. Key 속성
Index 속성과 같은 역활을 합니다만
숫자대신 의미있는 문자를 넣어서 해당 그림을 불러오는데 도움을 줄수 있습니다.
가령 Index 1번의 현재 그림은 웃는 모습이니 Key 속성에 Smile 이라고 넣어준다면
느낌이 팍 오겠죠
이제 그림 삽입이 다 되었으면 확인 버튼 눌러서 빠져나오시면 됩니다.
코딩을 하면서 이미지리스트를 활용하는 법도 같이 보시죠
** 폼 **
Option Explicit
Dim i As Integer, j As Integer
Dim nWidth As Integer, nHeight As Integer
Dim Cnt As Integer
Private Sub Form_Click()
Me.Refresh
Cnt = 0
For i = 0 To Me.ScaleWidth Step nWidth '폼의 너비만큼 이미지의 간격으로 루핑
For j = 0 To Me.ScaleHeight Step nHeight '폼의 높이만큼 이미지의 간격으로 루핑
Cnt = Cnt + 1
If Cnt Mod 2 = 0 Then '나머지를 구해서 0 인지 1 인지 판단 구해진 나머지에 의해서 다른 이미지 출력
Me.PaintPicture ImageList1.ListImages(1).Picture, i, j, nWidth, nHeight, 0, 0, nWidth, nHeight
Else
Me.PaintPicture ImageList1.ListImages(2).Picture, i, j, nWidth, nHeight, 0, 0, nWidth, nHeight
End If
Next j
Next i
End Sub
'For 문 중첩루프의 이해
'for i = 1 to 10
' for j = 1 to 10
' 수행될 문장
' Next j
'next i
'i 는 1 을 시작으로 바로 j 루핑으로 가게 됩니다
'j 또한 1 이지만 수행문장을 거치고 next j 를 만나게 되고 현재 j 는 최종값(10) 을 아직 만족하지 못하므로
'j 문장을 다시 수행합니다
'그럼 j 는 2가 되겠죠 수행문장을 거쳐서 또다시 next j 를 만나고 아직 최종값이 아니므로 다시 수행되죠
'이제 j 가 10이라고 가정하고 next j 를 만나면 j 는 최종값을 가지고 있으므로 그 다음문장 next i 로 가게됩니다
'이제 비로소 i 는 2가 되는것이죠 그리고 for j 문장을 또 열심히 수행합니다 위에처럼 최종값을 가질때까지
'결론적으로 i 가 한번 수행되면 j 는 최종값을 갖기 전까지는 혼자서 열심히 돌고 돌게 됩니다
'i 가 최종값을 갖게 될때 비로소 for 문장을 종료하게 됩니다
'이해를 돕기 위해 최종값을 만나면 for 문을 종료한다고 말씀드렸지만 사실 for 문은 최종값을 넘어서 한번더 돌게
'됩니다 즉 10 값을 가진 상태에서도 next 를 만나면 다시 올라가게 됩니다
'올라가면 이제 11 이 되겠죠 그리고 판단을 합니다 현재 가지고 있는 값이 정해진 범위에 있는 값인지를
'11 은 10 을 넘어서는 값이므로 수행을 포기하고 자신의 루프를 벗어나고 next i 문장을 수행하게 되는겁니다
Private Sub Form_Load()
nWidth = ImageList1.ListImages(1).Picture.Width '이미지리스트에 포함된 이미지의 폭을 구한다
nHeight = ImageList1.ListImages(1).Picture.Height '이미지리스트에 포함된 이미지의 높이를 구한다
End Sub
그림) 두가지 이미지를 이용해 폼에 타일을 입힌 모습
아이콘이 좀더 그럴싸 하면 좋으련만^^;
대충 이런 용도로 이용 가능합니다
그럼 즐공하세요~
첫댓글 대단 하다는 말 밖에는 안나오네요...
^^ 멋있네요
이런..기술을..알고 계시다니...고맙습니다..