虚拟树视图:delphi第三方开源组件

任何类似于组件的树状视图的目的都是显示项目的层次列表。您每天使用和看到的最常见的工具是Windows资源管理器中用于在文件系统上显示文件夹(及更多)的工具。...

01

03年的

关于虚拟树视图

Virtual Tree View - Sample In Action

任何类似于组件的树状视图的目的都是显示项目的层次列表。您每天使用和看到的最常见的工具是Windows资源管理器中用于在文件系统上显示文件夹(及更多)的工具。

Delphi附带了位于工具选项板“Win32”部分的TTreeView控件。在ComCtrls单元中定义,TTreeView完成了一项相当不错的任务,允许您显示任何类型对象的任何父子关系。

TTreeView中的每个节点都由一个标签和一个可选的位图图像组成,TTreeNode对象描述TTreeView控件中的单个节点。

如果您的应用程序基于显示分层数据(如文件夹和文件、XML结构等)来执行大多数任务,那么它的功能就足够强大,但您很快就会意识到,您需要类似树状视图的组件提供更多功能。

这就是第三方组件世界中的一颗宝石:虚拟TreeView组件。

虚拟树视图

虚拟TreeView最初由Mike Lischke开发,现在作为Google代码上的开源项目进行维护,如果你能使用任何你可以称之为“节点”的东西,它是一个必须使用的控件。

经过13年的开发,VirtualTreeView是Delphi市场上最完善、最灵活、最先进的开源组件之一。

从Delphi 7到最新版本(目前为XE3),您将能够在应用程序中使用和利用TVirtualStringTree和TVirtualDrawTree(控件的实际名称)的强大功能。

以下是虚拟TreeView控件的几个“为什么要使用”功能:

  • 非常小的内存足迹。
  • 超快。
  • 虚拟意味着它不知道它管理的数据的大小。一切都是通过事件来完成的。
  • 支持多列视图
  • 使用位图和字体样式轻松自定义节点显示。
  • 拖放和剪贴板支持
  • 树中的每个节点都可以有自己的检查类型(甚至混合三态部分检查)。
  • 复杂的树内容序列化。
  • 使用应用程序定义的编辑器编辑树数据。

通过这篇文章,我将开始一个关于如何使用TVirtualStringTree控件的系列文章。

首先,让我们看看如何在Delphi的IDE中安装虚拟树视图。

02

03年的

如何安装虚拟树视图

Virtual TreeView - Install in IDE

首先,下载主要的虚拟TreeView包(在“下载”下)。

您将下载一个ZIP文件,其中包含源代码、在Delphi中安装组件的软件包、一些演示和其他内容。

将归档文件的内容解压缩到某个文件夹中,在该文件夹中有其他第三方组件。我使用的是“C:\Users\Public\Documents\Delphi3rd\”,对我来说,位置是“C:\Users\Public\Documents\Delphi3rd\VirtualTreeviewV5.1.0”

下面介绍如何在Delphi XE3/RAD Studio XE3中安装虚拟树视图

  1. 打开项目组“Packages\RAD Studio XE2\RAD Studio XE3.groupproj”。
  2. 右键单击“VirtualTreesD16.bpl”,然后单击“安装”。
  3. 转到“工具>选项>环境选项>Delphi选项>库>库路径>[…]”。浏览到虚拟树视图的“源”文件夹,按“确定”、“添加”、“确定”、“确定”
  4. 保存项目。文件-全部关闭。

安装后,您将在工具选项板的“虚拟控件”部分找到三个组件:

  • TVirtualStringTree—您将使用的主控件—自行管理节点标题。
  • TVirtualDrawTree-允许应用程序在树窗口中绘制自己的内容。
  • TVTHeaderPopupMenu-提供了一种方便的方法来实现用于切换列可见性的标题弹出窗口。

03

03年的

虚拟树视图“hello world”示例

Virtual TreeView - Hello World Example

在Delphi/radstudioide中安装虚拟TreeView包后,让我们从下载的包中运行示例项目,看看是否一切正常。

加载位于“\Demos\Minimal\”下的项目,项目名称为“Minimal.dpr”。

查看将数百(甚至数千)个节点作为子节点添加到选定节点的速度。最后,这里是这个“hello world”示例的(重要实现)源代码:

implementation类型pmyrec=^tmyrec;tmyrec=记录描述:widestring;终止程序TMAInformCreate(发送方:ToObject);开始vst.nodedatasize:=sizeof(tmyrec);vst.rootnodecount:=20;终止程序tmainform.clearbuttonclick(发送方:ToObject);变量开始:红衣主教;开始screen.cursor:=crhourglass;尝试开始:=gettickcount;vst.clear;label1.caption:=格式('last operation duration:%d ms',[gettickcount-start]);最后screen.cursor:=crdefault;终止终止程序tmainform.addbuttonclick(发送方:ToObject);变量伯爵:红衣主教;开始:红衣主教;开始screen.cursor:=crhourglass;使用vst dotry开始:=gettickcount;外壳(发送器为tbutton)。标签0://添加到rootbegin计数:=stroint(edit1.text);rootnodecount:=rootnodecount+count;终止1://addaschildif赋值(focusednode),然后开始计数:=stroint(edit1.text);childcount[focusednode]:=childcount[focusednode]+计数;扩展的[focusednode]:=true;失效底部(聚焦节点);终止终止label1.caption:=格式('last operation duration:%d ms',[gettickcount-start]);最后screen.cursor:=crdefault;终止终止过程tmaninform.vstfreenode(发送方:tbasevirtualtree;节点:pvirtualnode);变量资料来源:pmyrec;开始数据:=sender.getnodedata(节点);最后确定(数据^);终止过程tmaninform.vstgettext(发送方:tbasevirtualtree;节点:pvirtualnode;列:tcolumnindex;texttype:tvsttexttype;var celltext:string);变量资料来源:pmyrec;开始数据:=sender.getnodedata(节点);如果分配(数据),则celltext:=data.caption;终止过程tmaninform.vstinitnode(发送方:tbasevirtualtree;父节点,节点:pvirtualnode;变量初始状态:tvirtualnodeinitstates);变量资料来源:pmyrec;从发送者开始多贝金数据:=getnodedata(节点);data.caption:=格式('level%d,index%d',[getnodelevel(node),node.index]);终止终止

  • 发表于 2021-10-13 10:31
  • 阅读 ( 98 )
  • 分类:数学

你可能感兴趣的文章

如何获得linux图形设备管理器

...有关用户和组的信息。 这个HardInfo副本运行在一个Ubuntu虚拟机上,所以有些结果有点奇怪。创建虚拟机时可以访问主机的两个CPU内核。因此,虽然CPU被正确地识别为amdryzen53600 6核CPU,但是只列出了两个核。 有些显示器是动态的...

  • 发布于 2021-03-31 11:57
  • 阅读 ( 252 )

ios 8操作系统(ios 8)和ios 9操作系统(ios 9)的区别

...系统减少到只有两个标签(今天和通知)。用户还可以从第三方应用程序中添加、删除和重新排列自定义小部件。短信应用程序现在可以通过按下录制按钮发送视频和音频信息。“请勿打扰”按钮现在可以应用于单个踏板上,也...

  • 发布于 2021-07-12 12:18
  • 阅读 ( 160 )

如何按文本定位treeview节点(locate treeview node by text)

...首先,我们将构建一个简单的Delphi表单,其中包含一个树视图、一个按钮、一个复选框和一个编辑组件,并保留所有默认组件名称。 正如您可能想象的那样,代码的工作方式如下:如果Edit1.Text提供的GetNodeByText返回一个节点,...

  • 发布于 2021-09-04 07:21
  • 阅读 ( 156 )

用delphi创建、解析和操作xml文档

...留树节点的文本和其他属性),以及如何从XML文件填充树视图。 使用Delphi轻松读取和操作RSS提要文件探索如何使用TXMLDocument组件使用Delphi读取和操作XML文档。例如,请参见如何从About Delphi编程内容环境中提取最新的“聚光灯下...

  • 发布于 2021-09-06 15:05
  • 阅读 ( 173 )

delphi编译器版本指令

如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。 假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组...

  • 发布于 2021-09-06 15:09
  • 阅读 ( 172 )

将项目添加到tpopup delphi菜单

在Delphi应用程序中使用菜单或弹出菜单时,在大多数情况下,都是在设计时创建菜单项的。每个菜单项都由一个TMenuItem Delphi类表示。当用户选择(单击)一个项目时,OnClick事件将被触发,以供您(作为开发人员)获取该事件并...

  • 发布于 2021-09-06 15:10
  • 阅读 ( 178 )

了解delphi编程的基础知识

希望掌握Delphi编程语言的初学者应该已经熟悉Microsoft Windows的基础知识。学习Delphi是最容易的,如果你从一个有指导的、基于教程的参考框架来学习它。 基本概念 从一堂历史课开始,介绍(Turbo)Pascal到Delphi 2005的演变,例...

  • 发布于 2021-09-06 15:13
  • 阅读 ( 199 )

delphi中的sql

...形式,允许您选择、插入、更新、查找数据位置等。 delphi中的tquery 如果要在应用程序中使用SQL,您将非常熟悉TQuery组件。Delphi使您的应用程序能够通过TQuery组件直接使用SQL语法来访问Paradox和dBase表(使用本地SQL—ANSI标准SQL...

  • 发布于 2021-09-08 10:40
  • 阅读 ( 196 )

如何在运行时移动和调整控件大小(在delphi应用程序中)(move and resize controls at run time (in delphi applications))

...)。拖放可用于让用户将项目从一个控件(如列表框或树视图)拖到另一个控件中。 如何记住控制位置和大小?​ 如果允许用户移动表单控件并调整其大小,则必须确保在关闭表单时以某种方式保存控件位置,并且在创建/...

  • 发布于 2021-09-10 20:45
  • 阅读 ( 205 )

在delphi的tdbgrid中显示和编辑备注字段

...了什么: 当用户按下ENTER键时(我们将键参数与VK_返回虚拟键代码进行比较)[key=VK_返回], 如果DBGrid中当前选定的字段是我们的备注字段(DBGrid1.SelectedField=DBTableData), 我们创建TMemoEditorForm[TMemoEditorForm.create(nil)], 将备注...

  • 发布于 2021-09-10 20:47
  • 阅读 ( 180 )
njha7502
njha7502

0 篇文章

相关推荐