home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.visual.basic      MS Visual Basic discussions, NOT dot-net      10,840 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 10,105 of 10,840   
   Rick Rothstein to All   
   Re: disable list element   
   15 Jun 06 14:45:53   
   
   From: rickNOSPAMnews@NOSPAMcomcast.net   
      
   > Does anyone know how to disable a list box element in VB 6 ? Thanks Ike   
      
   Following up on Jan's suggestion, here is some code that will make a   
   MSFlexGrid act like a ListBox, but where you can disable one or more items   
   in it. Give the code a try and post back with any questions you may have   
   about how any part of it works. Start a new project and add an MSFlexGrid to   
   the form and paste the code below into the form's code window... then run   
   the project. Note: The code is rough and rather quickly constructed... so it   
   may contains small flaws that might surface when you test it out. If so, let   
   me know and I'll see if I can patch it for you. Even if you figure out how   
   to patch it yourself, please post any fixes back to this thread so that the   
   archives are complete. Thanks.   
      
   Rick   
      
   Option Explicit   
      
   ' These 3 declares are needed for functionality   
   Dim PreviousRow As Long   
   Dim DisabledColor As Long   
   Dim SkipEnterCellCheck As Boolean   
      
   ' The following is for control grid display stuff   
   Dim RowsToDisplay As Long   
   Const NumberOfLinesOfText = 30   
   Const VisibleRows As Long = 12   
      
   Private Sub Command1_Click()   
   DisableRow 6, False   
   MSFlexGrid1.SetFocus   
   End Sub   
      
   Private Sub Form_Load()   
     Dim Index As Long   
     Const WidthOfGrid As Long = 3000   
     DisabledColor = RGB(190, 190, 190)   
     With MSFlexGrid1   
       .Font = "Arial"   
       .Font.Size = 10   
       .Cols = 1   
       .Rows = NumberOfLinesOfText   
       .FixedCols = 0   
       .FixedRows = 0   
       If NumberOfLinesOfText > VisibleRows Then   
         RowsToDisplay = VisibleRows   
         .ScrollBars = flexScrollBarVertical   
       Else   
         RowsToDisplay = NumberOfLinesOfText   
       End If   
       .Height = RowsToDisplay * (.RowHeight(0) + .GridLineWidth)   
       .Width = WidthOfGrid   
       .ColWidth(0) = .Width   
       .Appearance = flexFlat   
       .FocusRect = flexFocusNone   
       .BackColor = vbWhite   
       .ForeColor = vbBlack   
       .BackColorSel = vbBlack   
       .ForeColorSel = vbWhite   
       .ScrollTrack = True   
       '  Color grid lines if shown   
       .GridColor = &HC0C0C0   
       '  Hide the grid lines, remove this line to show them   
       .GridLines = flexGridNone   
       ' Fill the grid with something to start with   
       For Index = 0 To .Rows - 1   
         .TextMatrix(Index, 0) = "Text for Line #" & CStr(Index)   
       Next   
       ' Just to make sure you can see the grid for this example   
       .Move 120, 120   
       ' Mark all rows as enabled   
       For Index = 0 To .Rows - 1   
         .RowData(Index) = 0   
       Next   
       ' NOW, let us disable some items in the list   
       DisableRow 0   
       DisableRow 1   
       DisableRow 6   
       DisableRow 7   
       DisableRow 8   
       DisableRow 27   
       DisableRow 28   
       DisableRow 29   
       ' Attempt to set Row #0 as the current row; if it is   
       ' diabled, the EnterCell event will force it to find   
       ' the first non-disabled row automatically   
       .Row = 0   
       ' For initialization purposes, we set the PreviousRow   
       ' variable to whatever non-disabled row becomes the   
       ' default   
       PreviousRow = .Row   
     End With   
   End Sub   
      
   Private Sub MSFlexGrid1_Click()   
     With MSFlexGrid1   
       Debug.Print "Row #" & .Row & " was clicked"   
     End With   
   End Sub   
      
   Private Sub MSFlexGrid1_EnterCell()   
     If SkipEnterCellCheck Then Exit Sub   
     With MSFlexGrid1   
       If .RowData(.Row) = True Then FindNextNonDisabledRow   
     End With   
   End Sub   
      
   Private Sub MSFlexGrid1_LeaveCell()   
     With MSFlexGrid1   
       PreviousRow = .Row   
     End With   
   End Sub   
      
   Private Sub MSFlexGrid1_MouseDown(Button As Integer, _   
                     Shift As Integer, x As Single, y As Single)   
     With MSFlexGrid1   
       If .RowData(.Row) = True Then FindNextNonDisabledRow   
       '  Needed to stop contiguous row selections   
       .Redraw = False   
       PreviousRow = .Row   
     End With   
   End Sub   
      
   Private Sub MSFlexGrid1_MouseUp(Button As Integer, _   
                     Shift As Integer, x As Single, y As Single)   
     With MSFlexGrid1   
       If .Rows - .TopRow < VisibleRows Then   
         .TopRow = .Rows - VisibleRows   
       End If   
       '  Needed to stop contiguous row selections   
       .RowSel = MSFlexGrid1.Row   
       .Redraw = True   
     End With   
   End Sub   
      
   Private Sub MSFlexGrid1_Scroll()   
     With MSFlexGrid1   
       If .TopRow > NumberOfLinesOfText - RowsToDisplay Then   
         .TopRow = NumberOfLinesOfText - RowsToDisplay   
       End If   
     End With   
   End Sub   
      
   ' Use this Sub to disable an item (DisableItem = True, the default)   
   ' and to reenable an item again (pass DisableItem = False) to the Sub   
   Sub DisableRow(RowNum As Long, Optional DisableItem As Boolean = True)   
     Dim CurrentRow As Long   
     SkipEnterCellCheck = True   
     With MSFlexGrid1   
       CurrentRow = .Row   
       .RowData(RowNum) = True   
       .Col = 0   
       .Row = RowNum   
       If DisableItem Then   
         .CellForeColor = DisabledColor   
       Else   
         .CellForeColor = .ForeColor   
         .RowData(RowNum) = False   
         .Row = CurrentRow   
       End If   
       If CurrentRow = RowNum Then   
         FindNextNonDisabledRow   
       End If   
     End With   
     SkipEnterCellCheck = False   
   End Sub   
      
   Sub FindNextNonDisabledRow()   
     Dim Index As Long   
     With MSFlexGrid1   
     If PreviousRow < .Row Then   
       For Index = .Row + 1 To .Rows - 1   
         If .RowData(Index) = False Then   
           .Row = Index   
           Exit Sub   
         End If   
       Next   
       For Index = .Row - 1 To 0 Step -1   
         If .RowData(Index) = False Then   
           .Row = Index   
           Exit Sub   
         End If   
       Next   
     Else   
       For Index = .Row - 1 To 0 Step -1   
         If .RowData(Index) = False Then   
           .Row = Index   
           Exit Sub   
         End If   
       Next   
       For Index = .Row + 1 To .Rows - 1   
         If .RowData(Index) = False Then   
           .Row = Index   
           Exit Sub   
         End If   
       Next   
     End If   
     End With   
   End Sub   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca