生成目录树结构的类


本程序有两文件test.asp 和tree.asp 还有一些图标文件

  1。test.asp 调用类生成树 代码如下 

 <%@ Language=VBScript %>
 <html>
 <head>
 <link rel="stylesheet" href="tree.css">
 <title>tree</title>
 </head>
 <!-- #include file="tree.asp" -->
 <%
 
 ''========================================
 '' BUILDING A TREE PROGRAMATICALLY
 ''========================================
 '' This approach would be best suited for building
 '' dynamic trees using For..Next loops and such.
 
 Set MyTree2 = New Tree
 MyTree2.Top = 10
 MyTree2.Left = 10
 MyTree2.ExpandImage = "plus.gif"
 MyTree2.CollapseImage = "minus.gif"
 MyTree2.LeafImage = "webpage.gif"
 
 '' Notice the indentation used to reprensent the hierarchy
 Set Node1 = MyTree2.CreateChild("script")
 Set SubNode1 = Node1.CreateChild("server")
 Set secSubNode1 = SubNode1.CreateChild("html")
 secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">asp</A>"
 secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">php</A>"
 secSubNode1.CreateChild "<A HREF=""http://127.0.0.1/"">jsp</A>"
 
 Set SubNode2 = Node1.CreateChild("os")
 SubNode2.CreateChild "<A HREF=""#"">winnt</A>"
 SubNode2.CreateChild "<A HREF=""#"">win2000</A>"
 
 Set Node2 = MyTree2.CreateChild("Desktop")
 Node2.CreateChild "<A HREF=""#"">Area Code Lookup</A>"
 Node2.CreateChild "<A HREF=""#"">Arin Based Whois Search</A>"
 Node2.CreateChild "<A HREF=""#"">World Time Zone Map</A>"
 
 MyTree2.Draw()
 
 Set MyTree2 = Nothing
 
 %>
 
 </BODY>
 </HTML>
2。tree.asp 类的定义 代码如下 

 <%
 ''******************************************************
 '' Author: Jacob Gilley
 '' Email: avis7@airmail.net
 '' My Terms: You can use this control in anyway you see fit
 '' cause I have no means to enforce any guidelines
 '' or BS that most developers think they can get
 '' you to agree to by spouting out words like
 '' "intellectual property" and "The Code Gods".
 '' - Viva la Microsoft!
 ''******************************************************
 
 Dim gblTreeNodeCount:gblTreeNodeCount = 1
 
 Class TreeNode
 
 Public Value
 Public ExpandImage
 Public CollapseImage
 Public LeafImage
 Public Expanded
 Private mszName
 Private mcolChildren
 Private mbChildrenInitialized
 
 Public Property Get ChildCount()
 ChildCount = mcolChildren.Count
 End Property
 
 Private Sub Class_Initialize()
 mszName = "node" & CStr(gblTreeNodeCount)
 gblTreeNodeCount = gblTreeNodeCount + 1
 
 mbChildrenInitialized = False
 Expanded = False
 End Sub
 
 Private Sub Class_Terminate()
 If mbChildrenInitialized And IsObject(mcolChildren) Then
 mcolChildren.RemoveAll()
 Set mcolChildren = Nothing
 End If
 End Sub
 
 Private Sub InitChildList()
 Set mcolChildren = Server.CreateObject("Scripting.Dictionary")
 mbChildrenInitialized = True
 End Sub
 
 Private Sub LoadState()
 If Request(mszName) = "1" Or Request("togglenode") = mszName Then
 Expanded = True
 End If
 End Sub
 
 Public Function CreateChild(szValue)
 
 If Not mbChildrenInitialized Then InitChildList()
 
 Set CreateChild = New TreeNode
 CreateChild.Value = szValue
 CreateChild.ExpandImage = ExpandImage
 CreateChild.CollapseImage = CollapseImage
 CreateChild.LeafImage = LeafImage
 
 mcolChildren.Add mcolChildren.Count + 1, CreateChild
 
 End Function
 
 Public Sub Draw()
 
 LoadState()
 
 Response.Write "<table border=""0"">" & vbCrLf
 Response.Write "<tr><td>" & vbCrLf
 
 If Expanded Then
 Response.Write "<a href=""javascript:collapseNode(''" & mszName & "'')""><img src=""" & CollapseImage & """ border=""0""></a>" & vbCrLf
 ElseIf Not mbChildrenInitialized Then
 Response.Write "<img src=""" & LeafImage & """ border=0>" & vbCrLf
 Else
 Response.Write "<a href=""javascript:expandNode(''" & mszName & "'')""><img src=""" & ExpandImage & """ border=""0""></a>" & vbCrLf
 End If
 
 Response.Write "</td>" & vbCrLf
 Response.Write "<td>" & Value & "</td></tr>" & vbCrLf
 
 If Expanded Then
 Response.Write "<input type=""hidden"" name=""" & mszName & """ value=""1"">" & vbCrLf
 
 If mbChildrenInitialized Then
 Response.Write "<tr><td> </td>" & vbCrLf
 Response.Write "<td>" & vbCrLf
 
 For Each ChildNode In mcolChildren.Items
 ChildNode.Draw()
 Next
 
 Response.Write "</td>" & vbCrLf
 Response.Write "</tr>" & vbCrLf
 End If
 End If
 
 Response.Write "</table>" & vbCrLf
 
 End Sub
 
 End Class

Class Tree
 
 Public Top
 Public Left
 Public ExpandImage
 Public CollapseImage
 Public LeafImage
 Private mszPosition
 Private mcolChildren
 
 Public Property Let Absolute(bData)
 If bData Then mszPosition = "absolute" Else mszPosition = "relative"
 End Property
 
 Public Property Get Absolute()
 Absolute = CBool(mszPosition = "absolute")
 End Property
 
 Private Sub Class_Initialize()
 Set mcolChildren = Server.CreateObject("Scripting.Dictionary")
 mnTop = 0
 mnLeft = 0
 mszPosition = "absolute"
 End Sub
 
 Private Sub Class_Terminate()
 mcolChildren.RemoveAll()
 Set mcolChildren = Nothing
 End Sub
 
 Public Function CreateChild(szValue)
 
 Set CreateChild = New TreeNode
 
 CreateChild.Value = szValue
 CreateChild.ExpandImage = ExpandImage
 CreateChild.CollapseImage = CollapseImage
 CreateChild.LeafImage = LeafImage
 
 mcolChildren.Add mcolChildren.Count + 1, CreateChild
 
 End Function
 
 Public Sub LoadTemplate(szFileName)
 Dim objWorkingNode
 Dim colNodeStack
 Dim fsObj, tsObj
 Dim szLine
 Dim nCurrDepth, nNextDepth
 
 Set colNodeStack = Server.CreateObject("Scripting.Dictionary")
 Set fsObj = CreateObject("Scripting.FileSystemObject")
 Set tsObj = fsObj.OpenTextFile(szFileName, 1)
 
 nCurrDepth = 0
 While Not tsObj.AtEndOfLine
 nNextDepth = 1
 szLine = tsObj.ReadLine()
 
 If nCurrDepth = 0 Then
 Set objWorkingNode = CreateChild(Trim(szLine))
 nCurrDepth = 1
 Else
 While Mid(szLine,nNextDepth,1) = vbTab Or Mid(szLine,nNextDepth,1) = " "
 nNextDepth = nNextDepth + 1
 WEnd
 
 If nNextDepth > 1 Then szLine = Trim(Mid(szLine,nNextDepth))
 
 If szLine <> "" Then
 If nNextDepth > nCurrDepth Then
 If colNodeStack.Exists(nCurrDepth) Then
 Set colNodeStack.Item(nCurrDepth) = objWorkingNode
 Else
 colNodeStack.Add nCurrDepth, objWorkingNode
 End If
 
 Set objWorkingNode = objWorkingNode.CreateChild(szLine)
 
 nCurrDepth = nCurrDepth + 1
 ElseIf nNextDepth <= nCurrDepth Then
 
 If nNextDepth > 1 Then
 
 nNextDepth = nNextDepth - 1
 While Not colNodeStack.Exists(nNextDepth) And nNextDepth > 1
 nNextDepth = nNextDepth - 1
 WEnd
 
 Set objWorkingNode = colNodeStack.Item(nNextDepth)
 Set objWorkingNode = objWorkingNode.CreateChild(szLine)
 
 nNextDepth = nNextDepth + 1
 Else
 Set objWorkingNode = CreateChild(szLine)
 End If
 
 nCurrDepth = nNextDepth
 End If
 End If
 
 End If
 WEnd
 
 tsObj.Close()
 Set tsObj = Nothing
 Set fsObj = Nothing
 
 colNodeStack.RemoveAll()
 Set colNodeStack = Nothing
 
 End Sub
 
 
 Public Sub Draw()
 
 AddClientScript()
 
 Response.Write "<div id=""treectrl"" style=""left: " & Left & "px; top: " & Top & "px; position: " & mszPosition & ";"">" & vbCrLf
 Response.Write "<form name=""treectrlfrm"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """ method=""get"">" & vbCrLf
 Response.Write "<table border=""0"">" & vbCrLf
 Response.Write "<tr><td>" & vbCrLf
 
 For Each ChildNode In mcolChildren.Items
 ChildNode.Draw()
 Next
 
 Response.Write "</td></tr>" & vbCrLf
 Response.Write "</table>" & vbCrLf
 
 Response.Write "<input type=""hidden"" name=""togglenode"" value="""">" & vbCrLf
 Response.Write "</form>" & vbCrLf
 Response.Write "</div>" & vbCrLf
 
 End Sub
 
 Private Sub AddClientScript()
 %>

 <script language="JavaScript">
 
 function expandNode(szNodeName)
 {
 if(document.layers != null) {
 document.treectrl.document.treectrlfrm.togglenode.value = szNodeName;
 document.treectrl.document.treectrlfrm.submit();
 }
 else {
 document.all["treectrlfrm"].togglenode.value = szNodeName;
 document.all["treectrlfrm"].submit();
 }
 }
 
 function collapseNode(szNodeName)
 {
 if(document.layers != null) {
 document.treectrl.document.treectrlfrm.elements[szNodeName].value = -1;
 document.treectrl.document.treectrlfrm.submit();
 }
 else {
 document.treectrlfrm.elements[szNodeName].value = -1;
 document.treectrlfrm.submit();
 }
 }
 
 </script>
 <%
 End Sub
 
 End Class
 
 %>


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3