![]() |
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
|
|
|
|
|
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 ]
|
|
|