Vb6 如何使窗体的某个部分可滚动?

Vb6 如何使窗体的某个部分可滚动?,vb6,Vb6,我正在用vb6制作一个程序,要求我能够向右滚动屏幕的某个区域。它只由线条和图片框组成,有没有办法只滚动该区域?谢谢 您可以利用以下事实:某些可视控件可以充当其他可视控件的容器 举个例子: 在VBIDE中,将框架放置在VB窗体上。然后-在此框架内放置一个图片盒。请注意,图片盒应完全包含在此框架内 现在,如果在表单周围拖动框架,您将看到内部的PictureBox正在一起移动,同时保持容器框架内的位置,即它将保持相对于容器控件的原始左上角坐标 要找出哪些可视控件具有此功能,只需重试测试。例如,您将看到

我正在用vb6制作一个程序,要求我能够向右滚动屏幕的某个区域。它只由线条和图片框组成,有没有办法只滚动该区域?谢谢

您可以利用以下事实:某些可视控件可以充当其他可视控件的容器

举个例子:

在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—但您不能在滚动条上使用如此大的值。

您可以利用这样一个事实,即某些视觉控件可以充当其他视觉控件的容器

举个例子:

在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