Hide

SftTree/OCX 7.5 - ActiveX Tree Control

Display
Print

CellEditing Sample (VB6)

This sample illustrates cell editing using edit controls and combo boxes, cell navigation, uneditable cells, checkbox cell image.

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

Option Explicit

Private Const CB_SHOWDROPDOWN = &H14F
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
    End
End Sub

Private Sub Form_Load()
    Dim ItemIndex As Integer

    ItemIndex = SftTree1.Items.Add("Click on a cell to edit")
    SftTree1.Cell(ItemIndex, 1).Text = "Use Tab/Return keys"
    SftTree1.Cell(ItemIndex, 2).Text = "Use arrow keys"

    ItemIndex = SftTree1.Items.Add("This sample supports cell navigation")
    SftTree1.Cell(ItemIndex, 1).Text = "Ctrl+Home and Ctrl+End"

    Dim i As Integer
    For i = 1 To 50

        Dim Item As SftTreeItem
        Dim Cell As SftTreeCell

        ItemIndex = SftTree1.Items.Add("An item")
        SftTree1.Cell(ItemIndex, 1).Text = "2nd Column"
        SftTree1.Cell(ItemIndex, 2).Text = "3rd Column"

        ItemIndex = SftTree1.Items.Add("Another item")
        Set Item = SftTree1.Item(ItemIndex)
        Item.Level = 1
        Item.Cell(1).Text = "2nd Column"
        Item.Cell(2).Text = "3rd Column"

        ItemIndex = SftTree1.Items.Add("This item can't be edited")
        Set Item = SftTree1.Item(ItemIndex)
        Item.Level = 2
        Item.EditIgnore = True
        Item.Cell(0).Image.Appearance = sftImageCheckboxYes
        Item.Cell(1).Text = "2nd Column (can't edit this item)"
        Item.Cell(2).Text = "3rd Column (can't edit this item)"

        ItemIndex = SftTree1.Items.Add("A fourth item")
        Set Item = SftTree1.Item(ItemIndex)
        Item.Level = 1
        Set Cell = SftTree1.Cell(ItemIndex, 1)
        Cell.Text = "This cell can't be edited"
        Cell.EditIgnore = True
        Cell.Image.Appearance = sftImageCheckboxYes
        SftTree1.Cell(ItemIndex, 1).EditIgnore = True
        SftTree1.Cell(ItemIndex, 2).Text = "3rd Column"

    Next

    SftTree1.ColumnsObj.MakeOptimal
    SftTree1.RowHeaders.MakeOptimal
    SftTree1.Items.RecalcHorizontalExtent

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)
    If AreaType = constSftTreeCellText Then
        ' User clicked on a cell
        SftTree1.Cell(ItemIndex, ColIndex).Edit 0, 0
    ElseIf AreaType = constSftTreeCellGraphic Then
        ' check if check box - toggle
        Dim Img As SftPictureObject
        Set Img = SftTree1.Cell(ItemIndex, ColIndex).Image
        If Img.Appearance = sftImageCheckboxNo Then
            Img.Appearance = sftImageCheckboxYes
        ElseIf Img.Appearance = sftImageCheckboxYes Then
            Img.Appearance = sftImageCheckboxNo
        End If
    End If
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)
    If AreaType = constSftTreeColumnRes Then
        SftTree1.Column(ColIndex).MakeOptimal
    ElseIf AreaType = constSftTreeCellGraphic Then
        ' check if check box - toggle
        Dim Img As SftPictureObject
        Set Img = SftTree1.Cell(ItemIndex, ColIndex).Image
        If Img.Appearance = sftImageCheckboxNo Then
            Img.Appearance = sftImageCheckboxYes
        ElseIf Img.Appearance = sftImageCheckboxYes Then
            Img.Appearance = sftImageCheckboxNo
        End If
    End If
End Sub

Private Sub SftTree1_ToolTipVScroll(Text As String, ByVal ItemIndex As Long, ByVal ColIndex As Integer)
    Text = "Item " & ItemIndex & " - " & Text
End Sub

Private Sub SftTree1_EditAllowed(ByVal ItemIndex As Long, ByVal ColIndex As Integer, Allowed As Boolean)
    ' Last chance to suppress cell editing for a cell
    'If ItemIndex = 1 And ColIndex = 1 Then
    '    Allowed = False
    'End If
End Sub

Private Sub SftTree1_EditInitializing(Window As stdole.OLE_HANDLE, vData As Variant, ByVal EditIndex As Long, ByVal EditCol As Integer, LeftPix As stdole.OLE_XPOS_PIXELS, TopPix As stdole.OLE_YPOS_PIXELS, WidthPix As stdole.OLE_XSIZE_PIXELS, HeightPix As stdole.OLE_YSIZE_PIXELS)
    Dim ctrl As Control

    ' Choose a control based on current column being edited
    If EditCol = 1 Then
        Set ctrl = Combo1
    Else
        Set ctrl = Text1
    End If

    Dim TextHeight As Integer
    ' Left/Top/Width/Height describes the current cell area
    ' we need to return the position and size needed for editing.
    ' In this example, we use the height of the control on the form
    ' and center it over the cell.
    TextHeight = ctrl.Height / Screen.TwipsPerPixelX
    TopPix = TopPix + (HeightPix - TextHeight) / 2
    HeightPix = TextHeight

    ' Set the text in the control used for cell editing and
    ' set other control-specific properties
    If ctrl = Text1 Then
        Text1.Text = SftTree1.Cell(EditIndex, EditCol).Text
        Text1.SelStart = 0
        Text1.SelLength = 999
    Else
        Combo1.Clear
        Combo1.AddItem "Option 1"
        Combo1.AddItem "Option 2"
        Combo1.AddItem "Option 3"
        Combo1.AddItem SftTree1.Cell(EditIndex, EditCol).Text
        Combo1.Text = SftTree1.Cell(EditIndex, EditCol).Text
    End If

    ' Return the control's window handle
    Window = ctrl.hwnd

    ' Define navigation keys
    ' VK_TAB
    SftTree1.CellEditIntercept Asc(vbTab), cellEditInterceptSftTreeChar + cellEditInterceptSftTreeControlChar + cellEditInterceptSftTreeShiftChar
    ' VK_RETURN
    SftTree1.CellEditIntercept Asc(vbCr), cellEditInterceptSftTreeChar + cellEditInterceptSftTreeControlChar + cellEditInterceptSftTreeShiftChar
    ' VK_HOME
    SftTree1.CellEditIntercept 36, cellEditInterceptSftTreeControlChar
    ' VK_END
    SftTree1.CellEditIntercept 35, cellEditInterceptSftTreeControlChar

    If ctrl = Text1 Then
        ' We want these keys just for the edit control.
        ' VK_UP
        SftTree1.CellEditIntercept 38, cellEditInterceptSftTreeChar + cellEditInterceptSftTreeControlChar + cellEditInterceptSftTreeShiftChar
        ' VK_DOWN
        SftTree1.CellEditIntercept 40, cellEditInterceptSftTreeChar + cellEditInterceptSftTreeControlChar + cellEditInterceptSftTreeShiftChar
    End If
End Sub

Private Sub SftTree1_EditInitialized(ByVal Window As stdole.OLE_HANDLE, ByVal vData As Variant, ByVal EditIndex As Long, ByVal EditCol As Integer, ByVal ParentWindow As stdole.OLE_HANDLE, ByVal LeftPix As Long, ByVal TopPix As Long, ByVal WidthPix As Long, ByVal HeightPix As Long, Positioned As Boolean)
    ' Show the combo box dropdown portion
    If Window = Combo1.hwnd Then
        ' We're taking over positioning, so we can drop down the dropdown portion of the control
        Positioned = True
        Combo1.Left = LeftPix * Screen.TwipsPerPixelX
        Combo1.Top = TopPix * Screen.TwipsPerPixelY
        Combo1.Width = WidthPix * Screen.TwipsPerPixelX
        ' Combo1.Height = HeightPix * Screen.TwipsPerPixelY ' can't set height of a combo box
        Combo1.Enabled = True
        Combo1.Visible = True
        Combo1.SetFocus
        SendMessage Window, CB_SHOWDROPDOWN, 1, 0
    End If
End Sub

Private Sub SftTree1_EditNavigating(ByVal Key As Long, ByVal Shift As Integer, ByVal ItemIndex As Long, ByVal ColIndex As Integer)
    ' Process key pressed
    SftTree1.EditNavigate Key, Shift
End Sub

Private Sub SftTree1_EditValidate(ByVal Window As stdole.OLE_HANDLE, ByVal vData As Variant, ByVal EditIndex As Long, ByVal EditCol As Integer, InputValid As Boolean)
    ' Validate the new cell contents
    Dim S As String
    If Window = Text1.hwnd Then
        S = Text1.Text
    Else
        S = Combo1.Text
    End If
    S = Trim(S)
    If Len(S) <= 0 Then
        MsgBox ("Just to demonstrate data input validation, this example rejects empty cells.  Please enter some data.")
        InputValid = False
    End If
End Sub

Private Sub SftTree1_EditEnding(ByVal Window As stdole.OLE_HANDLE, ByVal vData As Variant, ByVal EditIndex As Long, ByVal EditCol As Integer, ByVal SaveInput As Boolean)
    ' Save the new cell contents
    If SaveInput Then
        If Window = Text1.hwnd Then
            SftTree1.Cell(EditIndex, EditCol).Text = Text1.Text
        Else
            SftTree1.Cell(EditIndex, EditCol).Text = Combo1.Text
        End If
    End If
End Sub

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