Hide

SftTree/OCX 7.5 - ActiveX Tree Control

Display
Print

BookTable Sample (VB6)

This sample illustrates sorting, column reordering, responding to column header clicks, context menus, controlling expand/collapse buttons and plus/minus graphics.

The source code is located at C:\Program Files (x86)\Softelvdm\SftTree OCX 7.5\Samples\VB6\BookTable\Form1.frm or C:\Program Files\Softelvdm\SftTree OCX 7.5\Samples\VB6\BookTable\Form1.frm (on 32-bit Windows versions).

Option Explicit

Private Sub Command1_Click()
    End
End Sub

Private Sub Form_Load()
    Dim Bk As Integer, Ch As Integer, Sect As Integer, ItemIndex As Integer
    Dim BookIndex As Integer
    Dim size As Integer
    Dim CellFont As New StdFont

    Randomize
    With SftTree1
        ' Mass-Update
        .BulkUpdate = True
        ' set default item graphic.  This can also be done at design time
        Set .Items.ItemImageExpandable.Picture = BookClosed.Picture
        Set .Items.ItemImageExpanded.Picture = BookOpen.Picture
        Set .Items.ItemImageLeaf.Picture = Topic.Picture
        ' set the column header sort indicators
        SftTree1.Headers.SortIndicators = headerSortIndicatorsSftTreeAuto
        SftTree1.Header(0).SortIndicator = sortIndicatorSftTreeAscending
        ' set the cell font for books
        Set CellFont = Font
        CellFont.Bold = True
        ' Add all available options
        For Bk = 1 To 4
            ' add a book
            BookIndex = .Items.Add("Book " & Bk)

            .Cell(BookIndex, 1).Text = "Description for book " & Bk
            size = Int((1000 * Rnd) + 1)
            .Cell(BookIndex, 2).Text = size
            .Item(BookIndex).Data = size
            ' add chapters
            For Ch = 1 To 2
                ItemIndex = .Items.Add("Chapter " & Ch)
                .Item(ItemIndex).Level = 1
                ' add sections
                For Sect = 1 To 2
                    ItemIndex = .Items.Add("Section " & Sect)
                    .Item(ItemIndex).Level = 2
                Next Sect
            Next Ch

            ' after adding the book and all dependent items, we
            ' collapse the item, so it's up to the user to expand it
            .Item(BookIndex).Collapse False
            ' set font
            Set .Cell(BookIndex, 0).Font = CellFont
        Next Bk
        ' End of Mass-Update
        .BulkUpdate = False
        ' Make columns optimal
        .ColumnsObj.MakeOptimal
        ' allow horizontal scrolling
        .Items.RecalcHorizontalExtent
    End With
End Sub

Private Sub ShowPlusMin_Click()
    If ShowPlusMin.Value = 0 Then
        SftTree1.Items.PlusMinusImageExpandable.Clear
        SftTree1.Items.PlusMinusImageExpanded.Clear
    Else
        Set SftTree1.Items.PlusMinusImageExpandable.Picture = Plus.Picture
        Set SftTree1.Items.PlusMinusImageExpanded.Picture = Minus.Picture
    End If
End Sub

Private Sub Ugly_Click()
    If Ugly.Value = 0 Then
        SftTree1.ButtonPicture = Nothing
    Else
        Set SftTree1.ButtonPicture = UglyButtons.Picture
    End If
End Sub

Private Sub SortHeader()
    With SftTree1
        Dim SortedColumn As Integer
        ' get the new, sorted column
        SortedColumn = .Headers.SortedColumn
        ' Sort the data based on the sort indicator
        ' Note that column 2 is sorted by Item.Data, which is an integer value (book size in pages)
        If .Header(SortedColumn).SortIndicator = sortIndicatorSftTreeAscending Then
            If SortedColumn = 2 Then
                .Items.SortDependents -1, SortedColumn, sortSftTreeAscItemData
            Else
                .Items.SortDependents -1, SortedColumn, sortSftTreeAscending
            End If
        Else
            If SortedColumn = 2 Then
                .Items.SortDependents -1, SortedColumn, sortSftTreeDscItemData
            Else
                .Items.SortDependents -1, SortedColumn, sortSftTreeDescending
            End If
        End If
    End With
End Sub

Private Sub HeaderMenu()

    Dim Count As Integer
    Count = 0
    If SftTree1.Column(0).WidthPix > 0 Then
        MenuForm.ShowContents.Checked = True
        Count = Count + 1
    Else
        MenuForm.ShowContents.Checked = False
    End If
    If SftTree1.Column(1).WidthPix > 0 Then
        MenuForm.ShowDescription.Checked = True
        Count = Count + 1
    Else
        MenuForm.ShowDescription.Checked = False
    End If
    If SftTree1.Column(2).WidthPix > 0 Then
        MenuForm.ShowSize.Checked = True
        Count = Count + 1
    Else
        MenuForm.ShowSize.Checked = False
    End If

    If Count <= 1 Then
        If MenuForm.ShowContents.Checked Then MenuForm.ShowContents.Enabled = False
        If MenuForm.ShowDescription.Checked Then MenuForm.ShowDescription.Enabled = False
        If MenuForm.ShowSize.Checked Then MenuForm.ShowSize.Enabled = False
    Else
        MenuForm.ShowContents.Enabled = True
        MenuForm.ShowDescription.Enabled = True
        MenuForm.ShowSize.Enabled = True
    End If

    MenuForm.ShowAll.Enabled = Count < 3

    SftTree1.CancelMode
    PopupMenu MenuForm.HeaderPopup
End Sub

Private Sub SftTree1_ContextMenu(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    ' Determine click context menu for header or item
    Dim l As Single, t As Single, h As Single, w As Single
    SftTree1.Headers.GetPosition l, t, w, h
    If X >= l And X < l + w And Y >= t And Y <= t + h Then
        HeaderMenu
        Exit Sub
    End If

    ' determine item right-clicked
    Dim ItemIndex As Long
    ItemIndex = SftTree1.Items.HitTest(X, Y)
    If ItemIndex >= 0 And ItemIndex < SftTree1.Items.Count Then
        SftTree1.Items.Current = ItemIndex
        SftTree1.Item(ItemIndex).Selected = True
        SftTree1.CancelMode
        PopupMenu MenuForm.ItemPopup
    End If
End Sub

Private Sub SftTree1_ItemClick(ByVal ItemIndex As Long, ByVal ColIndex As Integer, ByVal AreaType As Integer, ByVal Button As Integer, ByVal Shift As Integer)
    With SftTree1
        If AreaType = constSftTreeColumn And Button = constSftTreeLeftButton Then
            SortHeader
        ElseIf AreaType = constSftTreeExpandAll Then
            .Item(ItemIndex).Expand False, True
        End If
    End With
End Sub


Private Sub SftTree1_ItemDblClick(ByVal ItemIndex As Long, ByVal ColIndex As Integer, ByVal AreaType As Integer, ByVal Button As Integer, ByVal Shift As Integer)
    With SftTree1
        If AreaType = constSftTreeColumnRes And Button = constSftTreeLeftButton Then
            .Column(ColIndex).MakeOptimal
            .Items.RecalcHorizontalExtent
        ElseIf AreaType = constSftTreeColumn And Button = constSftTreeLeftButton Then
            SortHeader
        End If
    End With
End Sub



Last Updated 08/13/2020 - (email)
© 2024 Softel vdm, Inc.