Results 1 to 35 of 35

Thread: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    This is the ActiveX Control version that comes out of the Std-EXE version.

    Current version: 1.4.43

    The development state of the ActiveX Control version does not necessarily match to the Std-EXE version.
    That comes because the Std-EXE version is the "leading source" and the ActiveX Control version is derived from the Std-EXE version after a certain time.
    Reason why is that it is not practicable to release a new ActiveX Control after each new feature.
    However, certain bugfixes can and will be implemented into the current ActiveX Control version. (Revision)

    It is not recommended to use the source code to compile another binary.
    If own modification is necessary please rename the library to avoid redundancies.
    The source code of the project can also be viewed on GitHub.

    All controls are marked as "Safe for Initialization and Scripting" by the IObjectSafety interface.

    Also everything is 100% IDE-Safe.

    Here is a solution to use the VBFLXGRD14.OCX Registration-Free. (Side-by-side)
    Keep in mind that this technology needs at minimum Windows XP SP2 or Windows Server 2003.

    Tutorial:
    The "Development" machine needs to register the VBFLXGRD14.OCX as usual and use the components for e.g. in a Std-EXE project.
    The source project needs to include the Side-by-side resources. (see below)
    Then on the "End user" machine you only need the VBFLXGRD14.OCX and the .exe (Std-EXE project) on the same folder.
    It will work then without any registration.

    The source code of "VBFLXGRD14SideBySide.res" is:

    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
       <file name="VBFLXGRD14.OCX">
          <typelib tlbid="{3E5D9624-07F7-4D22-90F8-1314327F7BAC}" version="1.0" flags="control" helpdir="" />
          <comClass clsid="{25017520-D6C7-473A-A17B-2DC89C44B84D}" tlbid="{3E5D9624-07F7-4D22-90F8-1314327F7BAC}" threadingModel="Apartment" progid="VBFLXGRD14.VBFlexGrid" />
          <comClass clsid="{3C1D9D59-7E05-496F-9F49-0ADD34002AE5}" tlbid="{3E5D9624-07F7-4D22-90F8-1314327F7BAC}" threadingModel="Apartment" />
          <comClass clsid="{3EAAE612-84B4-409B-83C1-F68BBF706DD7}" tlbid="{3E5D9624-07F7-4D22-90F8-1314327F7BAC}" threadingModel="Apartment" />
       </file>
    </assembly>
    Attached Files Attached Files
    Last edited by Krool; Mar 26th, 2021 at 04:19 PM.

  2. #2
    Addicted Member
    Join Date
    Oct 2008
    Posts
    248

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Hello Krool,
    I have just downloaded and tried your VBFlexGrid
    It is nice!
    However, using late-binding slows down the grid performance drastically compared to MSFlexGrid
    May I know the reason behind it? Also, what can be done to improve speed?

    The following code takes about 10 seconds to execute.( 10 times more than MSFlexGrid)
    Code:
    Dim objGrid As Object
    Dim w as Long
    
    Set objGrid = VBFlexGrid1 'Grid added in design
    
    With objGrid
        .Rows = 5000
        .Cols = 50
        For i = 0 To 4999
            For j = 0 To 49
                w = objGrid.ColWidth(j)
            Next j
        Next i
    End With

  3. #3

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Update released to version 1.1

    Quote Originally Posted by winman View Post
    using late-binding slows down the grid performance drastically compared to MSFlexGrid
    Did you also try
    Code:
    Dim objGrid As VBFlexGrid
    instead of
    Code:
    Dim objGrid As Object
    ?

  4. #4
    Addicted Member
    Join Date
    Oct 2008
    Posts
    248

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Yes, I did
    Here is the report of time taken in seconds for early bound and late bound VBFlexGrid and MSFlexGrid as in the code snippet below

    Case1: VBFlexGrid (early bound), time = 7.271313 s
    Case2: MSFlexGrid (early bound), time = 6.834063 s
    Case3: VBFlexGrid (late bound), time = 20.11294 s
    Case4: MSFlexGrid (late bound), time =7.252 s

    Code:
    Dim objGrid As VBFlexGrid   ' Case1
    
    'Dim objGrid As MSFlexGrid  ' Case2
    
    'Dim objGrid As Object  	 ' Case3
    'Set objGrid = VBFlexGrid1 ' Case3
    
    
    'Dim objGrid As Object	 ' Case4
    'Set objGrid = MSFlexGrid1  ' Case4
    
    
    Dim s as String
    
    With objGrid
        .Rows = 5000
        .Cols = 50
        For i = 0 To 4999
            For j = 0 To 49
                s = objGrid.TextMatrix(i,j))
            Next j
        Next i
    End With

  5. #5
    Addicted Member
    Join Date
    Oct 2008
    Posts
    248

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Hi Krool,

    I have checked the new update. It is really good
    The new sort options and the row/column autofit features are awesome and very useful

    I have also checked the speed for the late bound grid in the latest update. It is found to be same as the previous update. We have managed to use early bound VBFlexGrid for now. Any improvements in speed for the late bound grid would be of great use for our requirements here.

    Thank you

  6. #6

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Included LinkSwitch /OPT:NOWIN98 on the VBCompiler which reduced the file size of the OCX binary by about ~16KB

  7. #7
    gibra
    Guest

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    I've add a Spread class (made by FlyGuy) for in-cell editing and formulas (Excel-like)
    It seems that it works very well!
    Attached Files Attached Files

  8. #8
    PowerPoster Arnoutdv's Avatar
    Join Date
    Oct 2013
    Posts
    4,288

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by gibra View Post
    I've add a Spread class (made by FlyGuy) for in-cell editing and formulas (Excel-like)
    It seems that it works very well!
    Hey thatís my nickname on XtremeVBTalk
    I bet you downloaded it from the FlexGrid functions thread.

  9. #9
    gibra
    Guest

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by Arnoutdv View Post
    Hey thatís my nickname on XtremeVBTalk
    I bet you downloaded it from the FlexGrid functions thread.
    Yes!
    Flexgrid functions - Xtreme Visual Basic Talk
    http://www.xtremevbtalk.com/code-lib...functions.html

    A lot of usefull routines.

  10. #10

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Version 1.3 released.

  11. #11

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Version 1.4 released.

  12. #12
    Hyperactive Member
    Join Date
    Jul 2013
    Posts
    375

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Hi Krool,

    I would like to replace C1 vsFlexGrid (that I use for years) with your VBFlexGrid as it seems to be up there with it.
    In vsFlexGrid I'm able to "replace" the standard EditWindow with a DateTimePicker by catching the StartEdit event and turn a previously created DTPicker visibility on, right over the cell (StartEdit is called with Row, Col, and Cancel parameters).
    I see that the event StartEdit doesn't exist in VBFlexGrid, thought there is a method with the same name. Will I be able to create a similar behavior with VBFlexGrid?

    Thanks
    Carlos

  13. #13
    Junior Member
    Join Date
    Nov 2018
    Posts
    18

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Can I add the attribute "GetColIndex" Property?


    Public Property Get GetColIndex(ByVal Key As String) As Long 'Add
    ''''''''
    End Property 'Add

  14. #14
    Addicted Member
    Join Date
    Jan 2010
    Posts
    250

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    still amazed on how VB6 still popular out there, and still many support additional control. like me. I am one of VB6 programmer and really appreciate this kind of thread..keep it up

  15. #15

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by smileyoufucn View Post
    Can I add the attribute "GetColIndex" Property?


    Public Property Get GetColIndex(ByVal Key As String) As Long 'Add
    ''''''''
    End Property 'Add
    There is already a ColIndex property available which just does what you suggested with your "GetColIndex".
    Code:
    Public Property Get ColIndex(ByVal Key As String) As Long
    Quote Originally Posted by Carlos Rocha View Post
    I would like to replace C1 vsFlexGrid (that I use for years) with your VBFlexGrid as it seems to be up there with it.
    In vsFlexGrid I'm able to "replace" the standard EditWindow with a DateTimePicker by catching the StartEdit event and turn a previously created DTPicker visibility on, right over the cell (StartEdit is called with Row, Col, and Cancel parameters).
    I see that the event StartEdit doesn't exist in VBFlexGrid, thought there is a method with the same name. Will I be able to create a similar behavior with VBFlexGrid?
    You can catch the BeforeEdit event (EditWindow not yet created) and set Cancel = True and turn on your own DTPicker.
    If you catch EnterEdit event it's already too late as EditWindow is created.
    Last edited by Krool; Apr 20th, 2020 at 02:55 AM.

  16. #16
    Hyperactive Member
    Join Date
    Jul 2013
    Posts
    375

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    You can catch the BeforeEdit event (EditWindow not yet created) and set Cancel = True and turn on your own DTPicker.
    If you catch EnterEdit event it's already too late as EditWindow is created.
    Thanks, this info will save me lots of time.
    Carlos

  17. #17
    Addicted Member
    Join Date
    Jan 2010
    Posts
    250

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    i have not use this grid before, right now i am focusing on LynxGrid, I tried your Grid before, but somehow the flexibility perhaps add ability for combobox to cell

  18. #18

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by jedifuk View Post
    i have not use this grid before, right now i am focusing on LynxGrid, I tried your Grid before, but somehow the flexibility perhaps add ability for combobox to cell
    The following combo modes are available in VBFlexGrid:
    FlexComboModeNone (only EditWindow)
    FlexComboModeDropDown (DropDownList)
    FlexComboModeEditable (DropDownCombo)
    FlexComboModeButton (Custom)

  19. #19
    New Member
    Join Date
    Dec 2014
    Posts
    3

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by gibra View Post
    Yes!
    Flexgrid functions - Xtreme Visual Basic Talk
    http://www.xtremevbtalk.com/code-lib...functions.html

    A lot of usefull routines.


    Hello Everybody

    Where I can I get the functions in
    http://www.xtremevbtalk.com/code-lib...functions.html

    The website seems to be offline.

    Thanks per advance

  20. #20
    PowerPoster Arnoutdv's Avatar
    Join Date
    Oct 2013
    Posts
    4,288

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    @aklougbo you should have started your own thread for asking something which is not really related to your question.

    XtremeVBTalk is gone, no one knows why.
    There was no time for admins/mods to save the code libraries, everything is just gone.
    Anything specific you needed or wanted from that thread?

    The Internet Archive, Wayback Machinee saved parts

    Page 1:
    http://web.archive.org/web/201610070...functions.html

    Page 2:
    http://web.archive.org/web/201610070...nctions-2.html
    Last edited by Arnoutdv; Apr 21st, 2020 at 07:41 AM.

  21. #21
    Addicted Member
    Join Date
    Jan 2010
    Posts
    250

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by Krool View Post
    The following combo modes are available in VBFlexGrid:
    FlexComboModeNone (only EditWindow)
    FlexComboModeDropDown (DropDownList)
    FlexComboModeEditable (DropDownCombo)
    FlexComboModeButton (Custom)
    waoww..never know about this, i am using lynxgrid for my app, might switch to vbflexgrid, last thing...vbflexgrid support filter (I supposed so), but i meant filterbar on top of grid, similar to componentone tdgbrid ...thanks

  22. #22
    Addicted Member
    Join Date
    Jan 2010
    Posts
    250

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by Krool View Post
    The following combo modes are available in VBFlexGrid:
    FlexComboModeNone (only EditWindow)
    FlexComboModeDropDown (DropDownList)
    FlexComboModeEditable (DropDownCombo)
    FlexComboModeButton (Custom)
    i couldn't find any documentation or example regarding VBFlexGrid, any information ?

  23. #23
    New Member
    Join Date
    Dec 2014
    Posts
    3

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by Arnoutdv View Post
    @aklougbo you should have started your own thread for asking something which is not really related to your question.

    XtremeVBTalk is gone, no one knows why.
    There was no time for admins/mods to save the code libraries, everything is just gone.
    Anything specific you needed or wanted from that thread?

    The Internet Archive, Wayback Machinee saved parts

    Page 1:
    http://web.archive.org/web/201610070...functions.html

    Page 2:
    http://web.archive.org/web/201610070...nctions-2.html



    Thank you very much.
    I still have to learn how to correctly post something on the forum.

  24. #24

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by jedifuk View Post
    i couldn't find any documentation or example regarding VBFlexGrid, any information ?
    If you can read the first post you would notice that there is also a Std-EXE version.
    In that thread (first post) is a demo project showing the editing feature in one sub-form of the demo project.

  25. #25
    Addicted Member
    Join Date
    Jan 2010
    Posts
    250

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by Krool View Post
    If you can read the first post you would notice that there is also a Std-EXE version.
    In that thread (first post) is a demo project showing the editing feature in one sub-form of the demo project.
    waoww...what a dumb i am..might check this right away..

  26. #26
    Addicted Member
    Join Date
    Jan 2010
    Posts
    250

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by Krool View Post
    If you can read the first post you would notice that there is also a Std-EXE version.
    In that thread (first post) is a demo project showing the editing feature in one sub-form of the demo project.
    waoww...what a dumb i am..might check this right away..

  27. #27
    New Member
    Join Date
    Aug 2019
    Posts
    5

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Hi! Is 1.3.11 a last one from version 1.3?
    Last edited by SPB-667; Aug 3rd, 2020 at 10:56 AM.

  28. #28

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Quote Originally Posted by SPB-667 View Post
    Hi! Is 1.3.11 a last one from version 1.3?
    1.3.12 was the last version for 1.3.

  29. #29
    Addicted Member
    Join Date
    Feb 2018
    Location
    Texas
    Posts
    130

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    I'm with you brother!

  30. #30
    Addicted Member
    Join Date
    Jun 2010
    Posts
    160

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    From Object Browser, VBFLXGRD14.OCX v. 1.4.0.35
    Code:
    Event ValidateEdit(Cancel As Boolean)
        Member of VBFLXGRD14.VBFlexGrid
        Occurs before any changes made by a user are committed to a cell. If the validation fails the changes will be discarded and the control will remain in edit mode.
    Am I wrong in assuming that this means that when Cancel is set to 'True' in this event that the originally changed value will be restored in the cell, or this is something I have implement myself?
    Or maybe I am doing this the wrong or invalid way or is this scenario a bug? This is my scenario:

    In the event I check the value in flexgrd.EditText and if not withing a certain range I fire a dialog to ask for a Yes/No confirmation, and if no I set Cancel = True. However, the value in the grid cell remain as the changed value, and the cell is no longer in EditMode. This is my validation code:

    Code:
    Private Sub grdPlanVals_ValidateEdit(Cancel As Boolean)
    Dim X As Long
    
    With grdPlanVals
       X = Val(.EditText)
    
       Select Case X
          Case 1 To 6
          Case Else
             Dim cTaskDlg As cTaskDialog
    
             Set cTaskDlg = New cTaskDialog
    
             If X > 6 Then
    
                '"Are you sure this is correct?"
                '"Not recommended value"
                '"This is a very large value"
                If cTaskDlg.SimpleDialog(cLang.GetString(2002), TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON, cLang.GetString(2001), cLang.GetString(2026), TD_WARNING_ICON, Me.hwnd) <> TDCBF_YES_BUTTON Then
                   Cancel = True
                End If
    
             Else
    
                '"Are you sure this is correct?"
                '""Not recommended value"
                '"This value will eliminate the use of this planet"
                If cTaskDlg.SimpleDialog(cLang.GetString(2002), TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON, cLang.GetString(2001), cLang.GetString(2000), TD_WARNING_ICON, Me.hwnd) <> TDCBF_YES_BUTTON Then
                   Cancel = True
                End If
             End If
    
       End Select
    
       .HighLight = flexHighlightNever
    
       If Not Cancel Then
          mIsDirty = True
          gpv(.EditRow) = X 
       End If
    
    End With
    
    End Sub
    I also have code in the BeforeEdit event, the goal here is to prevent the user from edit unless he/she is double clicking in a cell that isn't in the first (fixed) column. Removing that code doesn't seem to have any impact on my issue though.

    Code:
    Private Sub grdPlanVals_BeforeEdit(Row As Long, Col As Long, ByVal Reason As VBFLXGRD14.FlexEditReasonConstants, Cancel As Boolean)
    'If Not CBool(Col) Or Not (Reason = FlexEditReasonDblClick) Then Cancel = True
    If Not CBool(Col) Then
       Cancel = True
    Else
    
       If Not (Reason = FlexEditReasonDblClick) Then
          Cancel = True
       End If
    End If
    
    End Sub
    M$ vs. VB6 = The biggest betrayal and strategic mistake of the century!?

  31. #31

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    @7edm, add the normal Validate handler too, like below.

    Code:
    Private Sub VBFlexGrid1_Validate(Cancel As Boolean)
    ' This must be handled when validation of the edit control should be for the whole form.
    If VBFlexGrid1.hWndEdit <> 0 Then Call VBFlexGrid1_ValidateEdit(Cancel)
    End Sub

  32. #32
    Addicted Member
    Join Date
    Jun 2010
    Posts
    160

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Unfortunately, that didn't change anything. I even tried with commenting out the dialog part and simply set 'Cancel = True' if the edited value was out of range, also tried to remove the 'BeforeEdit' event, no change. No button on the form have nether Default or Cancel set to True.

    This is the full code I have in the grid events:

    Code:
    Private Sub grdPlanVals_BeforeEdit(Row As Long, Col As Long, ByVal Reason As VBFLXGRD14.FlexEditReasonConstants, Cancel As Boolean)
    'If Not CBool(Col) Or Not (Reason = FlexEditReasonDblClick) Then Cancel = True
    If Not CBool(Col) Then
       Cancel = True
    Else
    
       If Not (Reason = FlexEditReasonDblClick) Then
          Cancel = True
       End If
    End If
    Debug.Print "BeforeEdit = Reason: " & CStr(Reason)
    Debug.Print "BeforeEdit = Text: " & CStr(grdPlanVals.Text)
    
    End Sub
    
    Private Sub grdPlanVals_CellClick(ByVal Row As Long, ByVal Col As Long, ByVal Button As Integer)
    
    With grdPlanVals
       If Col = 1 Then
          .HighLight = flexHighlightAlways
       End If
    End With
    
    End Sub
    
    Private Sub grdPlanVals_EditKeyPress(KeyChar As Integer)
    
    Select Case KeyChar
       Case 8, 13, 47 To 58
          KeyChar = KeyChar
       Case Else
          KeyChar = 0
    End Select
    
    End Sub
    
    Private Sub grdPlanVals_Validate(Cancel As Boolean)
    ' This must be handled when validation of the edit control should be for the whole form.
    If grdPlanVals.hWndEdit <> 0 Then Call grdPlanVals_ValidateEdit(Cancel)
    
    End Sub
    
    Private Sub grdPlanVals_ValidateEdit(Cancel As Boolean)
    Dim X As Long
    
    With grdPlanVals
      Debug.Print "ValidateEdit = EditText: " & .EditText
       X = Val(.EditText)
      Debug.Print "ValidateEdit = EditRow: " & CStr(.EditRow)
    
       Select Case X
          Case 1 To 6
          Case Else
             Dim cTaskDlg As cTaskDialog
    
             Set cTaskDlg = New cTaskDialog
    
             If X > 6 Then
    
                'This is a very large value
                'Re-enter value if this is an error
                If cTaskDlg.SimpleDialog(cLang.GetString(2002), TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON, cLang.GetString(2001), cLang.GetString(2026), TD_WARNING_ICON, Me.hwnd) <> TDCBF_YES_BUTTON Then
                   Cancel = True
                End If
    
             Else
    
                'Zero Value will eliminate this aspect
                'Re-enter value if this is wrong
                If cTaskDlg.SimpleDialog(cLang.GetString(2002), TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON, cLang.GetString(2001), cLang.GetString(2000), TD_WARNING_ICON, Me.hwnd) <> TDCBF_YES_BUTTON Then
                   Cancel = True
                End If
             End If
       End Select
    
       .HighLight = flexHighlightNever
      Debug.Print "ValidateEdit = Cancel: " & CStr(Cancel)
      Debug.Print "ValidateEdit = EditRow: " & CStr(.EditRow)
      Debug.Print "ValidateEdit = EditText: " & .EditText
      Debug.Print "ValidateEdit = Text: " & CStr(.Text)
    
       If Not Cancel Then
          mIsDirty = True
          'gpv(.EditRow) = X 'was aspno
       End If
    
    End With
    
    End Sub
    And as you see I have put some Debug statements in there, and here are the result of these:
    Code:
    BeforeEdit = Reason: 4
    BeforeEdit = Text: 5
    ValidateEdit = EditText: 8
    ValidateEdit = EditRow: 1
    ValidateEdit = Cancel: True
    ValidateEdit = EditRow: -1
    ValidateEdit = EditText: 
    ValidateEdit = Text: 8
    As you can see, the cell text value before edit is 5, I change it to 8, which gets rejected in the validate event, but cell text value still remains at 8, not reset back to 5 as expected.

    Please let me know if you need some other info. Maybe I also should mention that this previously was a MSFlexGrid control and I upgraded it by open the form in a text editor, remove the MSFlexGrid Object reference and added
    Code:
    Object = "{3E5D9624-07F7-4D22-90F8-1314327F7BAC}#1.0#0"; "VBFLXGRD14.OCX"
    Then changed the controls Begin row to
    Code:
    Begin VBFLXGRD14.VBFlexGrid grdPlanVals
    saved the file and started VB6 and my project.

    There is some code setting up the grid with values, cell widths etc. but I cannot see how it may influence this.
    M$ vs. VB6 = The biggest betrayal and strategic mistake of the century!?

  33. #33

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    7edm, I did a bugfix in the ValidateEdit event. Can you re-try after updating to new version ?
    Last edited by Krool; Mar 6th, 2021 at 05:08 AM.

  34. #34
    Addicted Member
    Join Date
    Jun 2010
    Posts
    160

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    Sorry, still no go :-( but let me stress or put a few things into focus:

    I don't think this issue is related to the bugfix you just did in ValidateEdit, because it's not dependent of if a mesagebox is shown or not, when changing my code above to this
    Code:
    Private Sub grdPlanVals_ValidateEdit(Cancel As Boolean)
    Dim X As Long
    
    With grdPlanVals
      Debug.Print "ValidateEdit = EditText: " & .EditText
       X = Val(.EditText)
      Debug.Print "ValidateEdit = EditRow: " & CStr(.EditRow)
    
       Select Case X
          Case 1 To 6
          Case Else
                   Cancel = True
    '         Dim cTaskDlg As cTaskDialog
    '
    '         Set cTaskDlg = New cTaskDialog
    '
    '         If X > 6 Then
    '
    '            'This is a very large value
    '            'Re-enter value if this is an error
    '            If cTaskDlg.SimpleDialog(cLang.GetString(2002), TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON, cLang.GetString(2001), cLang.GetString(2026), TD_WARNING_ICON, Me.hwnd) <> TDCBF_YES_BUTTON Then
    '               Cancel = True
    '            End If
    '
    '         Else
    '
    '            'Zero Value will eliminate this aspect
    '            'Re-enter value if this is wrong
    '            If cTaskDlg.SimpleDialog(cLang.GetString(2002), TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON, cLang.GetString(2001), cLang.GetString(2000), TD_WARNING_ICON, Me.hwnd) <> TDCBF_YES_BUTTON Then
    '               Cancel = True
    '            End If
    '         End If
       End Select
    
       .HighLight = flexHighlightNever
      Debug.Print "ValidateEdit = Cancel: " & CStr(Cancel)
      Debug.Print "ValidateEdit = EditRow: " & CStr(.EditRow)
      Debug.Print "ValidateEdit = EditText: " & .EditText
      Debug.Print "ValidateEdit = Text: " & CStr(.Text)
    
       If Not Cancel Then
          mIsDirty = True
          'gpv(.EditRow) = X 'was aspno
       End If
    
    End With
    
    End Sub
    I still get the same result. Let me repeat, with some detail what happens:
    I double click on a sell to put it in edit mode. This highlights the current value (5 in this case) and I type to change it to 8.
    I then press Enter and this fires the ValidateEdit event, where the value 8 is considered to be outside of allowed range, and
    Code:
    Cancel = True
    The cell value does not switch back to its original value of 5 but stay at 8, and the cursor and focus seems to stay in the cell.

    I note one significant different when looking at and comparing the Debug messages in the code above, they have changed and it seems like the validate event fires twice actually.
    Code:
    BeforeEdit = Reason: 4
    BeforeEdit = Text: 5
    ValidateEdit = EditText: 8
    ValidateEdit = EditRow: 1
    ValidateEdit = Cancel: True
    ValidateEdit = EditRow: 1
    ValidateEdit = EditText: 8
    ValidateEdit = Text: 5
    ValidateEdit = EditText: 8
    ValidateEdit = EditRow: 1
    ValidateEdit = Cancel: True
    ValidateEdit = EditRow: 1
    ValidateEdit = EditText: 8
    ValidateEdit = Text: 5
    Interestingly, the .Text value is now set back to 5 but the actual cell doesn't seem to be updated but continues to display 8.

    Ok this should give you a bit more to go on.
    M$ vs. VB6 = The biggest betrayal and strategic mistake of the century!?

  35. #35

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,742

    Re: [VB6] ActiveX VBFlexGrid (Replacement of the MSFlexGrid control)

    It is intended that a Cancel = True on ValidateEdit event will only keep your cursor or mouse in the cell, giving the user a chance to amend current input.
    It's your choice to call .CancelEdit or resetting the text and remain in edit mode, .EditText = .Text in the event.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width