● スプリットバーを作成する ●

見た目は面倒そうだが、実は簡単。

APIを使う必要は無く、VBの機能だけで実装する。フォームに picSplitBar という名前のピクチャーボックスを貼り付けて、以下のコードを書けばよい。

Private IsSplitbarCapture As Boolean
Private Const SPLITBAR_HEIGHT As Long = 6
Private Const SPLITBAR_BG_COLOR_NORMAL  As Long = vbActiveBorder
Private Const SPLITBAR_BG_COLOR_CAPTURE As Long = vbButtonShadow

Private Sub Form_Load()
    'フォーム設定(背景色は分かりやすいように白にしている)
    With Me
        .ScaleMode = vbPixels
        .BackColor = vbWhite
    End With

    'スプリットバー設定(Sub Main に書いても良い)
    With picSplitBar
        .ScaleMode = vbPixels
        .BackColor = SPLITBAR_BG_COLOR_NORMAL
        .Left = 0
        .Height = SPLITBAR_HEIGHT
        .BorderStyle = 0
        .MousePointer = vbSizeNS
    End With
End Sub

Private Sub Form_Resize()
    picSplitBar.Width = Me.ScaleWidth
End Sub

Private Sub picSplitBar_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button And vbLeftButton Then
        IsSplitbarCapture = True
        picSplitBar.BackColor = SPLITBAR_BG_COLOR_CAPTURE
    End If
End Sub

Private Sub picSplitBar_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim SplitbarTop As Long
    If IsSplitbarCapture Then
        SplitbarTop = picSplitBar.Top + y
        If SplitbarTop < 0 Then SplitbarTop = 0
        If SplitbarTop > Me.ScaleHeight Then SplitbarTop = Me.ScaleHeight - SPLITBAR_HEIGHT
        picSplitBar.Top = SplitbarTop
    End If
End Sub

Private Sub picSplitBar_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    If IsSplitbarCapture Then
        picSplitBar.BackColor = SPLITBAR_BG_COLOR_NORMAL
        Form_Resize  'リサイズ
        IsSplitbarCapture = False
    End If
End Sub
本当はスプリットバーの上下に何らかのコントロールがあり、Form_Resize にそれらのリサイズ処理を書かなければならないがここでは省略する。そんなに難しくないんで大丈夫でしょ。

戻る