Vb6 如何使窗体的某个部分可滚动?
我正在用vb6制作一个程序,要求我能够向右滚动屏幕的某个区域。它只由线条和图片框组成,有没有办法只滚动该区域?谢谢 您可以利用以下事实:某些可视控件可以充当其他可视控件的容器 举个例子: 在VBIDE中,将Vb6 如何使窗体的某个部分可滚动?,vb6,Vb6,我正在用vb6制作一个程序,要求我能够向右滚动屏幕的某个区域。它只由线条和图片框组成,有没有办法只滚动该区域?谢谢 您可以利用以下事实:某些可视控件可以充当其他可视控件的容器 举个例子: 在VBIDE中,将框架放置在VB窗体上。然后-在此框架内放置一个图片盒。请注意,图片盒应完全包含在此框架内 现在,如果在表单周围拖动框架,您将看到内部的PictureBox正在一起移动,同时保持容器框架内的位置,即它将保持相对于容器控件的原始左上角坐标 要找出哪些可视控件具有此功能,只需重试测试。例如,您将看到
框架
放置在VB窗体上。然后-在此框架内
放置一个图片盒
。请注意,图片盒
应完全包含在此框架内
现在,如果在表单周围拖动框架,您将看到内部的PictureBox正在一起移动,同时保持容器框架内的位置,即它将保持相对于容器控件的原始左上角坐标
要找出哪些可视控件具有此功能,只需重试测试。例如,您将看到,标签
不能充当容器
也就是说,您需要以下内容:
- 一个可视控件(最好是PictureBox),用作容器(视口)
- 一个可视控件(最好是图片盒),用作可滚动区域
- 使用
(以及可选的HScrollBar
)滚动 可视区域VScrollBar
PictureBox
(可滚动区域)中,您可以放置您在问题中提到的控件、行和PictureBox
为什么PictureBox
更可取?因为您可以从ScaleMode
属性中获益,所以将其设置为3像素
,并使用像素精确滚动。使用Frames
时,您不能这样做,只能使用Twips
使用包含控件有两个优点:
- 您可以在IDE中直观地放置和重新定位ypu需要的控件
- 您只需要滚动一个控件-所有其他托管控件都将滚动
一起行动
您必须编写的枯燥的代码是容器与滚动条的同步
但幸运的是,由于VB6已经走了很长的路,您将找到足够多的此类任务的剪切粘贴代码示例,其中一个示例位于VB6论坛上:
最后的一些注意事项:
VB6中的图片框
的最大大小限制为16383 x 16383像素。如果您的可滚动区域应该更大,您可以实现一种定制的“无限滚动器”,并通过对控件进行分组来管理控件的位置,您将需要一些额外的编码
VB6中的滚动条的最小值为-32768,最大值为32767。如果您需要更多,那么最终将执行其他一些额外的编码任务
如果您坚持使用Twips
,您可以拥有更大的可用逻辑区域—例如:直到245745年,典型的15 TwipsPerPixel—但您不能在滚动条上使用如此大的值。您可以利用这样一个事实,即某些视觉控件可以充当其他视觉控件的容器
举个例子:
在VBIDE中,将框架
放置在VB窗体上。然后-在此框架内
放置一个图片盒
。请注意,图片盒
应完全包含在此框架内
现在,如果在表单周围拖动框架,您将看到内部的PictureBox正在一起移动,同时保持容器框架内的位置,即它将保持相对于容器控件的原始左上角坐标
要找出哪些可视控件具有此功能,只需重试测试。例如,您将看到,标签
不能充当容器
也就是说,您需要以下内容:
- 一个可视控件(最好是PictureBox),用作容器(视口)
- 一个可视控件(最好是图片盒),用作可滚动区域
- 使用
(以及可选的HScrollBar
)滚动 可视区域VScrollBar
PictureBox
(可滚动区域)中,您可以放置您在问题中提到的控件、行和PictureBox
为什么PictureBox
更可取?因为您可以从ScaleMode
属性中获益,所以将其设置为3像素
,并使用像素精确滚动。使用Frames
时,您不能这样做,只能使用Twips
使用包含控件有两个优点:
- 您可以在IDE中直观地放置和重新定位ypu需要的控件
- 您只需要滚动一个控件-所有其他托管控件都将滚动
一起行动
您必须编写的枯燥的代码是容器与滚动条的同步
但幸运的是,由于VB6已经走了很长的路,您将找到足够多的此类任务的剪切粘贴代码示例,其中一个示例位于VB6论坛上:
最后的一些注意事项:
VB6中的图片框
的最大大小限制为16383 x 16383像素。如果您的可滚动区域应该更大,您可以实现一种定制的“无限滚动器”,并通过对控件进行分组来管理控件的位置,您将需要一些额外的编码
VB6中的滚动条的最小值为-32768,最大值为32767。如果您需要更多,那么最终将执行其他一些额外的编码任务
如果您坚持使用Twips
,您可以拥有更大的可用逻辑区域—例如:直到245745年,典型的15 TwipsPerPixel—但您不能在滚动条上使用如此大的值。下面是一个简单的示例,说明您的请求。关键是可滚动区域必须是容器cont
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