픽쳐박스 스크롤 확대 축소

픽쳐박스에서 픽쳐를 스크롤하는 방법은 크게 두가지 가 있습니다.
가장 용이하지만 단점이 있는 방법은
피쳐 박스에 이미지박스와 수직, 수평 스크롤바를 삽입합니다.
밖에 있는 픽쳐박스는 화면에 배치할 크기로 지정합니다.
스크롤바는 Visible=False로 합니다.
이미지 파일 로드시 스크롤바를 설정합니다.


sub LoadImage(filename as string)
hscroll1.visible = false
vscroll1.visible = false
on error resume next
set image1.picture = LoadPicture(filename)
if err then
    msgbox error
    exit sub
elseif image1.picture = nothing then
    exit sub
endif


image1.move 0,0
hscroll1.visible = image1.Width > picture1.scalewidth
vscroll1.visible = image1.height > picture1.scaleheight
if hscroll1.visible then
    vscroll1.visible = image1.height > picture1.scaleheight-hscroll1.width
endif
if vscroll1.visible then
    hscroll1.visible = image1.Width > picture1.scalewidth – vscroll1.height
endif


hscroll1.move 0, picture1.scaleheight – hscroll1.height, picture1.scalewidth – iif( vscroll1.visible, vscroll1.width,0)
vscroll1.move picture1.scalewidth – vscroll1.width, 0, vscroll1.width, picture1.scaleheight – iif( hscroll1.visible, hscroll1.height,0)


if hscroll1.visible then
    hscroll1.value = 0
    hscroll1.min = picture1.scalewidth – image1.width – iif( vscroll1.visible, vscroll1.width,0)
    hscroll1.max = 0
    hscroll1.largechange =( picture1.scalewidth- iif( vscroll1.visible, vscroll1.width,0))/2
endif


if vscroll1.visible then
    vscroll1.value = 0
    vscroll1.min = picture1.scaleheight – image1.height – iif( hscroll1.visible, hscroll1.height,0)
    vscroll1.max = 0
    vscroll1.largechange =( picture1.scaleheight- iif( hscroll1.visible, hscroll1.height,0))/2
endif
end sub


sub hscroll1_change() ‘ scroll 에도 필요시 call hscroll1_change
    image1.move hscroll1.value, vscroll1.value
end sub


sub hscroll1_change() ‘ scroll 에도 필요시 call hscroll1_change
    hscroll1_change
end sub


아마 이미지가 깜빡 거릴 겁니다.
이를 방지하려면 이미지 대신에 픽쳐박스를 넣으시고
이미지를 로드한 후에 픽쳐박스의 크기를 그림에 맟추어 주세요


picture2.move 0, 0, scalex(picture2.picture.width,,picture1.scalemode),  scaley(picture2.picture.height,,picture1.scalemode)


다만 이 방법은 큰 이미지의 경우 리소스의 문제가 나타나겠습니다. 또한 축소/확대의 문제가 있겠습니다.


이미지를 이용하여 축소/확대의 경우는
image1.stretch = true
image1.move 0, 0, scalex(image1.picture.width,,picture1.scalemode) * zoom , _
                      scaley(image1.picture.height,,picture1.scalemode) * zoom


다른 방법은 추가의 이미지박스나 픽쳐박스를 사용치 않고
보이는 부분만 연산하여 paintpicture 또는 API의 StretchBlt를 이용하여 축소/확대로 그려주는 방법임.


 

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다