如何使表单的某个部分可滚动?

时间:2017-05-25 13:33:05

标签: vb6

我在vb6中创建了一个程序,要求我能够将屏幕的某个区域向右滚动。它只包含线条和图片框,有没有办法只滚动该区域?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以利用一些视觉控件可以充当其他视觉控件的容器这一事实。

只是一个例子:

在VBIDE中,将Frame放在VB表单上。然后 - 在Frame内{a} PictureBox。请注意PictureBox中的Frame应完全包含在内。{/ 1}。

现在,如果你在窗体周围拖动框架,你会看到里面的PictureBox一起移动,同时保持容器框架内的位置,即它将保持原来的顶部和放大器。左侧坐标相对于容器控件。

要找出具有此功能的视觉控件,只需重试测试即可。例如,您会看到Label无法充当容器。

那就是说,你需要关注:

  • 一个视觉控件(最好是PictureBox),作为容器(视口)
  • 一个视觉控件(最好是PictureBox),它充当可滚动区域
  • 一个HScrollBar(以及可选的VScrollBar)来滚动 可视区域

现在,在第二个PictureBox(可滚动区域)内,您可以放置​​控件,即您在问题中提到的LinesPictureBoxes

为什么PictureBox更受欢迎?因为您可以从ScaleMode属性中获利,所以将其设置为3-Pixel并使用像素精确滚动。使用Frames,您无法做到这一点,仅限于Twips

通过使用包含的控件,您有两个好处:

  • 您可以直观地放置和重新定位IDE内部需要的控件
  • 您只需要滚动一个控件 - 所有其他托管控件都将 一起搬家

您必须编写的无聊事物是容器与ScrollBars的同步。

但幸运的是,由于VB6已经走了很长的路,你会发现这样一个任务的剪切和粘贴代码示例,其中一个在VBForums上:Scroll bar in picturebox

最后的一些说明:

VB6中的

PictureBoxes被限制为最大大小为16,383 x 16,383像素。如果您的可滚动区域应该更大,您可以实现一种自定义"无限卷轴",并通过对控件进行分组来管理控件的位置,您将需要一些额外的编码。

VB6中的

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(可滚动区域)以及您想要滚动的其他控件。