打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
玩转TreeView

一、   运行界面:

二、   设计界面:

1右面“介绍”页面(P1

2、右面“节点”页面(P2

3、右面“控件”页面(P3

4、右面“拖动”页面(P4

三、   有关代码:

1、        Form1Caption:  玩转TreeView 第二版 流星雨

2、        Form1Icon:  f:\temp2\玩转treeview 流星雨第二版\pic\4.ico

3Form1Init代码

Declare Long SendMessage in "user32" Long,Long,Long

4、        Form1.TreeMousePionter:  0-Default

5、        Form1.TreeInit代码:

#Define TVM_SETBKCOLOR 4381

Declare Integer SendMessage IN User32 Integer hWnd ,Integer wMsg ,Integer wParam ,Integer lParam

= SendMessage(This.Hwnd, TVM_SETBKCOLOR, 0, RGB(230,230,255))

CLEAR DLLS SendMessage

This.Indentation=26

This.HotTracking=.T.

This.HideSelection=.F.

This.LabelEdit= 1

This.ImageList=Thisform.Images

This.lineStyle= 1

Thisform.Images.BackColor = RGB(230,230,255)

SELECT show

GO TOP

SCAN

      IF父对象=0

           This.Nodes.Add(,,'N'+ALLTRIM(STR(键值)),ALLTRIM(名称))

      ELSE

           This.Nodes.Add('N'+ALLTRIM(STR(父对象)),4,'N'+ALLTRIM(STR(键值)),ALLTRIM(名称))

      ENDIF

      IF图标>0

           This.Nodes(RECNO()).Image=图标

      ENDIF

      IF选中图标>0

           This.Nodes(RECNO()).SelectedImage=选中图标

      ENDIF

      IF !EMPTY()

           This.Nodes(RECNO()).ForeColor=RGB(0,0,255)

      ELSE

           This.Nodes(RECNO()).ForeColor=0    &&NodeClick事件中的返回颜色的命令做铺垫,不然会返回一个负值。

      ENDIF

      This.Nodes(RECNO()).BackColor=RGB(255,255,255)  &&正常情况下不需要设定这两个属性。

ENDSCAN

This.NodeClick(This.Nodes(1))

This.Nodes(1).Selected=.T.

This.Tag=ALLTRIM(STR(This.Nodes.Count+1))

This.Nodes(1).BackColor = RGB(230,230,255)

6Form1.TreeNodeClick代码:

*** ActiveX Control Event ***

LPARAMETERS node

IF EMPTY(node.Tag)

      SELECT show

      GO VAL(RIGHT(node.key,LEN(node.key)-1))&&node.index

      Thisform.Pf.P1.Edit1.Value=内容

ELSE

      Thisform.Pf.P1.Edit1.Value='新增节点'

ENDIF

IF !EMPTY(Thisform.PF.P2.Tree.Tag)

      Thisform.PF.P2.Tree.Nodes(VAL(Thisform.PF.P2.Tree.Tag)).Selected=.F.

ENDIF

DO CASE

      CASE Thisform.PF.P2.Opt.Value=1

           Thisform.PF.P2.Tree.Nodes(node.image).Selected=.T.

      CASE Thisform.PF.P2.Opt.Value=2 AND !ISNULL(node.SelectedImage)

           IF !EMPTY(node.SelectedImage)

                 Thisform.PF.P2.Tree.Nodes(node.SelectedImage).Selected=.T.

           ENDIF

      CASE Thisform.PF.P2.Opt.Value=3 AND !ISNULL(node.ExpandedImage)

           IF !EMPTY(node.ExpandedImage)

                 Thisform.PF.P2.Tree.Nodes(node.ExpandedImage).Selected=.T.                  ENDIF

ENDCASE

Thisform.PF.P2.Tree.Tag=IIF(VARTYPE(Thisform.PF.P2.Tree.SelectedItem)='O',ALLTRIM(STR(Thisform.PF.P2.Tree.SelectedItem.Index)),'')

Thisform.PF.P2.Text1.Value=node.Text

Thisform.PF.P2.Text2.Value=node.Key

Thisform.PF.P2.Text3.Value=node.index

Thisform.PF.P2.Text4.Value=node.Children

Thisform.PF.P2.Text5.BackColor=node.ForeColor

Thisform.PF.P2.Text6.BackColor=node.BackColor

Thisform.PF.P2.Command9.FontBold=node.Bold

IF node.Expanded

      Thisform.Pf.P2.Command8.Caption='折叠节点'

ELSE

      Thisform.Pf.P2.Command8.Caption='展开节点'

ENDIF

Thisform.Pf.P2.Text7.Value=node.FullPath

IF !EMPTY()

      Thisform.Pf.P3.Combo1.Enabled=.T.

      Thisform.Pf.P3.Edit1.Value=SUBSTR(ALLTRIM(内容),1,AT('语法',内容))

      Thisform.Pf.P3.Text2.Value=SUBSTR(ALLTRIM(),1,AT(',',)-1)

      Thisform.Pf.P3.Combo1.RowSource=SUBSTR(ALLTRIM(),AT(',',)+1,LEN(ALLTRIM())-AT(',',))

      Thisform.Pf.P3.Combo1.ListIndex=1

ELSE

      Thisform.Pf.P3.Combo1.Enabled=.F.

      Thisform.Pf.P3.Edit1.Value=''  

ENDIF

7、        Form1.TreeOLEDragMode: 0

8、        Form1.TreeOLEDropMode: 0

9、        P1.Caption:介绍

10、   P1Command1(保存)按钮Click代码:

SELECT show

REPLACE 内容 WITH This.Parent.Edit1.Value

11、   P1Command1SpecialEffect: 1- 平面

12、   P2.Caption:节点

13、   P2中的Command4(新增节点)按钮Click代码:

IF This.Parent.Check1.Value=0

      Thisform.Tree.Nodes.Add(,,'N'+Thisform.Tree.Tag,'新增节点',5,4)

ELSE

      Thisform.Tree.Nodes.Add(Thisform.Tree.SelectedItem.Key,4,'N'+Thisform.Tree.Tag,'新增节点',5,4)

ENDIF

Thisform.Tree.Nodes(VAL(Thisform.Tree.Tag)).Tag='N'

Thisform.Tree.Nodes(VAL(Thisform.Tree.Tag)).BackColor=RGB(255,255,255) &&为返回颜色做铺垫,正常情况不必设

Thisform.Tree.Tag=ALLTRIM(STR(VAL(Thisform.Tree.Tag)+1))

14、   P2Command4SpecialEffect: 1- 平面

15、   P2中的Command5(删除节点)按钮Click代码:

IF EMPTY(Thisform.Tree.SelectedItem.Tag)

      MESSAGEBOX('不好意思,我还要用这个节点:)',0+64,'系统信息')

ELSE

      Thisform.Tree.Nodes.Remove(Thisform.Tree.SelectedItem.Index)

      Thisform.Tree.Tag=ALLTRIM(STR(VAL(Thisform.Tree.Tag)-1))

ENDIF

16、   P2Command5SpecialEffect: 1- 平面

17、   P2中的Command7(背景)按钮Click代码:

sc=GETCOLOR(This.Parent.Text5.BackColor)

IF sc>=0

      This.Parent.Text6.BackColor=sc

      Thisform.Tree.SelectedItem.BackColor=This.Parent.Text6.BackColor

ENDIF

18、   P2Command7SpecialEffect: 1- 平面

19、   P2中的Command6(字体)按钮Click代码:

sc=GETCOLOR(This.Parent.Text5.BackColor)

IF sc>=0

      This.Parent.Text5.BackColor=sc

      Thisform.Tree.SelectedItem.ForeColor=This.Parent.Text5.BackColor

ENDIF

20、   P2Command6SpecialEffect: 1- 平面

21、   P2中的Command8(展开节点)按钮Click代码:

Thisform.Tree.SelectedItem.Expanded=!Thisform.Tree.SelectedItem.Expanded

IF Thisform.Tree.SelectedItem.Expanded

      This.Caption='折叠节点'

ELSE

      This.Caption='展开节点'

ENDIF

22、   P2Command8SpecialEffect: 1- 平面

23、   P2中的Command9(粗体)按钮Click代码:

This.FontBold=!This.FontBold

Thisform.Tree.SelectedItem.Bold=This.FontBold

24、   P2Command9SpecialEffect: 1- 平面

25、   P2OptinteractiveChange代码:

Thisform.Tree.NodeClick(Thisform.Tree.SelectedItem)

26、   P2Opt.option1.Caption: 节点图标

27、   P2Opt.option2.Caption: 选中图标

28、   P2Opt.option3.Caption: 展开图标

29、   P3.Caption: 控件

30、   P3MouseMove代码:

LPARAMETERS nButton, nShift, nXCoord, nYCoord

31、   P3Combo1interactiveChange代码:

com='Thisform.Tree.'+SUBSTR(Thisform.Tree.SelectedItem.Text,1,AT(' ',Thisform.Tree.SelectedItem.Text))+'='+This.Value

IF '.Enabled'$com

      com=STRTRAN(com,'.Enabled','.Object.Enabled')

ENDIF

&com

Thisform.Tree.Refresh

32、   P4.Caption: 拖动

33、   P4.Shape1 SpecialEffect: 0- 3

34、   P4.TreeAppearance: 0- Flat

35、   P4.TreeBorderStyle: 1- Fixed Single

36、   P4.TreeLineStyle: 1- RootLines

37、   P4.TreeInit代码:

This.ImageList=Thisform.Images

This.HotTracking=.T.

This.HideSelection=.F.

This.LabelEdit= 1

*This.SingleSel=.T.

SELECT show

GO TOP

SCAN

      IF父对象=0

           This.Nodes.Add(,,'N'+ALLTRIM(STR(键值)),ALLTRIM(名称))

      ELSE

           This.Nodes.Add('N'+ALLTRIM(STR(父对象)),4,'N'+ALLTRIM(STR(键值)),ALLTRIM(名称))

      ENDIF

      IF图标>0

           This.Nodes(RECNO()).Image=图标

      ENDIF

      IF选中图标>0

           This.Nodes(RECNO()).SelectedImage=选中图标

      ENDIF

ENDSCAN

38、   P4.TreeOLEDragDrop代码:

*** ActiveX Control Event ***

LPARAMETERS data, effect, button, shift, x, y

MESSAGEBOX(This.Tag)

RETURN

IF This.Parent.Tag#This.Name

      loNode=This.HitTest(X/96*1440,Y/96*1440)

      IF VARTYPE(loNode)='O' &&设置要添加的是根节点还是子节点

           lcParent='"'+loNode.Key+'"'

           lnRelation='4'

      ELSE

           lcParent=''

           lnRelation=''

      ENDIF

      *IF VARTYPE(This.Parent.Tree1.SelectedItem)='O'  && 加此句是因为有时会产生找不到选定节点的错误,原因不明

           lnIndex=This.Parent.Tree1.SelectedItem.Index

      *ELSE

      *    RETURN

      *ENDIF

      IF This.Parent.Tree1.SelectedItem.Children>0  &&计算要移动的节点总数

           IF VARTYPE(This.Parent.Tree1.SelectedItem.Next)#'O'

                 lnCount=This.Parent.Tree1.Nodes.Count-This.Parent.Tree1.SelectedItem.Index

           ELSE

                 lnCount=This.Parent.Tree1.SelectedItem.Next.Index-This.Parent.Tree1.SelectedItem.Index-1

           ENDIF

      ELSE

           lnCount=0

      ENDIF

      FOR i=0 TO lnCount &&添加要移动的节点

           loNode=This.Parent.Tree1.Nodes(lnIndex+i)

      This.Nodes.Add(&lcParent,&lnRelation,loNode.Key,loNode.Text,loNode.Image,IIF(VARTYPE(loNode.SelectedImage)#'N',0,loNode.SelectedImage))

           IF i#lnCount

                 lcParent='"'+This.Parent.Tree1.Nodes(lnIndex+i+1).Parent.Key+'"'

                 lnRelation='4'

           ENDIF

      ENDFOR

      This.Parent.Tree1.Nodes.Remove(This.Parent.Tree1.SelectedItem.Index) &&删除移动的节点

ENDIF

39、   P4.TreeOLEDragMode: 1

40、   P4.TreeOLEDragOver代码:

*** ActiveX Control Event ***

LPARAMETERS data, effect, button, shift, x, y, state

loNode=This.HitTest(X/96*1440,Y/96*1440) &&计算鼠标下的节点

IF VARTYPE(loNode)='O'

      This.SelectedItem=loNode

ENDIF

IF EMPTY(This.Tag)

      This.Tag=STR(This.SelectedItem.Index)

ENDIF

WAIT '' WINDOW TIMEOUT 0.1 &&滚动延迟

IF y<10    &&向上

      SendMessage(This.Parent.Tree.hwnd,0x115,0)

ENDIF

IF y>This.Height-30 &&向下

      SendMessage(This.Parent.Tree.hwnd,0x115,1)

ENDIF

IF x<10 && 向左

      SendMessage(This.Parent.Tree.hwnd,0x114,0)

ENDIF

IF x>This.Width-30 &&向右

      SendMessage(This.Parent.Tree.hwnd,0x114,1)

ENDIF

41、   P4.TreeOLEDropMode: 1

42、   P4.Tree1OLEDragDrop代码:

*** ActiveX Control Event ***

LPARAMETERS data, effect, button, shift, x, y

IF This.Parent.Tag#This.Name

      loNode=This.HitTest(X/96*1440,Y/96*1440)

      IF VARTYPE(loNode)='O'

           lcParent='"'+loNode.Key+'"'

           lnRelation='4'

      ELSE

           lcParent=''

           lnRelation=''

      ENDIF

      IF VARTYPE(This.Parent.Tree.SelectedItem)='O'

           lnIndex=This.Parent.Tree.SelectedItem.Index

      ELSE

           RETURN

      ENDIF

      IF This.Parent.Tree.SelectedItem.Children>0

           IF VARTYPE(This.Parent.Tree.SelectedItem.Next)#'O'

                 lnCount=This.Parent.Tree.Nodes.Count-This.Parent.Tree.SelectedItem.Index

           ELSE

                 lnCount=This.Parent.Tree.SelectedItem.Next.Index-This.Parent.Tree.SelectedItem.Index-1

           ENDIF

      ELSE

           lnCount=0

      ENDIF

      FOR i=0 TO lnCount

           loNode=This.Parent.Tree.Nodes(lnIndex+i)

      This.Nodes.Add(&lcParent,&lnRelation,loNode.Key,loNode.Text,loNode.Image,IIF(VARTYPE(loNode.SelectedImage)#'N',0,loNode.SelectedImage))

           IF i#lnCount

                 lcParent='"'+This.Parent.Tree.Nodes(lnIndex+i+1).Parent.Key+'"'

                 lnRelation='4'

           ENDIF

      ENDFOR

      This.Parent.Tree.Nodes.Remove(This.Parent.Tree.SelectedItem.Index)

ENDIF

43、   P4.Tree1OLEDragOver代码:

*** ActiveX Control Event ***

LPARAMETERS data, effect, button, shift, x, y, state

IF (EMPTY(This.Tag) OR This.Parent.Tag#This.Name) AND x#0 AND Y#0

      loNode=This.HitTest(X/96*1440,Y/96*1440)

      This.SelectedItem=loNode

      This.Tag='T'

ENDIF

WAIT '' WINDOW TIMEOUT 0.1 &&滚动延迟

IF y<10    &&向上

      SendMessage(This.Parent.Tree.hwnd,0x115,0)

ENDIF

IF y>This.Height-30 &&向下

      SendMessage(This.Parent.Tree.hwnd,0x115,1)

ENDIF

IF x<10 && 向左

      SendMessage(This.Parent.Tree.hwnd,0x114,0)

ENDIF

IF x>This.Width-30 &&向右

      SendMessage(This.Parent.Tree.hwnd,0x114,1)

ENDIF

44、   P4.Tree1OLEDropMode: 1

45、   P4.Tree1OLEStartDrag代码:

*** ActiveX Control Event ***

LPARAMETERS data, allowedeffects

This.Parent.Tag=This.Name

This.Tag=''

46、   P4.Tree1Command1.Click代码:

FOR i=1 TO THis.Parent.Tree.Nodes(3).Children

      THis.Parent.Tree.Nodes(3).Child.Parent=THis.Parent.Tree1.Nodes(1)

ENDFOR

47、   Command1(退出)按钮的Click代码:

Thisform.Release

四、   附件

1、         show.dbf结构

2、         show.dbf内容如下:

3、         将表show.dbf添加到“数据环境”中

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在Visual FoxPro中使用TreeView控件
数据库语言课程设报告(餐厅点菜)
关于PACK命令的使用
VFP6.0中ActiveX控件TreeView 使用实例
VFP中的列表框控件(listbox)
看实例学VFP:模糊查询
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服