`
qujianfeng
  • 浏览: 78520 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Virtual TreeView使用示例

阅读更多

Virtual TreeView是一个功能强大的delphi树型组件,从它带的例子就能看出来。下面我把我做的如下图所示的树型的代码贴出来,供大家参考:

源码:

  1. {*------------------------------------------------------------------------------
  2. VirtualTreeView使用示例
  3. @author屈剑峰email:qujianfeng@gmail.com
  4. @version2008/10/161.0Initialrevision.
  5. @todo
  6. @comment
  7. -------------------------------------------------------------------------------}
  8. unitUnit4;
  9. interface
  10. uses
  11. Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
  12. Dialogs,VirtualTrees,ImgList,Menus,AdvMenus;
  13. type
  14. {*------------------------------------------------------------------------------
  15. 首先,先自己定义一个结点所对应的数据结构。
  16. 这一般是一个结构体,内容根据你的需要自己定义
  17. -------------------------------------------------------------------------------}
  18. TMyRec=record
  19. Text:string;//结点显示的文本
  20. ImageIndex:Integer;//结点显示的图片索引。注意:要在结点显示图片必须TreeOptions.MiscOptions包含toCheckSuppot
  21. Id:string;//数据Id,可以为数据库记录的Id
  22. CheckType:TCheckType;//选择框类型
  23. CheckState:TCheckState;//选择框状态
  24. //...你还可以自己加
  25. end;
  26. {*------------------------------------------------------------------------------
  27. 定义一个上面结构体的指针类型,后面要用到这个东东
  28. -------------------------------------------------------------------------------}
  29. PMyRec=^TMyRec;
  30. TForm4=class(TForm)
  31. vsttree:TVirtualStringTree;
  32. il1:TImageList;
  33. advpmn1:TAdvPopupMenu;
  34. N1:TMenuItem;
  35. procedureFormCreate(Sender:TObject);
  36. procedurevsttreeGetText(Sender:TBaseVirtualTree;Node:PVirtualNode;
  37. Column:TColumnIndex;TextType:TVSTTextType;varCellText:WideString);
  38. procedurevsttreeInitNode(Sender:TBaseVirtualTree;ParentNode,
  39. Node:PVirtualNode;varInitialStates:TVirtualNodeInitStates);
  40. procedurevsttreeGetImageIndex(Sender:TBaseVirtualTree;Node:PVirtualNode;
  41. Kind:TVTImageKind;Column:TColumnIndex;varGhosted:Boolean;
  42. varImageIndex:Integer);
  43. procedureN1Click(Sender:TObject);
  44. procedurevsttreeFreeNode(Sender:TBaseVirtualTree;Node:PVirtualNode);
  45. procedurevsttreeGetPopupMenu(Sender:TBaseVirtualTree;Node:PVirtualNode;
  46. Column:TColumnIndex;constP:TPoint;varAskParent:Boolean;
  47. varPopupMenu:TPopupMenu);
  48. private
  49. {Privatedeclarations}
  50. public
  51. {Publicdeclarations}
  52. end;
  53. var
  54. Form4:TForm4;
  55. implementation
  56. {$R*.dfm}
  57. procedureTForm4.FormCreate(Sender:TObject);
  58. var
  59. RootNode,ChileNode:PVirtualNode;
  60. Data:PMyRec;
  61. begin
  62. //指定结点数据大小
  63. vsttree.NodeDataSize:=SizeOf(TMyRec);
  64. //指定树里要用的图片列表
  65. vsttree.Images:=il1;
  66. //添加根节点
  67. RootNode:=vsttree.AddChild(nil);
  68. Data:=vsttree.GetNodeData(RootNode);
  69. Data^.Text:='根结点';
  70. Data^.Id:='RootID';
  71. Data^.ImageIndex:=0;
  72. Data^.CheckType:=ctTriStateCheckBox;
  73. Data^.CheckState:=csUncheckedNormal;
  74. //添加一个子结点
  75. ChileNode:=vsttree.AddChild(RootNode);
  76. Data:=vsttree.GetNodeData(ChileNode);
  77. Data^.Text:='子结点1';
  78. Data^.Id:='ChildId1';
  79. Data^.ImageIndex:=1;
  80. Data^.CheckType:=ctTriStateCheckBox;
  81. Data^.CheckState:=csUncheckedNormal;
  82. //再添加一个子结点
  83. ChileNode:=vsttree.AddChild(RootNode);
  84. Data:=vsttree.GetNodeData(ChileNode);
  85. Data^.Text:='子结点2';
  86. Data^.Id:='ChildId2';
  87. Data^.ImageIndex:=1;
  88. Data^.CheckType:=ctTriStateCheckBox;
  89. Data^.CheckState:=csUncheckedNormal;
  90. //默认展开一级结点,这句话要写在初始的最后
  91. vsttree.Expanded[RootNode]:=True;
  92. {
  93. 注:在这里把数据添加进树后,树里并不能显示出结点
  94. 要在几个事件里写代码才行:
  95. OnInitNode:在这个事件里初始化结点,如指定复选框以及状态
  96. OnGetText:在这个事件里指定结点的显示文本
  97. OnGetPopupMenu:在这个事件里指定下拉菜单
  98. OnGetImageIndex:指定结点的图片索引
  99. OnFreeNode:释放结点时您要做的一些释放动作
  100. 通过这些事件,才能把结点的显示情况描述清楚。而您的
  101. 结构体是用来持有您每个结点的数据的。
  102. }
  103. end;
  104. //弹出菜单的点击事件
  105. procedureTForm4.N1Click(Sender:TObject);
  106. var
  107. CurrentNode:PVirtualNode;
  108. Data:PMyRec;
  109. Checked:string;
  110. begin
  111. {示例取点击结点的数据。
  112. 注意:TreeOptions.SelectionOptions必须包含toRightClickSelect
  113. }
  114. //取得当前选中结点
  115. CurrentNode:=vsttree.FocusedNode;
  116. ifAssigned(CurrentNode)then
  117. begin
  118. Data:=vsttree.GetNodeData(CurrentNode);
  119. ifCurrentNode.CheckState=csCheckedNormalthen
  120. begin
  121. Checked:='是';
  122. end
  123. else
  124. begin
  125. Checked:='否';
  126. end;
  127. ShowMessage('当前结点:'+#13
  128. +'Id='+Data^.Id+#13
  129. +'Text='+Data^.Text+#13
  130. +'是否选中='+Checked);
  131. end;
  132. end;
  133. procedureTForm4.vsttreeFreeNode(Sender:TBaseVirtualTree;Node:PVirtualNode);
  134. var
  135. Data:PMyRec;
  136. begin
  137. Data:=Sender.GetNodeData(Node);
  138. Finalize(Data^);
  139. end;
  140. procedureTForm4.vsttreeGetImageIndex(Sender:TBaseVirtualTree;
  141. Node:PVirtualNode;Kind:TVTImageKind;Column:TColumnIndex;
  142. varGhosted:Boolean;varImageIndex:Integer);
  143. var
  144. Data:PMyRec;
  145. begin
  146. Data:=Sender.GetNodeData(Node);
  147. ImageIndex:=Data^.ImageIndex;
  148. end;
  149. procedureTForm4.vsttreeGetPopupMenu(Sender:TBaseVirtualTree;
  150. Node:PVirtualNode;Column:TColumnIndex;constP:TPoint;
  151. varAskParent:Boolean;varPopupMenu:TPopupMenu);
  152. begin
  153. ifAssigned(Node)then
  154. begin
  155. PopupMenu:=advpmn1;
  156. end
  157. else
  158. begin
  159. PopupMenu:=nil;
  160. end;
  161. end;
  162. procedureTForm4.vsttreeGetText(Sender:TBaseVirtualTree;Node:PVirtualNode;
  163. Column:TColumnIndex;TextType:TVSTTextType;varCellText:WideString);
  164. var
  165. Data:PMyRec;
  166. begin
  167. Data:=Sender.GetNodeData(Node);
  168. CellText:=Data^.Text;
  169. end;
  170. procedureTForm4.vsttreeInitNode(Sender:TBaseVirtualTree;ParentNode,
  171. Node:PVirtualNode;varInitialStates:TVirtualNodeInitStates);
  172. var
  173. Data:PMyRec;
  174. begin
  175. Data:=Sender.GetNodeData(Node);
  176. Node.CheckType:=Data^.CheckType;
  177. Node.CheckState:=Data^.CheckState;
  178. end;
  179. end.
分享到:
评论
1 楼 Ti9eR 2012-06-16  
根节点左侧不显示CheckBox,需要如何设置呢?

相关推荐

    我写的Virtual TreeView使用示例

    Virtual TreeView是Delphi开发环境中一个非常强大的控件,它被广泛用于构建高效、可定制的树形数据视图。...希望你的示例代码能为其他开发者提供宝贵的参考,帮助他们更好地理解和使用Virtual TreeView。

    Virtual TreeView最新示例

    Virtual TreeView是一款在Windows开发中常用的控件,尤其在.NET框架和Delphi等环境中,它被广泛用于构建高效、可扩展的树形视图。这个控件的主要特点是其虚拟化特性,即仅在需要时加载节点,从而显著提高了处理大量...

    一个完整的Virtual TreeView的例子

    一个完整的Virtual TreeView的例子,很好的内容,想用Virtual TreeView的必看

    Virtual TreeView最新示例(复选框使用和遍历)

    这是对Virtual TreeView使用的最新实例,主要添加了复选框遍历功能,解决了很多的问题。需要安装的组件有:virtual treeview;TMS Component Pack v4.6.0.7 (完整源码)

    Virtual Treeview V4.4.3

    Virtual Treeview是一款强大的Windows开发控件,主要用于GUI(图形用户界面)设计,它结合了TreeView和ListView的功能,为开发者...开发者可以通过下载并安装"Virtual Treeview V4.4.3.exe"文件来开始使用这个控件。

    DELPHI VirtualTreeView demo 程序源码

    2. **AlignDemo.dfm**: 这个文件可能包含了一个示例,展示了如何设置 VirtualTreeView 的对齐方式,比如水平、垂直或者填充父容器。对齐设置对于优化界面布局和用户体验至关重要。 3. **VisibilityDemo.dfm**: 可能...

    Virtual TreeView V7 for RAD Studio XE3 to 10.2 Toky

    Virtual TreeView是一款专门为Delphi开发环境设计的VCL控件,它在RAD Studio XE3到10.2 Tokyo版本间广泛使用。这个组件因其高效、灵活和强大的特性,在编程界备受推崇,尤其适合处理Treeview及表格类数据的显示。 1...

    VirtualTreeview_Demo.rar

    "VirtualTreeview_Demo.rar"是一个包含VirtualTreeview组件示例程序的压缩包,通过源码的形式,帮助开发者更好地理解和学习如何在实际项目中使用该组件。 VirtualTreeview的核心特性是它的虚拟化机制。在传统的树形...

    VirtualTreeview AutoLoad 自动装载 数据库.rar

    1. **hxb_leiyuan_AutoLoadTreeview_v1.0.gif**:这可能是一个示例图片,展示了如何使用VirtualTreeview组件实现AutoLoad功能,以及在实际应用中的效果。通过查看此图片,开发者可以直观地理解AutoLoad在界面中的...

    Virtual Treeview 5.3.0 D7 - XE7

    - 压缩包中的“VirtualTreeview.5.3.0 D7 - XE7”可能包含以下内容:源代码、帮助文件、示例项目、库文件等。源代码可以让开发者深入理解其工作原理,帮助文件提供使用指南,示例项目则演示了各种功能的实现。 4. ...

    VirtualTreeview Database example

    在这个例子中,VirtualTreeview被用来显示数据库中的记录,而不是预先加载所有数据,这样可以节省内存并提高响应速度。 数据库应用是指将数据存储和检索功能整合到应用程序中。在这个示例中,可能是使用了如SQLite...

    VirtualTreeView.zip

    通过深入理解和利用VirtualTreeView控件,开发者可以创建出界面精美、响应快速的树形界面,特别适合在数据管理和浏览场景下使用。无论是对新手还是经验丰富的Delphi开发者来说,VirtualTreeView都是一个强大的工具,...

    VirtualTreeView 7.4

    5. Demos:演示示例代码,通过实际的例子展示如何使用 VirtualTreeView 实现各种功能,是学习的好资料。 6. Packages:包含了编译好的组件包,可以直接导入到 Delphi 工程中使用。 7. Source:源代码,对于希望深入...

    VirtualTreeView_ListView_treeview_virtualtreeview_delphilist效率_源

    9. **文档和示例**:VirtualTreeView 提供详细的文档和示例代码,帮助开发者快速上手和深入理解控件的使用。 在实际项目中,使用 VirtualTreeView 可以显著提升用户界面的性能和交互体验,特别是在处理大量数据的...

    VirtualTreeview6.2官方正式版

    4. **Demos**:演示应用程序,展示了控件的各种用法和功能,帮助开发者快速理解和学习如何使用VirtualTreeview。 5. **Source**:源代码目录,提供了控件的完整源码,开发者可以深入研究其工作原理并进行二次开发。...

    VirtualTreeview 最新版支持 XE10.3

    Virtual Treeview是为软件开发人员设计的,它代表了用高级Delphi树控件从头构建的树视图控件。根据它的制造商,该工具的树管理范例与其他控件不同。 数据是通过事件(或者通过覆盖数据从应用程序中提取的),因为...

    VirtualTreeview

    10. **文档支持**:VirtualTreeview通常会提供详尽的文档和示例代码,帮助开发者快速理解和使用这个控件,解决开发过程中遇到的问题。 综上所述,VirtualTreeview是一个强大且灵活的.NET控件,适用于处理大量数据或...

    VirtualTreeview V6.3

    这些示例代码是学习如何使用VirtualTreeview的最佳实践,通过它们,开发者可以快速上手并理解如何实现特定功能。 "Source"目录包含了控件的源代码,这对于深入理解其工作原理和进行二次开发至关重要。开发者可以...

    VirtualTreeView 6.7

    安装和使用VirtualTreeView时,会包含以下几个文件和目录: 1. **Packages**:可能包含了编译好的控件库文件,供开发环境如Delphi或C++Builder集成使用。 2. **INSTALL.txt**:提供了详细的安装和配置指南,指导...

    [Delphi] VirtualTreeview&TVirtualStringTree的实用使用说明.docx

    在 Delphi 开发环境中,VirtualTreeview 和 TVirtualStringTree 是两种非常强大的控件,尤其适用于处理大量数据的显示和操作。它们提供了列表模式和树形模式,比标准的 TListView 控件更高效且功能更丰富。下面我们...

Global site tag (gtag.js) - Google Analytics