Please visit our sponsor
UNKNOWN
'**************************************
' Name: Add Splitter Bars to your app *R
' evised*
' Description:Add vertical and horizonta
' l splitter bars to your application. Thi
' s
code creates a form with three panes, and two splitter bars. I originally
found the code in Planet Source Code last year, but found a couple of
bugs, so I rebuilt it from scratch, and added the horizontal splitter.
There are no DLL's or references to worry about, very easy to use.
' By: Eugene
'
'
' Inputs:It is easy to integrate into yo
' ur applications. You simply paste whatev
' er
objects that you want to use into one of the three picture boxes used as
frames. Then in the _Resize event of each, change the .Move statement to
your object (or control).
'
' Returns:None
'
'Assumes:Copy the code and paste it into
' a text editor (like notepad). Save the f
' ile
as Form1.frm. You can always change it later.
'
'Side Effects:None
'This code is copyrighted and has limite
' d warranties.
'Please see http://www.Planet-Source-Cod
' e.com/xq/ASP/txtCodeId.5098/lngWId.1/qx/
' vb/scripts/ShowCode.htm
'for details.
'**************************************
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 6180
ClientLeft = 210
ClientTop = 1800
ClientWidth = 7575
LinkTopic = "Form1"
ScaleHeight = 6180
ScaleWidth = 7575
Begin VB.PictureBox picOuterFrame
Appearance = 0 'Flat
ForeColor = &H80000008;&
Height = 5535
Left = 120
ScaleHeight = 5505
ScaleWidth = 7065
TabIndex = 0
Top = 120
Width = 7095
Begin VB.PictureBox spltVertical
Appearance = 0 'Flat
CausesValidation= 0 'False
ClipControls = 0 'False
FillColor = &H8000000F;&
FillStyle = 0 'Solid
ForeColor = &H8000000F;&
Height = 4935
Left = 3480
MousePointer = 9 'Size W E
ScaleHeight = 4905
ScaleWidth = 225
TabIndex = 1
Top = 0
Width = 255
End
Begin VB.PictureBox picRight
Appearance = 0 'Flat
BackColor = &H80000005;&
ForeColor = &H80000008;&
Height = 4815
Left = 3840
ScaleHeight = 4785
ScaleWidth = 2985
TabIndex = 2
Top = 240
Width = 3015
End
Begin VB.PictureBox picLeft
Appearance = 0 'Flat
ForeColor = &H80000008;&
Height = 4575
Left = 0
ScaleHeight = 4545
ScaleWidth = 3345
TabIndex = 3
Top = 240
Width = 3375
Begin VB.PictureBox spltHorizontal
Appearance = 0 'Flat
FillColor = &H8000000F;&
FillStyle = 0 'Solid
ForeColor = &H8000000F;&
Height = 255
Left = 480
MousePointer = 7 'Size N S
ScaleHeight = 225
ScaleWidth = 2385
TabIndex = 4
Top = 2160
Width = 2415
End
Begin VB.PictureBox picTopLeft
Appearance = 0 'Flat
BackColor = &H80000005;&
ForeColor = &H80000008;&
Height = 1815
Left = 480
ScaleHeight = 1785
ScaleWidth = 2025
TabIndex = 6
Top = 120
Width = 2055
End
Begin VB.PictureBox picBottomLeft
Appearance = 0 'Flat
BackColor = &H80000005;&
ForeColor = &H80000008;&
Height = 1815
Left = 600
ScaleHeight = 1785
ScaleWidth = 2025
TabIndex = 5
Top = 2520
Width = 2055
End
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Const SPLT_WDTH As Long = 80 'width of the spltter bar
Private Const MIN_WINDOW As Long = 10 'Minimum size for any frame created by splitter bars
Private Sub Form_Load()
'**** Splitter Code ****
'No Borders, they are for development an
' d debugging
spltVertical.BorderStyle = 0
spltHorizontal.BorderStyle = 0
picOuterFrame.BorderStyle = 0
picLeft.BorderStyle = 0
picTopLeft.BorderStyle = 0
picBottomLeft.BorderStyle = 0
picRight.BorderStyle = 0
'**** End Splitter Code ****
End Sub
Private Sub picRight_Resize()
'Resize your object to the inside of the
' frame
'YourObject.Move 0, 0, picRight.Width, p
' icRight.Height
End Sub
Private Sub picTopLeft_Resize()
'Resize your object to the inside of the
' frame
'YourObject.Move 0, 0, picTopLeft.Width,
' picTopLeft.Height
End Sub
Private Sub picBottomLeft_Resize()
'Resize your object to the inside of the
' frame
'YourObject.Move 0, 0, picBottomLeft.Wid
' th, picBottomLeft.Height
End Sub
Private Sub Form_Resize()
'For this example, I chose to reside all
' the frames, depending on the size of the
'
' form. You may choose to put this whole
' assembly in another sub-frame.
'**** Splitter Code ****
'Resize the outer frame
Dim height1 As Long, width1 As Long
height1 = ScaleHeight - (2 * SPLT_WDTH)
If height1 < 0 Then height1 = 0
width1 = ScaleWidth - (2 * SPLT_WDTH)
If width1 < 0 Then width1 = 0
picOuterFrame.Move SPLT_WDTH, SPLT_WDTH, width1, height1
'**** End Splitter Code ****
End Sub
'**** Splitter Code ****
Private Sub spltVertical_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbLeftButton Then
spltVertical.Move (spltVertical.Left - (SPLT_WDTH \ 2)) + x, 0, SPLT_WDTH, picOuterFrame.ScaleHeight
spltVertical.BackColor = vbButtonShadow 'change the splitter colour
End If
End Sub
Private Sub spltVertical_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If spltVertical.BackColor = vbButtonShadow Then
spltVertical.Move (spltVertical.Left - (SPLT_WDTH \ 2)) + x, 0, SPLT_WDTH, picOuterFrame.ScaleHeight
End If
End Sub
Private Sub spltVertical_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
If spltVertical.BackColor = vbButtonShadow Then
spltVertical.BackColor = vbButtonFace 'restore splitter colour
spltVertical.Move (spltVertical.Left - (SPLT_WDTH \ 2)) + x, 0, SPLT_WDTH, picOuterFrame.ScaleHeight
'Set the absolute Boundaries
Dim lAbsLeft As Long
Dim lAbsRight As Long
lAbsLeft = MIN_WINDOW
lAbsRight = picOuterFrame.ScaleWidth - (SPLT_WDTH + MIN_WINDOW)
Select Case spltVertical.Left
Case Is < lAbsLeft 'the pane is too thin
spltVertical.Move lAbsLeft, 0, SPLT_WDTH, picOuterFrame.ScaleHeight
Case Is > lAbsRight 'the pane is too wide
spltVertical.Move lAbsRight, 0, SPLT_WDTH, picOuterFrame.ScaleHeight
End Select
'reposition both frames, and the spltVer
' tical bar
picOuterFrame_Resize
End If
End Sub
Private Sub spltHorizontal_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbLeftButton Then
spltHorizontal.BackColor = vbButtonShadow 'change the splitter colour
spltHorizontal.Move 0, (spltHorizontal.Top - (SPLT_WDTH \ 2)) + y, picLeft.ScaleWidth, SPLT_WDTH
End If
End Sub
Private Sub spltHorizontal_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If spltHorizontal.BackColor = vbButtonShadow Then
spltHorizontal.Move 0, (spltHorizontal.Top - (SPLT_WDTH \ 2)) + y, picLeft.ScaleWidth, SPLT_WDTH
End If
End Sub
Private Sub splthorizontal_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
If spltHorizontal.BackColor = vbButtonShadow Then
spltHorizontal.BackColor = vbButtonFace 'restore splitter colour
spltHorizontal.Move 0, (spltHorizontal.Top - (SPLT_WDTH \ 2)) + y, picLeft.ScaleWidth, SPLT_WDTH
'Set the absolute Boundaries
Dim lAbsTop As Long
Dim lAbsBottom As Long
lAbsTop = MIN_WINDOW
lAbsBottom = picLeft.ScaleHeight - (SPLT_WDTH + MIN_WINDOW)
Select Case spltHorizontal.Top
Case Is < lAbsTop 'the pane is too short
spltHorizontal.Move 0, lAbsTop, picLeft.ScaleWidth, SPLT_WDTH
Case Is > lAbsBottom 'the pane is too tall
spltHorizontal.Move 0, lAbsBottom, picLeft.ScaleWidth, SPLT_WDTH
End Select
'reposition both sub-frames, and the spl
' tHorizontal bar
picLeft_Resize
End If
End Sub
Private Sub picOuterFrame_Resize()
Dim x1 As Long
Dim x2 As Long
Dim y1 As Long
On Error Resume Next
y1 = picOuterFrame.ScaleHeight
x1 = spltVertical.Left
x2 = x1 + SPLT_WDTH + 1
picLeft.Move 0, 0, x1 - 1, y1
spltVertical.Move x1, 0, SPLT_WDTH, y1
picRight.Move x2, 0, picOuterFrame.ScaleWidth - x2, y1
'Force a refresh on the left side
picLeft_Resize
End Sub
Private Sub picLeft_Resize()
'Resize the internal stuff. Only the wid
' th's
Dim x1 As Long
Dim y1 As Long
Dim y2 As Long
Dim y3 as Long
x1 = picLeft.Width
y1 = spltHorizontal.Top
y2 = y1 + SPLT_WDTH + 1
'We have to make sure that we do not siz
' e any windows to a negative dimension
y3 = y1 - 1
If y3 < MIN_WINDOW Then
y3 = MIN_WINDOW
End If
picTopLeft.Move 0, 0, x1, y3
spltHorizontal.Move 0, y1, x1, SPLT_WDTH
y3 = picLeft.ScaleHeight - y2
If y3 < MIN_WINDOW Then
y3 = MIN_WINDOW
End If
picBottomLeft.Move 0, y2, x1, y3
End Sub
'**** End Splitter Code ****