'=======================================================
'===efei Super TreeView
'===Code By efei(草不含羞)
'===Mailto:efei731@sina.com
'===2004.7
'=======================================================
Dim tvwRoot
Dim tvwChild
Dim tvwPrevious
Dim tvwNext
tvwRoot = 0
tvwChild = 1
tvwPrevious = 2
tvwNext = 3
'===树的类
Class TreeView
?Public Name???'对象名
?Public TreeView_Name
?
?Private ArrNodes??'节点集合,从0开始
?
?Private ArrImage??'图标数组
?
?
?
?
?Private AddFromExpand??'节点的添加是否来自于父节点的展开
?
?'===一些设置
?
?Public FirstDisplayLevel?'初次显示几层
?Public UseConnectLine??'使用节点之间的连接线
?'Public ImagePath???'图象目录
?Public Target????'链接目标
?Public Font_Size???'文字大小
?Public Font_Family???'字体
?Public Font_Color???'颜色
?Public SelectedBgcolor??'选中的节点背景色
?
?'===图象目录=============================
?Private lImagePath???
?Public Property Get ImagePath()
??ImagePath = lImagePath
?End Property
?Public Property Let ImagePath(ByVal vNewValue)
??'更新之前先去掉原来的节点的边框
??lImagePath = vNewValue
??If Right(lImagePath,1) <> "/" Then lImagePath = lImagePath & "/"
?End Property
?'========================================
?
?Private lSelectedNode??'被选择的节点
?Public Property Get SelectedNode()
??Set SelectedNode = lSelectedNode
?End Property
?Public Property Let SelectedNode(ByVal vNewValue)
??'更新之前先去掉原来的节点的边框
??If Not lSelectedNode Is Nothing Then
???With Document.getElementById("txt" & lSelectedNode.Key).style
????.background = ""
???End With
??End If
??Set lSelectedNode = vNewValue
??With Document.getElementById("txt" & lSelectedNode.Key).style
???.background = SelectedBgcolor
??End With
?End Property
?
?Private lMenuNode
?Private lPopupMenu
?
?'===类的析构函数,用于初始化对象==============
?Private Sub Class_Initialize()
??'===初始化树对象
??Document.Write "
"
??'===
??Redim ArrNodes(0)
??Set ArrNodes(0) = Nothing
??name=""
??TreeView_Name = "Efei Super TreeView"
??
??Set lSelectedNode = Nothing
??Set lMenuNode = Nothing
??lPopupMenu = ""
??
??Redim ArrImage(1,2)
??ArrImage(0,0) = "FolderClose"
??ArrImage(1,0) = "FolderClose.gif"
??ArrImage(0,1) = "FolderOpen"
??ArrImage(1,1) = "FolderOpen.gif"
??ArrImage(0,2) = "Rplus"
??ArrImage(1,2) = "Rplus.gif"
??AddImage "root","root.gif"
??AddImage "file","file.gif"
??
??lImagePath = "Image/"
??FirstDisplayLevel = 0
??UseConnectLine = True
??AddFromExpand = False
??Target = "_Blank"
??
??Font_Size = "12px"
??Font_Family = "宋体"
??Font_Color = "#000000"
??SelectedBgcolor = "#D4D0C8"
??
?End Sub
?'===============================================
?
?'===功能:?添加一个节点
?'===参数:?Text???节点显示的文本
?'???Key????节点关键字,该关键字必须唯一
?'???HyperLink??节点要链接到的地址
?'???Node???父节点或者兄弟节点
?'???AddType???添加类型,0-子节点,1-子节点,2-前置节点,3-后置节点
?'???Image???节点的图片,如空,则使用关闭的文件夹
?Public Function add(ByVal Text,ByVal Key,ByVal HyperLink,ByRef Node,ByVal AddType,ByVal Image)
??Dim i
??'先检查关键字是否已存在,参数是否合法
??Key = Trim(Key)
??If Key = "" Then
???Msgbox "关键字不能为空",vbInformation,TreeView_Name
???Exit Function
??End If
??If NOT Me.Nodes(Key) Is Nothing Then
???Msgbox "关键字【" & Key & "】已存在",vbInformation,TreeView_Name
???Exit Function
??End If
??Text = Trim(Text)
??If Text = "" Then
???Msgbox "节点文本不能为空",vbInformation,TreeView_Name
???Exit Function
??End If
??If IsNumeric(AddType) = True Then
???If AddType < 0 And AddType > 3 Then
????AddType = 1
???End If
??Else
???AddType = 1
??End If
??If Node Is Nothing Then
???If Me.NodesCount <> 0 Then
????Msgbox "根节点只能有一个",vbInformation,TreeView_Name
????Exit Function
???End If
???AddType = 0
??End IF
???
??Redim Preserve ArrNodes(Me.NodesCount)
??Set ArrNodes(Ubound(ArrNodes)) = New Node
??
??
??
??With ArrNodes(Ubound(ArrNodes))
???.Key = Key
???.Text=Text
???.HyperLink=HyperLink
???
???.AddType = AddType
???.Image = Image
???Set .parentObject = Me
???
???
???Select Case AddType
????Case 0??'根节点
?????Set .ParentNode=Nothing
?????Set .NextNode = Nothing
????Case 1??'子节点
?????Set .ParentNode = Node??????'父节点
?????If Node.ChildrenCount > 0 Then
??????Set .PreviousNode = Node.Children(Node.ChildrenCount)
??????Set Node.Children(Node.ChildrenCount).NextNode = ArrNodes(Ubound(ArrNodes))
?????End If
?????Set .NextNode = Nothing
????Case 2??'插在前面
?????Set .ParentNode = Node.ParentNode
?????Set .PreviousNode = Node.PreviousNode
?????Set Node.PreviousNode.NextNode = ArrNodes(Ubound(ArrNodes))
?????Set Node.PreviousNode = ArrNodes(Ubound(ArrNodes))
?????Set .NextNode = Node
?????
????Case 3??'插在后面
?????Set .ParentNode = Node.ParentNode
document.getElementById('loading').style.display="none";