我在vb6中创建了一个程序,要求我能够将屏幕的某个区域向右滚动。它只包含线条和图片框,有没有办法只滚动该区域?谢谢!
答案 0 :(得分:1)
您可以利用一些视觉控件可以充当其他视觉控件的容器这一事实。
只是一个例子:
在VBIDE中,将Frame
放在VB表单上。然后 - 在Frame
内{a} PictureBox
。请注意PictureBox
中的Frame
应完全包含在内。{/ 1}。
现在,如果你在窗体周围拖动框架,你会看到里面的PictureBox一起移动,同时保持容器框架内的位置,即它将保持原来的顶部和放大器。左侧坐标相对于容器控件。
要找出具有此功能的视觉控件,只需重试测试即可。例如,您会看到Label
无法充当容器。
那就是说,你需要关注:
HScrollBar
(以及可选的VScrollBar
)来滚动
可视区域现在,在第二个PictureBox
(可滚动区域)内,您可以放置控件,即您在问题中提到的Lines
和PictureBoxes
。
为什么PictureBox
更受欢迎?因为您可以从ScaleMode
属性中获利,所以将其设置为3-Pixel
并使用像素精确滚动。使用Frames
,您无法做到这一点,仅限于Twips
。
通过使用包含的控件,您有两个好处:
您必须编写的无聊事物是容器与ScrollBars的同步。
但幸运的是,由于VB6已经走了很长的路,你会发现这样一个任务的剪切和粘贴代码示例,其中一个在VBForums上:Scroll bar in picturebox
最后的一些说明:
VB6中的 PictureBoxes
被限制为最大大小为16,383 x 16,383像素。如果您的可滚动区域应该更大,您可以实现一种自定义"无限卷轴",并通过对控件进行分组来管理控件的位置,您将需要一些额外的编码。
ScrollBars
范围可以从最小值-32,768到最大值32,767。如果您需要更多,您将最终完成其他一些额外的编码任务。
如果您坚持Twips
,您可以拥有更大的逻辑区域 - 例如:直到245,745,典型的15 TwipsPerPixel - 但您不能使用ScrollBars这么大的值。
答案 1 :(得分:1)
这是一个简单的例子,说明了您的要求。关键是可滚动区域必须是容纳您想要滚动的控件的容器控件。
Option Explicit
Private oldPos As Integer
Private Sub Form_Load()
HScroll1.Min = 0
HScroll1.Max = 1000
HScroll1.SmallChange = Screen.TwipsPerPixelX * 10
HScroll1.LargeChange = HScroll1.SmallChange
End Sub
Private Sub HScroll1_Change()
ScrollPictureBox
End Sub
Private Sub HScroll1_Scroll()
ScrollPictureBox
End Sub
Private Sub ScrollPictureBox()
Dim c As Control
For Each c In Me.Controls
If c.Container.Name = "Picture1" And Not TypeOf c Is HScrollBar Then
c.Left = c.Left - (oldPos - HScroll1.Value)
End If
Next
oldPos = HScroll1.Value
End Sub
在此代码中,Picture1是一个包含HScroll1(水平滚动条)的PictureBox(可滚动区域)以及您想要滚动的其他控件。