解决方案 »
- 怎么用 commondialog实现一个保存对话框,并取得文件保存路径呢??
- webbrowser的屏蔽声音问题,不是高手不要乱发言
- 如何让Winsock控件实时同时接收6个端口以上的数据,并保存为文本文件,不会存在漏采.
- 请问用VB怎么把开始和停止键做到一个按键上,谢谢
- pdf.ocx控件怎么不能显示阿!
- 关于窗体问题,高手看一下
- 求助??如何使图片拉伸??
- 请问:在WIN98下是如何实现半透明的?多谢,急用!高分相送!!
- 这么控制我的文本输入框只让用户输入一个字,汉字,还有怎么控制只能输入数字 谢谢!
- 请问哪位大哥有msdn的关于VB的部分??能否 上传?我买的msdn的D版资料不全啊,谢谢了。
- 怎么样判断ADO是否连接?
- 有关屏保程序
*treeview*.ocx
*treeview*.dll
谢谢1!
'1.从 Listview 拖拽 Item 加到 Treeview 的 Node
'2.添加 Treeview 节点时,可自动滚动
'3.编辑节点的 Text
'4.Treeview Node Menu
'5.Listview Item Double Click、Menu
'Objects:
'FORM1、Treeview1、Listview1、Timer1、Command1
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_VSCROLL = &H115
Private Const WM_HSCROLL = &H114
Dim mfX As Single
Dim mfY As Single
Private Enum ScrollDirection
NoScroll = 0
VScrollBarUp = 1
HScrollBarRight = 2
VScrollBarDown = 3
HScrollBarLeft = 4
End Enum
Dim sdX As ScrollDirection
Private Sub Command1_Click()
If Not ListView1.SelectedItem Is Nothing Then
Dim NodeX As MSComctlLib.Node
If TreeView1.SelectedItem Is Nothing Then
Set NodeX = TreeView1.Nodes.Add(, , GetNextKey() & ListView1.SelectedItem.Text, ListView1.SelectedItem.Text)
Else
Set NodeX = TreeView1.Nodes.Add(TreeView1.SelectedItem, tvwChild, GetNextKey() & ListView1.SelectedItem.Text, ListView1.SelectedItem.Text)
End If
NodeX.Selected = True
'TreeView1.SelectedItem.Expanded = True
TreeView1.StartLabelEdit
End If
End Sub
Private Sub Command2_Click() '删除
Dim i As Long
For i = ListView1.ListItems.Count To 1 Step -1
If ListView1.ListItems.Item(i).Selected Then
ListView1.ListItems.Remove i
End If
Next i
End Sub
Private Sub FORM_DragOver(Source As Control, x As Single, y As Single, State As Integer)
If Source Is TreeView1 Then
Timer1.Enabled = False
End If
End Sub
Private Sub FORM_Load()
Timer1.Enabled = False
Timer1.Interval = 100
TreeView1.Style = tvwTreelinesPlusMinusPictureText
Dim i As Long
Dim j As Long
Dim NodeX As MSComctlLib.Node
TreeView1.Style = tvwTreelinesPlusMinusPictureText
Dim Temp As String
For i = 1 To 10
Temp = GetNextKey
Set NodeX = TreeView1.Nodes.Add(, , Temp, "Node " & TreeView1.Nodes.Count + 1)
For j = 0 To 5
TreeView1.Nodes.Add Temp, tvwChild, GetNextKey, "Node " & TreeView1.Nodes.Count + 1
Next
NodeX.Expanded = True
Next i
TreeView1.HideSelection = False
TreeView1.LabelEdit = tvwManual
ListView1.ListItems.Add , , "cc"
ListView1.ListItems.Add , , "dd"
ListView1.ListItems.Add , , "ee"
ListView1.ListItems.Add , , "ff"
ListView1.OLEDragMode = ccOLEDragAutomatic
ListView1.LabelEdit = lvwManual
ListView1.HideSelection = False
ListView1.MultiSelect = True
Command1.Caption = "<<"
Command2.Caption = "删除"
End Sub
Private Sub ListView1_DblClick()
If Not ListView1.SelectedItem Is Nothing Then
VBA.MsgBox ListView1.SelectedItem.Text
End If
End Sub
Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Not ListView1.HitTest(x, y) Is ListView1.SelectedItem Then
Set ListView1.SelectedItem = Nothing
End If
End Sub
Private Sub ListView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbLeftButton And Not ListView1.SelectedItem Is Nothing Then
ListView1.DragIcon = ListView1.SelectedItem.CreateDragImage
ListView1.Drag vbBeginDrag
End If
End Sub
Private Sub MenuNodeClose_Click()
If TreeView1.SelectedItem.Children > 0 Then
TreeView1.SelectedItem.Expanded = False
End If
End Sub
Private Sub MenuNodeExpand_Click()
If TreeView1.SelectedItem.Children > 0 Then
TreeView1.SelectedItem.Expanded = True
End If
End Sub
Private Sub MenuNodesRename_Click()
If Not TreeView1.SelectedItem Is Nothing Then
TreeView1.StartLabelEdit
End If
End Sub
Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String)
If VBA.Len(NewString) <= 0 Then
MsgBox "error"
TreeView1.StartLabelEdit
Cancel = 1
End If
End Sub
Private Sub TreeView1_DblClick()
If Not TreeView1.SelectedItem Is Nothing Then
'只响应叶节点(没有孩子)
If TreeView1.SelectedItem.Children = 0 Then
VBA.MsgBox TreeView1.SelectedItem.Text
End If
End If
End Sub
Private Sub TreeView1_DragDrop(Source As Control, x As Single, y As Single)
If Not TreeView1.DropHighlight Is Nothing Then
Dim NodeX As MSComctlLib.Node
Set NodeX = TreeView1.Nodes.Add(TreeView1.DropHighlight.Key, tvwChild, GetNextKey() & ListView1.SelectedItem.Text, ListView1.SelectedItem.Text)
TreeView1.DropHighlight.Expanded = True
NodeX.Selected = True
TreeView1.StartLabelEdit
End If
Timer1.Enabled = False
End Sub
Private Sub TreeView1_DragOver(Source As Control, x As Single, y As Single, State As Integer)
If Not TreeView1.HitTest(x, y) Is Nothing Then
Set TreeView1.DropHighlight = TreeView1.HitTest(x, y)
mfX = x
mfY = y
If y > 0 And y < 100 Then
sdX = VScrollBarUp
ElseIf y > (TreeView1.Height - 400) And y < TreeView1.Height Then
sdX = VScrollBarDown
ElseIf x > 0 And x < 100 Then
sdX = HScrollBarLeft
ElseIf x > (TreeView1.Width - 400) And x < TreeView1.Width Then
sdX = HScrollBarRight
Else
sdX = NoScroll
End If
Timer1.Enabled = True
End If
End Sub
Private Sub Timer1_Timer()
Set TreeView1.DropHighlight = TreeView1.HitTest(mfX, mfY)
Select Case sdX
Case VScrollBarUp
SendMessage TreeView1.hwnd, WM_VSCROLL, 0, vbNull
Case VScrollBarDown
SendMessage TreeView1.hwnd, WM_VSCROLL, 1, vbNull
Case HScrollBarLeft
SendMessage TreeView1.hwnd, WM_HSCROLL, 0, vbNull
Case HScrollBarRight
SendMessage TreeView1.hwnd, WM_HSCROLL, 1, vbNull
Case NoScroll
If Not TreeView1.DropHighlight Is Nothing Then
If TreeView1.DropHighlight.Children > 0 Then
TreeView1.DropHighlight.Expanded = True
End If
End If
End Select
End Sub
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Timer1.Enabled = False
If Button = vbRightButton Then
If TreeView1.HitTest(x, y) Is TreeView1.SelectedItem Then
If Not TreeView1.SelectedItem Is Nothing Then
If TreeView1.SelectedItem.Children > 0 Then
MenuNodeExpand.Visible = True
MenuNodeExpand.Caption = "Expand Node: " & TreeView1.SelectedItem.Text
MenuNodeClose.Visible = True
MenuNodeClose.Caption = "Close Node: " & TreeView1.SelectedItem.Text
Else
MenuNodeExpand.Visible = False
MenuNodeClose.Visible = False
End If
Me.PopupMenu MenuNodes
End If
End If
End If
End Sub
Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
TreeView1.DropHighlight = TreeView1.HitTest(x, y)
If Not TreeView1.DropHighlight Is Nothing Then
TreeView1.SelectedItem = TreeView1.HitTest(x, y)
End If
Set TreeView1.DropHighlight = Nothing
End Sub
Private Function GetNextKey() As String
Dim sNewKey As String
Dim iHold As Integer
Dim i As Integer
On Error GoTo myerr
iHold = Val(TreeView1.Nodes(1).Key)
For i = 1 To TreeView1.Nodes.Count
If Val(TreeView1.Nodes(i).Key) > iHold Then
iHold = Val(TreeView1.Nodes(i).Key)
End If
Next
iHold = iHold + 1
sNewKey = VBA.CStr(iHold) & "_"
GetNextKey = sNewKey
Exit Function
myerr:
GetNextKey = "1_"
End Function