home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / VarHelper17854432001.psc / modTreeSelect.bas < prev    next >
Encoding:
BASIC Source File  |  2001-03-13  |  2.9 KB  |  133 lines

  1. Attribute VB_Name = "modTreeSelect"
  2. Option Explicit
  3.  
  4. Private Enum NodeCheck
  5.   nodChecked = True
  6.   nodUnchecked = False
  7.   nodPartial = 1
  8. End Enum
  9.  
  10. Private Const WM_SETREDRAW  As Long = &HB
  11. Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  12.  
  13. Public Sub FreezeCtl(Ctl As Control)
  14. #If NotInIdeDebug Then
  15.   SendMessageLong Ctl.hWnd, WM_SETREDRAW, 0, 0
  16. #End If
  17. End Sub
  18.  
  19. Private Function TreeCheckSibling(Node As MSComctlLib.Node, ByVal bCheck As Boolean) As Boolean
  20.     
  21.  Dim nodX As Node
  22.  
  23.   TreeCheckSibling = True
  24.     
  25.   Set nodX = Node.FirstSibling
  26.     
  27.   Do Until nodX Is Nothing
  28.     If nodX.Checked <> bCheck Then
  29.       TreeCheckSibling = False
  30.       Exit Do
  31.     End If
  32.         
  33.     Set nodX = nodX.Next
  34.   Loop
  35.     
  36. End Function
  37.  
  38. ':) Ulli's Code Formatter V2.0 (2001-01-23 10:53:19) 10 + 119 = 129 Lines
  39.  
  40. Public Sub TreeSelectiveCheck(Node As MSComctlLib.Node)
  41.     
  42.   Node.Bold = False
  43.     
  44.   TreeSetChildren Node, Node.Checked
  45.     
  46.   If TreeCheckSibling(Node, Node.Checked) Then
  47.     TreeSetParents Node, Node.Checked
  48.    Else
  49.     TreeSetParents Node, nodPartial
  50.   End If
  51.     
  52. End Sub
  53.  
  54. Private Sub TreeSetChildren(Node As MSComctlLib.Node, bCheck As Boolean)
  55.  
  56.  Dim nodX As Node
  57.         
  58.   If Node.children = 0 Then
  59.     Exit Sub
  60.   End If
  61.     
  62.   Set nodX = Node.Child
  63.   Do Until nodX Is Nothing
  64.     nodX.Bold = False
  65.     nodX.Checked = bCheck
  66.         
  67.     If nodX.children > 0 Then
  68.       TreeSetChildren nodX, bCheck
  69.     End If
  70.         
  71.     Set nodX = nodX.Next
  72.   Loop
  73.     
  74. End Sub
  75.  
  76. Private Sub TreeSetParents(Node As MSComctlLib.Node, ByVal nCheck As NodeCheck)
  77.     
  78.  Dim nodX As Node
  79.  
  80.   If (Node.Parent Is Nothing) Then
  81.     Exit Sub
  82.   End If
  83.     
  84.   Set nodX = Node.Parent
  85.   Select Case nCheck
  86.    Case nodChecked
  87.     nodX.Checked = True
  88.     nodX.Bold = False
  89.    Case nodUnchecked
  90.     nodX.Checked = False
  91.     nodX.Bold = False
  92.    Case nodPartial
  93.     nodX.Checked = False
  94.     nodX.Bold = True
  95.   End Select
  96.     
  97.   If nCheck = nodPartial Then
  98.     TreeSetParents nodX, nodPartial
  99.    Else
  100.     If TreeCheckSibling(nodX, nodX.Checked) Then
  101.       TreeSetParents nodX, nodX.Checked
  102.      Else
  103.       TreeSetParents nodX, nodPartial
  104.     End If
  105.   End If
  106.         
  107. End Sub
  108.  
  109. Public Sub TreeSingleCheck(Tree As TreeView, Node As MSComctlLib.Node)
  110.     
  111.  Dim nodX As Node
  112.  
  113.   If Node.Checked Then
  114.     For Each nodX In Tree.Nodes
  115.       If nodX.Index <> Node.Index And nodX.Checked Then
  116.         nodX.Checked = False
  117.       End If
  118.     Next nodX
  119.     Set nodX = Nothing
  120.   End If
  121.     
  122. End Sub
  123.  
  124. Public Sub UnFreezeCtl(Ctl As Control)
  125.  
  126.   On Error Resume Next    'Gdyby Ctl nie mia│a .Refresh
  127. #If NotInIdeDebug Then
  128.    SendMessageLong Ctl.hWnd, WM_SETREDRAW, 1, 0
  129.    Ctl.Refresh
  130. #End If
  131.   On Error GoTo 0
  132. End Sub
  133.