如何给picturebox加滚动条?

jhhf 2002-09-28 01:49:02
谢谢!
...全文
112 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc_tapi 2002-11-07
  • 打赏
  • 举报
回复
up
Pendy 2002-09-28
  • 打赏
  • 举报
回复
PictureBox变化后修改滚动条的值
zyl910 2002-09-28
  • 打赏
  • 举报
回复
用了ShowScrollBar后
必须子类拦截PictureBox的消息
响应WM_HSCROLL、WM_VSCROLL消息
Pendy 2002-09-28
  • 打赏
  • 举报
回复
VScroll、HScroll的父对象是PicBack
danielinbiti 2002-09-28
  • 打赏
  • 举报
回复
vscroll1,hscroll1放到picture1 里
picture1是外面的图片框
danielinbiti 2002-09-28
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Form1.ScaleMode = 3
Picture1.ScaleMode = 3
Picture1.ScaleMode = 3
Picture1.Appearance = 0
Picture2.Appearance = 0
Picture2.AutoSize = True
Picture1.AutoSize = False
Picture2.Left = 0
Picture2.Top = 0
'Picture1.Move 0, 0, Form1.Width, Form1.Height '如果想让整个窗体是picture1,加了这句还要处理picture1_risize事件
HScroll1.Min = 0
VScroll1.Min = 0
VScroll1.Left = Picture1.ScaleWidth - VScroll1.Width
VScroll1.Top = 0
VScroll1.Height = Picture1.ScaleHeight - HScroll1.Height
HScroll1.Left = 0
HScroll1.Top = Picture1.ScaleHeight - HScroll1.Height
HScroll1.Width = Picture1.ScaleWidth - VScroll1.Width
HScroll1.Visible = False
VScroll1.Visible = False
Picture2_Resize '如果用loadpicture就不用加这句了
End Sub
Private Sub HScroll1_Change()
Picture2.Left = -HScroll1.Value
End Sub
Private Sub Picture2_Resize()
If Picture2.Width > Picture1.Width Then
HScroll1.Visible = True
HScroll1.Max = Picture2.Width - Picture1.Width
End If
If Picture2.Height > Picture1.Height Then
VScroll1.Visible = True
VScroll1.Max = Picture2.Height - Picture1.Height
End If
End Sub

Private Sub VScroll1_Change()
Picture2.Top = -VScroll1.Value
End Sub
Pendy 2002-09-28
  • 打赏
  • 举报
回复
呵呵,如果你再费点心,好可以加放大、缩小等功能
Pendy 2002-09-28
  • 打赏
  • 举报
回复
以下是一个比较完整的代码,包括移动图片的功能。
其中使用了一个TOOLBAR,标记为TOOLBAR1,纵向鼓动条:VScroll;横向滚动条:HScroll,一个PictureBox:PicBack;一个PictureBox:PicMap,其父对象是PicBack;打印时可用多种方法

Option Explicit

Dim MoveFlg As Boolean
Private Type MoveXY
X As Single
Y As Single
End Type
Dim PicMapMoveXY As MoveXY

Private Sub Form_Load()

MoveFlg = False
End Sub

Private Sub Form_Resize()

On Error Resume Next

PicBack.Top = Toolbar.Top + Toolbar.Height + 40
PicBack.Left = 0
PicBack.Width = Me.ScaleWidth
PicBack.Height = Me.ScaleHeight - Toolbar.Top - Toolbar.Height - StatusBar1.Height - 80

End Sub

Public Sub LoadPicMapInfo(PicMap As PictureBox, NENO As String)

PicMap.Cls

PicMap.Top = 0
PicMap.Left = 0
PicMap.Width = ???
PicMap.Height = ???
'''
End Sub


Private Sub PicBack_Resize()
ImgMap.Top = 0
ImgMap.Left = 0
ScrolResize
End Sub

Sub ScrolResize()
On Error Resume Next
VScroll.Top = 0
VScroll.Left = PicBack.ScaleWidth - VScroll.Width
VScroll.Height = PicBack.ScaleHeight - IIf(HScroll.Visible, HScroll.Height, 0)

HScroll.Left = 0
HScroll.Top = PicBack.ScaleHeight - HScroll.Height
HScroll.Width = PicBack.ScaleWidth - 0

PicMap.Top = IIf((PicMap.Height - PicBack.ScaleHeight) > 0, 0, (-PicMap.Height + PicBack.ScaleHeight) / 2)
PicMap.Left = IIf((PicMap.Width - PicBack.ScaleWidth) > 0, 0, (-PicMap.Width + PicBack.ScaleWidth) / 2)

HScroll.Visible = PicMap.Width > PicBack.ScaleWidth
VScroll.Visible = PicMap.Height > PicBack.ScaleHeight

HScroll.Max = IIf((PicMap.Width - PicBack.ScaleWidth) > 0, (PicMap.Width - PicBack.ScaleWidth), 500)
VScroll.Max = IIf((PicMap.Height - PicBack.ScaleHeight) > 0, (PicMap.Height - PicBack.ScaleHeight), 500)
HScroll.Value = 0
VScroll.Value = 0

End Sub

Private Sub PicMap_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
PicMapMoveXY.X = X
PicMapMoveXY.Y = Y
End Sub

Private Sub PicMap_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim CurPtInCSRegion As Boolean, i As Integer
If MoveFlg And Button = 1 Then
If (PicMap.Top + Y - PicMapMoveXY.Y > 1000) Or (PicMap.Top + Y - PicMapMoveXY.Y < -PicMap.Height + PicBack.Height - 1000) Then
' Exit Sub
Else
PicMap.Top = PicMap.Top + Y - PicMapMoveXY.Y
End If
If (PicMap.Left + X - PicMapMoveXY.X > 1000) Or (PicMap.Left + X - PicMapMoveXY.X < -PicMap.Width + PicBack.Width - 1000) Then
' Exit Sub
Else
PicMap.Left = PicMap.Left + X - PicMapMoveXY.X
End If

On Error Resume Next
VScroll.Value = -PicMap.Top
HScroll.Value = -PicMap.Left
End If

End Sub



Public Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "ANU"
Case "Refresh"
'''

ScrolResize
Case "Pan"
If Button.Value = tbrPressed Then
PicMap.MousePointer = 15
MoveFlg = True
Else
PicMap.MousePointer = 0
MoveFlg = False
End If
Case "Print"

End Select

End Sub


Private Sub VScroll_Change()
PicMap.Top = -VScroll.Value
End Sub

Private Sub HScroll_Change()
PicMap.Left = -HScroll.Value
End Sub


danielinbiti 2002-09-28
  • 打赏
  • 举报
回复
还事用两个picturebox吧
一个放在另一个的里面
里面一个autosize=true
外面一个autosize=false
给你写一个,等会给你贴
danielinbiti 2002-09-28
  • 打赏
  • 举报
回复
还要sendmessage呢
jhhf 2002-09-28
  • 打赏
  • 举报
回复
帮帮我!!!
jhhf 2002-09-28
  • 打赏
  • 举报
回复
Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Private Const SB_HORZ = 0
Private Const SB_VERT = 1
Private Const SB_BOTH = 3
Private Sub Form_Load()

ShowScrollBar picture1.hwnd, SB_BOTH, True
End Sub


加后滚动条拉不动?
是否还要加语句?
jhhf 2002-09-28
  • 打赏
  • 举报
回复
我加
Private Sub HScroll1_Change()
Picture1.Left = (HScroll1.Min - HScroll1.Value) * 15
End Sub

Private Sub VScroll1_Change()
Picture1.Top = (VScroll1.Min - VScroll1.Value) * 15
End Sub
语句后,出现overflow错误,为何?

我希望picturebox不动,里面内容在动!
xdd1125 2002-09-28
  • 打赏
  • 举报
回复
Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Private Const SB_HORZ = 0
Private Const SB_VERT = 1
Private Const SB_BOTH = 3
Private Sub Form_Load()

ShowScrollBar picture1.hwnd, SB_BOTH, True
End Sub
yaoyanze 2002-09-28
  • 打赏
  • 举报
回复
做一些补充,我觉得可以先对图片的大小和picturebox的大小做一个比较,再决定
hscroll和vscroll的visible 属性,这样,当图片小于框时可以让滚动条隐藏,更美观,当然,这适合大小变化的不同图片。
Random 2002-09-28
  • 打赏
  • 举报
回复
用两个picturebox,把要显示图片的picturebox放在另一个picturebox中。把HScroll,VScroll分别放在作为容器的PictureBox的下侧和右侧。其它同上
friends1979 2002-09-28
  • 打赏
  • 举报
回复
把HScroll、VScroll控件放置到窗体的下侧、右侧

Private Sub HScroll1_Change()
Picture1.Left = (HScroll1.Min - HScroll1.Value) * 15
End Sub

Private Sub VScroll1_Change()
Picture1.Top = (VScroll1.Min - VScroll1.Value) * 15
End Sub
zyl910 2002-09-28
  • 打赏
  • 举报
回复
把HScroll、VScroll控件放置到窗体的下侧、右侧
再在Change、Scroll事件中修改PictureBox的坐标

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧