Posted on 2008/04/09 17:31
Filed Under Programming/VB

DNS server, DNS service  

픽쳐박스에서 픽쳐를 스크롤하는 방법은 크게 두가지 가 있습니다.
가장 용이하지만 단점이 있는 방법은
피쳐 박스에 이미지박스와 수직, 수평 스크롤바를 삽입합니다.
밖에 있는 픽쳐박스는 화면에 배치할 크기로 지정합니다.
스크롤바는 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를 이용하여 축소/확대로 그려주는 방법임.

 

2008/04/09 17:31 2008/04/09 17:31

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by CoCo

Notice

Counter

· Total
: 877408
· Today
: 318
· Yesterday
: 61