把HScroll、VScroll控件放置到窗体的下侧、右侧
再在Change、Scroll事件中修改PictureBox的坐标
再在Change、Scroll事件中修改PictureBox的坐标
解决方案 »
- 【1月16号周六,广州附近的进】一起去看机器人展览:)
- WMI 连接出错 50分求助
- 请教一个有关收银的算法
- 二维数组的排序问题,请指点
- 关于MSFlexGrid控件的一个小问题
- DataGrid的焦点问题!
- 把网上的一个文件拷贝到本地某个文件夹下替换掉原来的文件,该怎么写?
- DataGrid控件中如何让内容以“关键字”顺序排列?
- 求教:vb 高手
- wqb(啊喂) 、crystal_heart(笑看风云)两位,进来!!感谢对“分没了,可以给钱(如果你非要的话)”的支持!给分了!
- 各位目前使用的水晶报表是什么版本?从哪里下载?注册码?能否提供一些这方面的学习资料?来者有分。
- 怎么在dll里对winsock控件的事件进行编程??
Picture1.Left = (HScroll1.Min - HScroll1.Value) * 15
End SubPrivate Sub VScroll1_Change()
Picture1.Top = (VScroll1.Min - VScroll1.Value) * 15
End Sub
hscroll和vscroll的visible 属性,这样,当图片小于框时可以让滚动条隐藏,更美观,当然,这适合大小变化的不同图片。
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
Private Sub HScroll1_Change()
Picture1.Left = (HScroll1.Min - HScroll1.Value) * 15
End SubPrivate Sub VScroll1_Change()
Picture1.Top = (VScroll1.Min - VScroll1.Value) * 15
End Sub
语句后,出现overflow错误,为何?我希望picturebox不动,里面内容在动!
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
加后滚动条拉不动?
是否还要加语句?
一个放在另一个的里面
里面一个autosize=true
外面一个autosize=false
给你写一个,等会给你贴
其中使用了一个TOOLBAR,标记为TOOLBAR1,纵向鼓动条:VScroll;横向滚动条:HScroll,一个PictureBox:PicBack;一个PictureBox:PicMap,其父对象是PicBack;打印时可用多种方法Option ExplicitDim MoveFlg As Boolean
Private Type MoveXY
X As Single
Y As Single
End Type
Dim PicMapMoveXY As MoveXYPrivate Sub Form_Load() MoveFlg = False
End SubPrivate 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 - 80End SubPublic 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 SubSub 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 = 0End SubPrivate Sub PicMap_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
PicMapMoveXY.X = X
PicMapMoveXY.Y = Y
End SubPrivate 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 SubPublic 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 SubPrivate Sub HScroll_Change()
PicMap.Left = -HScroll.Value
End Sub
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 SubPrivate Sub VScroll1_Change()
Picture2.Top = -VScroll1.Value
End Sub
picture1是外面的图片框
必须子类拦截PictureBox的消息
响应WM_HSCROLL、WM_VSCROLL消息