# Re: help!!!

Posted by Honey on August 21, 1998 at 22:43:45:

In Reply to: help!!! posted by hujian on August 20, 1998 at 13:05:57:

: i have picturebox control,and i load a picture,if the picture
: is too big,how can the picturebox auto appear the scrollbar?
: help me thanks!

据我所知 VB 并没有直接可以提供
这种功能的物件 只有 DIY
在Form 上填上 PictureBox ,
ScrollBar 再加上一些程式就好了
上次你不是问过了吗?
(应该没记错~是小顺子回答的)
大概问题没有解决吧.....
嗯 以下提供你一些东西
是我以前写的东西
我承认这并不是好的程式
为了提升速度我已经把物件
数值全部宣告成变数运算
很难阅读 最近我可能会把
它整理一下 如果以下你看不懂
整理后我在寄给你
步骤
1.先在Form上 填上一个PictureBox
PictureBox的Name属性改为pa
AutoSize属性改为True
2.在Form最右下角(不可以在pa上)
再填上一个PictureBox,
PictureBox的Name属性
需为picture1
Height,Width属性值为255
3.在Form最右缘(不可以在pa上)
填上一个VscrollBar
在最右缘(不可以在pa上)
填上一个HscrollBar
尽量和 "笔记本" 排列方式一样

最后在Form中的程式码 从 一般宣告开始如下
(可以直接贴上)

'一般宣告
Public Pi1T As Long
Public Frm2H As Long
Public Pi1L As Long
Public Frm2W As Long
Public Hs1T As Long
Public Frmm2H As Long
Dim LngTemp(19) As Long
Option Explicit

Private Sub Form_Load()
Pi1T = Picture1.Top
Frm2H = Form2.Height
'/*Picture1.Top = 3840(Picture1.Top(piw)) _
+ (Me.Height - 4760(Form2.Height _
))*/
'Lngtemp(1) = Lngtemp(5) + Pi1T - Frm2H
Pi1L = Picture1.Left
Frm2W = Form2.Width - 60
'/*Picture1.Left = 5160 + (Me.Width - 5460)*/
'/*VScroll1.Left = 5160 + (Me.Width - 5460)*/
'
'/*HScroll1.Top = 3900 + (Me.Height - 4800)*/
Hs1T = HScroll1.Top
Frmm2H = Form2.Height '+ Picture1.Height
'Lngtemp(3) = Lngtemp(5) + Hs1T - Frmm2H
'Lngtemp(2) = Lngtemp(6) + Pi1L - Frm2W
With HScroll1
.Value = 0
.Max = -300
.LargeChange = 10
.SmallChange = 5
End With
With VScroll1
.Max = -150
.LargeChange = 20
.Value = 0
.SmallChange = 5
End With
Me.Pa.Picture = LoadPicture("C:\windows\CLOUDS.bmp")
'设定读取图片
End Sub

Private Sub Form_Resize()
On Error GoTo Finish
LngTemp(5) = Me.Height
LngTemp(6) = Me.Width
LngTemp(3) = LngTemp(5) + Hs1T - Frmm2H
LngTemp(1) = LngTemp(5) + Pi1T - Frm2H
LngTemp(2) = LngTemp(6) + Pi1L - Frm2W
'Lngtemp(1) = Lngtemp(5) - 620 '<-4760+3840
'Lngtemp(2) = Lngtemp(6) - 300 '<-5460+5160
'Lngtemp(3) = Lngtemp(5) - 620 '<-4800 + 3900
'Lngtemp(4) = Lngtemp(5) - 1150 '<-4800+3650
LngTemp(7) = (LngTemp(6) - 120)
LngTemp(8) = (LngTemp(6) - 280)
LngTemp(9) = (LngTemp(5) - 400)
'/*Picture1.Top = 3840 + (Me.Height - 4760)*/
'/*Picture1.Left = 5160 + (Me.Width - 5460)*/
'/*VScroll1.Left = 5160 + (Me.Width - 5460)*/
'/*HScroll1.Top = 3900 + (Me.Height - 4800)*/
'/*Picture2.Top = 3650 + (Me.Height - 4800)*/
Picture1.Top = LngTemp(1)
Picture1.Left = LngTemp(2)
VScroll1.Left = LngTemp(2)
HScroll1.Top = LngTemp(3)
'/*object.移动量 =object.长度 -表单 _
长度增减量*/
Dim i As Double
i = IIf(HScroll1.Visible = True, 670, 450)
'/*HScroll1 VScroll1 都存在时需留一 _
段空间放Picture1 ,670是表单 _
外线内线差(测试值)*/
If Pa.ScaleHeight > (LngTemp(5) - i) Then
VScroll1.Visible = True
If Pa.Width > (LngTemp(6) - 310) Then
VScroll1.Height = (LngTemp(3))
HScroll1.Width = LngTemp(8)
HScroll1.Visible = True
Else
If HScroll1.Value = 0 Then
Picture1.Visible = False
VScroll1.Height = LngTemp(9)
HScroll1.Visible = False
Else
VScroll1.Height = (LngTemp(3))
HScroll1.Width = LngTemp(8)
End If
'/*如果此时卷轴未归零,卷轴就不能 _
消失否则移动的部分会看不到*/
End If
ElseIf Pa.Width > (LngTemp(6) - 180) Then
If VScroll1.Value = 0 Then
Picture1.Visible = False
VScroll1.Visible = False
HScroll1.Visible = True
HScroll1.Width = LngTemp(7)
Else
Picture1.Visible = True
HScroll1.Visible = True
VScroll1.Visible = True
VScroll1.Height = (LngTemp(3))
HScroll1.Width = LngTemp(8)
End If
'/*如果此时卷轴未归零,卷轴就不能 _
消失否则移动的部分会看不到*/
Else
'/*以下是图形大小未超出表单大小时*/
If HScroll1.Value = 0 And VScroll1.Value = 0 Then
HScroll1.Visible = False
VScroll1.Visible = False
ElseIf VScroll1.Value = 0 Then
Picture1.Visible = False
VScroll1.Visible = False
HScroll1.Visible = True
HScroll1.Width = LngTemp(7)
ElseIf HScroll1.Value = 0 Then
VScroll1.Visible = True
Picture1.Visible = False
VScroll1.Height = LngTemp(9)
HScroll1.Visible = False
Else
VScroll1.Height = (LngTemp(3))
HScroll1.Width = LngTemp(8)
End If
'/*如果此时卷轴未归零,卷轴就不能 _
消失否则移动的部分会看不到*/
End If
'If HScroll1.Visible = False Then _
Picture2.Top = Picture2.Top + 255
'/*尺规再 HScroll1不存在时贴紧表单*/
If VScroll1.Visible = True And _
HScroll1.Visible = True Then
Picture1.Visible = True
Else
Picture1.Visible = False
End If
'/*水平 垂直卷轴都存在时,交接处需以 _
Picture1 隔开*/
Finish:

End Sub
Private Sub HScroll1_Change()

If HScroll1.Value = 0 Then Call Form_Resize
'/*检查表单是否大于图形*/
LngTemp(11) = HScroll1.Value
LngTemp(12) = Pa.ScaleWidth
LngTemp(13) = HScroll1.Width
LngTemp(14) = LngTemp(12) - LngTemp(13) + 29
Pa.Left = (Format(LngTemp(11)) / 300) * _
Format(LngTemp(14))
End Sub
Private Sub Pa_Change()
If Pa.ScaleHeight > VScroll1.Height Then
'/*图片垂直长度大于垂直卷轴*/
If Pa.Width > HScroll1.Width Then
'/*图片垂直长度大于垂直卷轴 _
图片宽度大于水平卷轴*/
VScroll1.Height = LngTemp(3)
HScroll1.Width = LngTemp(8)
VScroll1.Visible = True
HScroll1.Visible = True
Picture1.Visible = True
Else
'/*图片垂直长度大于垂直卷轴*/
VScroll1.Visible = True
VScroll1.Height = (Me.Height - 560)
End If
ElseIf Pa.Width > HScroll1.Width Then
'/*图片宽度大于水平卷轴*/
HScroll1.Visible = True
HScroll1.Width = LngTemp(8)
Else
'/*图形小于卷轴*/
HScroll1.Visible = False
VScroll1.Visible = False
Picture1.Visible = False
End If

End Sub

Private Sub VScroll1_Change()
LngTemp(15) = VScroll1.Value
LngTemp(16) = Pa.ScaleHeight
LngTemp(17) = VScroll1.Height
LngTemp(18) = LngTemp(16) - LngTemp(17)
If VScroll1.Value = 0 Then Call Form_Resize
'/*检查表单是否大于图形*/
Pa.Top = (Format(LngTemp(15)) / 150) * _
Format(LngTemp(18))

End Sub

Follow Ups: