Dim LeftCtl As Control
Dim RightCtl As Control
Dim TopCtl As Control
Dim BottomCtl As Control
Dim WithEvents ImgSplitterH As Image
Dim WithEvents ImgSplitterV As Image
Dim PictureH As PictureBox
Dim PictureV As PictureBox
Dim WithEvents FormX As Form
Dim iMinWidth As Integer
Dim iMinHeight As Integer
Dim iLeftMargin As Integer
Dim iRightMargin As Integer
Dim iTopMargin As Integer
Dim iBottomMargin As Integer
Public Property Get LeftMargin() As Integer
LeftMargin = iLeftMargin
End Property
Public Property Let LeftMargin(ByVal vNewValue As Integer)
iLeftMargin = vNewValue
End Property
Public Property Get RightMargin() As Integer
RightMargin = iRightMargin
End Property
Public Property Let RightMargin(ByVal vNewValue As Integer)
iRightMargin = vNewValue
End Property
Public Property Get TopMargin() As Integer
TopMargin = iTopMargin
End Property
Public Property Let TopMargin(ByVal vNewValue As Integer)
iTopMargin = vNewValue
End Property
Public Property Get BottomMargin() As Integer
BottomMargin = iBottomMargin
End Property
Public Property Let BottomMargin(ByVal vNewValue As Integer)
iBottomMargin = vNewValue
End Property
Public Property Get MinWidth() As Integer
MinWidth = iMinWidth
End Property
Public Property Let MinWidth(ByVal vNewValue As Integer)
iMinWidth = vNewValue
End Property
Public Property Get MinHeight() As Integer
MinHeight = iMinHeight
End Property
Public Property Let MinHeight(ByVal vNewValue As Integer)
iMinHeight = vNewValue
End Property
Private Sub FormX_Load()
Dim temp As String
temp = "DynamicImageH"
On Error GoTo ErrorHandler
FormX.Controls.Add "VB.Image", temp, FormX
On Error GoTo 0
With FormX.Controls.Item(temp)
.Visible = True
End With
Set ImgSplitterH = FormX.Controls.Item(temp)
ImgSplitterH.MousePointer = 7 'ccsizeEW
temp = "DynamicImageV"
On Error GoTo ErrorHandler
FormX.Controls.Add "VB.Image", temp, FormX
On Error GoTo 0
With FormX.Controls.Item(temp)
.Visible = True
End With
Set ImgSplitterV = FormX.Controls.Item(temp)
ImgSplitterV.MousePointer = 9 'cc2sizeNS
temp = "DynamicPictureH"
On Error GoTo ErrorHandler
FormX.Controls.Add "VB.PictureBox", temp, FormX
On Error GoTo 0
Set PictureH = FormX.Controls.Item(temp)
PictureH.BorderStyle = 0
PictureH.BackColor = vbBlack
temp = "DynamicPictureV"
On Error GoTo ErrorHandler
FormX.Controls.Add "VB.PictureBox", temp, FormX
On Error GoTo 0
Exit Sub
ErrorHandler:
temp = temp & "X"
Resume
End Sub
Public Sub Create(LeftCtlX As Object, RightCtlX As Object, BottomCtlX As Object)
Set LeftCtl = LeftCtlX
Set RightCtl = RightCtlX
'Set TopCtl = TopCtlX
Set BottomCtl = BottomCtlX
Set FormX = LeftCtlX.Container
FormX_Load
End Sub
Private Sub FormX_Resize()
If FormX.WindowState <> vbMinimized Then
If FormX.Width < LeftMargin + RightMargin + SplitterHW + MinWidth + LeftCtl.Width + iErrorXY Then
FormX.Width = LeftMargin + RightMargin + SplitterHW + MinWidth + LeftCtl.Width + iErrorXY
End If
If FormX.Height < TopMargin + BottomMargin + SplitterHW + MinHeight + LeftCtl.Height + iErrorXY + iErrorXY + iErrorXY + 6 Then
FormX.Height = TopMargin + BottomMargin + SplitterHW + MinHeight + LeftCtl.Height + iErrorXY + iErrorXY + iErrorXY + 6
End If
RightCtl.Width = FormX.Width - LeftCtl.Width - SplitterHW - LeftMargin - RightMargin - iErrorXY
ImgSplitterH.Width = FormX.Width - LeftMargin - RightMargin - iErrorXY
BottomCtl.Width = ImgSplitterH.Width
BottomCtl.Height = FormX.Height - ImgSplitterH.Top - BottomMargin - SplitterHW - 405
End If
End Sub
Private Sub ImgSplitterH_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
With ImgSplitterH
PictureH.Move .Left - 10, .Top, .Width + 30, .Height / 2
End With
PictureH.Visible = True
mbMoving = True
End Sub
Private Sub ImgSplitterH_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
If mbMoving Then
If Y + ImgSplitterH.Top < LeftCtl.Top + MinHeight Then
PictureH.Top = LeftCtl.Top + MinHeight
ElseIf Y + ImgSplitterH.Top > FormX.Height - BottomMargin - SplitterHW - MinHeight - iErrorXY - iErrorXY - iErrorXY Then
PictureH.Top = FormX.Height - BottomMargin - SplitterHW - MinHeight - iErrorXY - iErrorXY - iErrorXY
Else
PictureH.Top = Y + ImgSplitterH.Top
End If
End If
End If
End Sub
Private Sub ImgSplitterH_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
LeftCtl.Height = PictureH.Top - LeftCtl.Top
ImgSplitterV.Height = LeftCtl.Height
RightCtl.Height = LeftCtl.Height
ImgSplitterH.Top = PictureH.Top
BottomCtl.Height = FormX.Height - ImgSplitterH.Top - BottomMargin - SplitterHW - 400 - 5
BottomCtl.Top = PictureH.Top + SplitterHW
PictureH.Visible = False
mbMoving = False
End Sub
Private Sub ImgSplitterV_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
PictureV.Visible = True
With ImgSplitterV
PictureV.Move .Left, .Top - 10, .Width \ 2, .Height
End With
mbMoving = True
End Sub
Private Sub ImgSplitterV_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
If mbMoving Then
If X + ImgSplitterV.Left < LeftCtl.Left + MinWidth Then
PictureV.Left = LeftCtl.Left + MinWidth
ElseIf X + ImgSplitterV.Left > FormX.Width - SplitterHW - RightMargin - MinWidth - iErrorXY Then
PictureV.Left = FormX.Width - SplitterHW - RightMargin - MinWidth - iErrorXY
Else
PictureV.Left = X + ImgSplitterV.Left
End If
End If
PictureV.Height = LeftCtl.Height
End If
End Sub
Private Sub ImgSplitterV_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
ImgSplitterV.Left = PictureV.Left
LeftCtl.Width = PictureV.Left - LeftCtl.Left
RightCtl.Width = FormX.Width - LeftCtl.Width - SplitterHW - LeftMargin - RightMargin - iErrorXY '- iError - 200
RightCtl.Left = PictureV.Left + SplitterHW
PictureV.Visible = False
mbMoving = False
End Sub