01
03年的
任何类似于组件的树状视图的目的都是显示项目的层次列表。您每天使用和看到的最常见的工具是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年的
首先,下载主要的虚拟TreeView包(在“下载”下)。
您将下载一个ZIP文件,其中包含源代码、在Delphi中安装组件的软件包、一些演示和其他内容。
将归档文件的内容解压缩到某个文件夹中,在该文件夹中有其他第三方组件。我使用的是“C:\Users\Public\Documents\Delphi3rd\”,对我来说,位置是“C:\Users\Public\Documents\Delphi3rd\VirtualTreeviewV5.1.0”
下面介绍如何在Delphi XE3/RAD Studio XE3中安装虚拟树视图
安装后,您将在工具选项板的“虚拟控件”部分找到三个组件:
03
03年的
在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]);终止终止...有关用户和组的信息。 这个HardInfo副本运行在一个Ubuntu虚拟机上,所以有些结果有点奇怪。创建虚拟机时可以访问主机的两个CPU内核。因此,虽然CPU被正确地识别为amdryzen53600 6核CPU,但是只列出了两个核。 有些显示器是动态的...
...系统减少到只有两个标签(今天和通知)。用户还可以从第三方应用程序中添加、删除和重新排列自定义小部件。短信应用程序现在可以通过按下录制按钮发送视频和音频信息。“请勿打扰”按钮现在可以应用于单个踏板上,也...
...首先,我们将构建一个简单的Delphi表单,其中包含一个树视图、一个按钮、一个复选框和一个编辑组件,并保留所有默认组件名称。 正如您可能想象的那样,代码的工作方式如下:如果Edit1.Text提供的GetNodeByText返回一个节点,...
...留树节点的文本和其他属性),以及如何从XML文件填充树视图。 使用Delphi轻松读取和操作RSS提要文件探索如何使用TXMLDocument组件使用Delphi读取和操作XML文档。例如,请参见如何从About Delphi编程内容环境中提取最新的“聚光灯下...
如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。 假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组...
在Delphi应用程序中使用菜单或弹出菜单时,在大多数情况下,都是在设计时创建菜单项的。每个菜单项都由一个TMenuItem Delphi类表示。当用户选择(单击)一个项目时,OnClick事件将被触发,以供您(作为开发人员)获取该事件并...
希望掌握Delphi编程语言的初学者应该已经熟悉Microsoft Windows的基础知识。学习Delphi是最容易的,如果你从一个有指导的、基于教程的参考框架来学习它。 基本概念 从一堂历史课开始,介绍(Turbo)Pascal到Delphi 2005的演变,例...
...形式,允许您选择、插入、更新、查找数据位置等。 delphi中的tquery 如果要在应用程序中使用SQL,您将非常熟悉TQuery组件。Delphi使您的应用程序能够通过TQuery组件直接使用SQL语法来访问Paradox和dBase表(使用本地SQL—ANSI标准SQL...
...)。拖放可用于让用户将项目从一个控件(如列表框或树视图)拖到另一个控件中。 如何记住控制位置和大小? 如果允许用户移动表单控件并调整其大小,则必须确保在关闭表单时以某种方式保存控件位置,并且在创建/...
...了什么: 当用户按下ENTER键时(我们将键参数与VK_返回虚拟键代码进行比较)[key=VK_返回], 如果DBGrid中当前选定的字段是我们的备注字段(DBGrid1.SelectedField=DBTableData), 我们创建TMemoEditorForm[TMemoEditorForm.create(nil)], 将备注...