Tipp 0311 Teilbereich einer Form scrollen
Autor/Einsender:
Datum:
  Angie
12.02.2003
Entwicklungsumgebung:   VB 5
Im Gegensatz zu Tipp Form scrollen wird hier gezeigt, wie man einen Teilbereich einer Form scrollen kann, wenn die Form in der Größe so verkleinert wird, dass die im Teilbereich befindlichen Steuerelemente nicht mehr vollständig angezeigt werden können.
Formaufbau:
Hier werden zunächst zwei PictureBoxen auf der Form platziert, um die Form in zwei Bereiche zu teilen (oberer und unterer Bereich). Mit der Align-Eigenschaft werden die PictureBoxen oben bzw. unten ausgerichtet, die Breite wird dabei automatisch an die Formbreite angepasst.
Die untere PictureBox ist ein "feststehender" Bereich, in dem die darin befindlichen Steuerelemente (hier ein CommandButton und eine PictureBox (Grip)) immer sichtbar bleiben und nur bei Größenänderung der Form entsprechend rechts bzw. rechts/unten ausgerichtet werden.
In der oberen PictureBox, die je nach Bedarf gescrollt werden kann, werden ein Frame (Container für die Steuerelemente), je eine vertikale und horizontale ScrollBar und noch eine kleine PictureBox (dient als Abdeckung für die "offene Ecke", wenn beide ScrollBars angezeigt werden) platziert. Sonstige Steuerelemente werden direkt auf dem Frame, der hier als Container dient, positioniert.
Bei jeder Veränderung der Fenstergröße wird zunächst überprüft, ob der Frame in einer und/oder in beiden Richtungen vollständig angezeigt werden kann. Die ScrollBars werden dann entsprechend angeordnet bzw., wenn die eine oder andere ScrollBar nicht benötigt wird, wird diese ausgeblendet.
 
Option Explicit

Private Const c_GAP As Integer = 40
Private Const c_HGHTWDTH As Integer = 255

Private m_blnFrmLoading As Boolean
Private m_sngFrameWidth As Single
Private m_sngFrameHeight As Single

Private Sub Form_Load()
  m_blnFrmLoading = True

  With Me
    .Width = 6000
    .Height = 4000
  End With

  picBoxFrmBot.Align = vbAlignBottom
  picBoxFrmBot.Height = 740

  cmdBeenden.Top = _
          (picBoxFrmBot.ScaleHeight - cmdBeenden.Height) / 2
  imgGrip.Top = picBoxFrmBot.ScaleHeight - imgGrip.Height

  picBoxFrmTop.Align = vbAlignTop
  picBoxFrmTop.Height = _
          Me.ScaleHeight - picBoxFrmBot.Height - c_GAP

  With fraControls
    .BorderStyle = 0
    .Move 0, 0

    m_sngFrameWidth = .Width
    m_sngFrameHeight = .Height
  End With

  With picScroll
    .Height = c_HGHTWDTH
    .Width = c_HGHTWDTH
    .BorderStyle = 0
    .ZOrder 0
  End With

  With HScroll1
    .Left = 0
    .Height = c_HGHTWDTH
    .TabStop = False
    .ZOrder 0
  End With

  With VScroll1
    .Top = 0
    .Width = c_HGHTWDTH
    .TabStop = False
    .ZOrder 0
  End With

  m_blnFrmLoading = False
End Sub

Private Sub Form_Resize()
  If m_blnFrmLoading Or Me.WindowState = vbMinimized Then Exit Sub
  GetScrollBars
End Sub

Private Sub GetScrollBars()
  Dim sngHeight As Single
  Dim sngWidth As Single
  Dim boolHScroll As Boolean
  Dim boolVScroll As Boolean

  On Error Resume Next

  picBoxFrmTop.Height = _
        Me.ScaleHeight - picBoxFrmBot.Height - c_GAP

  sngWidth = Me.ScaleWidth - c_GAP
  sngHeight = picBoxFrmTop.ScaleHeight

  boolHScroll = CBool(sngWidth < m_sngFrameWidth)
  If boolHScroll Then
    sngHeight = sngHeight - c_HGHTWDTH
  End If

  boolVScroll = CBool(sngHeight < m_sngFrameHeight)
  If boolVScroll Then
    sngWidth = sngWidth - c_HGHTWDTH

    If Not boolHScroll Then
      boolHScroll = CBool(sngWidth < m_sngFrameWidth)
      If boolHScroll Then
        sngHeight = sngHeight - c_HGHTWDTH
      End If
    End If
  End If

  If boolHScroll Then
    With HScroll1
      .Top = sngHeight
      .Width = sngWidth

      .Min = 0
      .Max = m_sngFrameWidth - sngWidth
      .LargeChange = fraControls.Width * 0.1
      .SmallChange = .LargeChange / 4

      .Visible = True
    End With

  Else
    With HScroll1
      .Value = 0
      .Visible = False
    End With
  End If

  If boolVScroll Then
    With VScroll1
      .Left = sngWidth
      .Height = sngHeight

      .Min = 0
      .Max = m_sngFrameHeight - sngHeight
      .LargeChange = fraControls.Height * 0.1
      .SmallChange = .LargeChange / 4

      .Visible = True
    End With

  Else
    With VScroll1
      .Value = 0
      .Visible = False
    End With
  End If

  If HScroll1.Visible And VScroll1.Visible Then
    With picScroll
      .Move VScroll1.Left, HScroll1.Top
      .Visible = True
    End With
  Else
    picScroll.Visible = False
  End If

  cmdBeenden.Left = _
        Me.ScaleWidth - cmdBeenden.Width - imgGrip.Width

  If Me.WindowState = vbMaximized Then
    imgGrip.Visible = False
  Else
    With imgGrip
      .Visible = True
      .Left = Me.ScaleWidth - .Width
    End With
  End If
End Sub

Private Sub HScroll1_Change()
  fraControls.Left = -HScroll1.Value
End Sub

Private Sub HScroll1_Scroll()
  HScroll1_Change
End Sub

Private Sub VScroll1_Change()
  fraControls.Top = -VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
  VScroll1_Change
End Sub
 
Weitere Links zum Thema
Form scrollen
Grafik scrollen

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (5 kB) Downloads bisher: [ 1328 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 26. Juli 2011