这控制使用不同的树木管理范式比其他控制这种
虚拟的树视图的目的是要建一个TreeView控件从地上爬起来。超过5年的发展,它提供的最灵活和最先进的树控制的今天。虚拟树形的要求,以改善现有解决方案的许多方面,引入了一些新的神器出山:www.shenqi73.com技术和原理都无法获得的。
正如它的名字已经表明,这种控制采用了不同的模式,这种控制比其他树木管理。它不知道什么它所管理的数据(除了它的大小),甚至没有字幕的节点。所有检索到的应用程序通过事件(或通过重写方法的后裔)。
经过精心设计,虚拟TreeView的和彻底的测试。控制证明了它的概念已经在很多商业产品和免费软件项目以及日常健身。
下面是一些主要特点的“虚拟树视图”:
一般:
·虚拟树形为
文件属性editorVirtual的树视图是非常快的。新增一万个节点只需要700毫秒*!这使得目前速度最快的树形视图上公布的Delphi / BCB市场。
·虚拟TreeView的一个非常小的内存占用。仅分配每个节点(60个字节的字符串中的树,基地树只使用了56个字节),它已准备就绪,持有一百万个。
·虚拟TreeView是优化高速上网。这需要数为0.5秒,经过一万个节点*根据需要验证和节点验证状态。
·多选的支持,包括约束,可以选择,以便选择一定的初始水平的唯一节点。很多的努力,已投入的发展有效的算法,例如:允许仍然修改已经选择集的交互方式。
·绘制整个树位图或的打印机支持中央TBaseVirtualTree.PaintTree方法。消息WM_PRINT和WM_PRINTCLIENT正确处理,这让事情就像画一棵树转换成位图(如分层窗口或使用VT下拉控件的控件实现动画下拉)。
·有是一个TBaseVirtualTree.OnHint的活动,以显示节点特定的提示。
·有是一个TBaseVirtualTree.OnGetHelpContext的事件来检索节点的具体帮助上下文ID。这包括自动树窗口的父控件遍历调用时,用户按下F1
·有一个TBaseVirtualTree.OnGetPopupMenu的事件来检索节点特定的弹出式菜单,包括自动遍历树。
·中东和鼠标左右键可以用在除了左边的按钮,支持一切是可能的左键(拖动,选择等)。这些替代的按钮可以切换的,当然。
·固定的背景图像可以在树中使用,并且可以给出一定的偏移量,例如模拟共享的背景。
·热式支持节点(就像一个浏览器窗口中的链接)。此任务可以被分配一个特殊的光标。
·字符串树支持所谓的静态文本后会出现一个节点的标题(每列),可以采用不同的格式的标题,但不能对其进行编辑,选择等
·自动跨度列模式的支持,允许一列占用更多的
空间为它的标题,如果有列在它的右边是空的。这就避免了剪裁的长标题,但仍允许使用多个列。
·节点可以选择在每一列(这是可切换),以及编辑,使得虚拟树状视图某些种的网格太。制表键可用于细胞之间切换焦点。一个特殊的的选项(toGridExtensions)存在,支持网格特定的任务。
·节点可以具有可单独调节的各个高度和垂直取向的一个节点的图像和线条。
·虚拟树形像拖未决或编辑事件,多选或扩大在建暴露了其内部状态。使用此信息的应用程序可以优化其代码执行(状态更新等)。
·支持通过一个应用程序定义的排序节点比较回电。此外,一棵树可以设置为自动排序。
·提示可以包含多行文本和镜像的节点或列显示的对齐方式和方向性。对于自己的动画滑动和alpha混合。
提供了各种选项和方向是渐进式搜索。
·自动滚动的客户区发生,当鼠标靠近边界的同时拖动并绘制选择(多选)。
可以使用·TBaseVirtualTree.DefaultNodeHeight和TVirtualStringTree.DefaultText以避免许多节点明确设置相同的开始值。
·虚拟TreeView的专栏中实现还允许固定列,使其成为一个很好的电网更换。
最新技术:
·流畅的动画(如提示褪色)虚拟的TreeView使用手工优化MMX汇
编程序的。此代码也可以用来绘制半透明的选择长方形多选模式。这是非常喜欢,什么Windows 2000和Windows XP的支持,但在Windows 95/98/Me工作。
·alpha混合的树窗口形象,而这样做的拖放。在Windows 2000和Windows XP IDropTargetHelper和IDragSourceHelper接口的支持,允许一些非常整齐的影响(资源管理器)。在老年消费者版本的Windows上拖动图像是模拟的树,但背后有一些小的限制。
·虚拟TreeView支持Windows XP主题。它的行为正确,正确的图像通过使用本地API的所有视觉元素的主题主题的变化和用途。在其他Windows系统,这些样式是由不同的遗留代码的支持。可以切换主题意识。
Unicode的:
·TVirtualStringTree是专门使用的Unicode /宽字符串。
·树保存和读取Unicode属性(例如列标题,默认的节点文本等)正确/ DFM。
·所有的Unicode的图纸完全支持双向性(即从右到左的图),列对齐(左,中,右)和正确对齐的提示。当然也可以使用此功能在Windows 95/98/Me。
Drag'n下降和剪贴板支持:
·OLE拖放和OLE剪贴板传输支持与树的源和目标。或者,VCL拖放降可以仍然被用于兼容性。
这些格式支持标准的实施:
本机序列化格式(CF_VIRTUALTREE和CF_VTREFERENCE),这是一个紧凑的形式,虚拟树视图(应用程序之间)之间的数据交换。有两种存储格式可供选择:HGLOBAL的IStream。
·纯ANSI文本字符串格式。
·普通Unicode文本字符串格式。
·富文本(RTF)字符串格式(Unicode文本)。
·HTML的文本字符串格式(UTF-8)。这是首选的剪贴板格式为Word 2000等,并允许复制和粘贴到Word文档几乎没有任何应用程序代码树的内容。
·有一个登记的计划(RegisterVTClipboardFormat),它允许指定和实施自己的剪贴板格式的后裔。通过下拉处理程序,应用程序可以接受任何OLE格式,而派生出自己的树类。为了帮助处理的原生树的数据,采用专门的方法来实现。另请参阅:TBaseVirtualTree.ProcessOLEData和TBaseVirtualTree.ProcessDrop。
·Dropmarks显示拖放下降过程中的数据将被插入。这也与VCL拖放下降。下降目标模型已扩展为允许拖放操作上面,下面或在一个节点上。同时,供应商的其他TreeView控件已经开始使用这个小,但功能强大的主意。
·自动展开的节点超过一个可调节的时间间隔,如果启用拖放目标。
头和列:
·支持自己的头实现了多个列。这个头文件占用的空间在非客户区的树控件,并支持各种按钮样式(标准的ListView厚的按钮,平面按钮,板,Windows XP样式和所有者绘制)。
·列可以出现在树中的每一个订单窗口。
包括拥有实际的树列,每一列都可以被隐藏。
每一列都可以成为主要的列。
·可以显示列头也没有。
·列可以有不同的选项(可见,点击,调整大小,可拖动等)。
·您可以为每列设置单独的比对,以及从右到左或右的方向性(再次:也可对非中东部和较旧的Windows消费系统)。
每一列都可以有自己的颜色。
·标题和列集合类和实际的列类,支持流媒体。这是在树状视图中的流无关。
检查支持:
·在树中的每个节点都可以有自己的检查类型。这可以是复选框(三态),单选按钮或节点按钮。这些类型可以自由地进行混合,以便例如,可以有一个节点与10个节点,其中5包括一个无线电设备组(其中只有一个可以检查这些5个节点)和其他5个节点可以有一个复选框(或无校验在所有类型)。
·混合(三)复选框的子节点的局部检查,妥善处理支持(如经常使用的安装和备份程序)。
·自动型的混合复选按钮的状态变化的传播是可能的(如果已启用)。
·检查的事件OnChecking和oncheck在事件提供了。
·对于特殊用途的一个小单位“按钮可以使用,这被称为一个节点按钮。
·7种不同的支票影像是可能的。黑暗与光明的复选标记,黑暗与光明的刻度线,平支票影像,Windows XP风格的检查图像和应用程序定义的检查图像。的概述,请参阅物业TBaseVirtualTree.CheckImageKind。
设计时间:
·虚拟TreeView的属性和方法,用Delphi类别(Delphi 5或BCB 5或更高版本)的注册。
·一个特殊的属性编辑器,剪贴板格式,其中包括允许一个简单的格式选择。这是特别重要的,因为可用的剪贴板格式必须为字符串,并有一个可用的格式列表,即使他们没有启用(要知道什么可以启用),它也是非常方便。
定制:
·自定义画画周期支持通过的paint事件(对整个树的每个节点)。
·除了内置的检查类型的用户定义的检查图像,可以使用一个单独的图像的列表(TBaseVirtualTree.CustomCheckImages)支持的。
·在标题中的每个按钮可以单独绘制。
·三种不同的款式可供选择:虚线,实线和应用程序定义的线条。
·应用程序和后代可以提供自己的节点编辑器(这不一定是一个单一的控制),由处理的TBaseVirtualTree.OnCreateEditor的事件或覆盖TBaseVirtualTree.DoCreateEditor。这可以完全取代节点编辑自己的(业务)规则。
·应用程序和后代可以提供他们自己的拖放管理器界面,通过处理的TBaseVirtualTree.OnCreateDragManager事件或覆盖TBaseVirtualTree.DoCreateDragManager的。这允许自定义OLE拖放整个树的处理。注:VCL拖放下降是由VCL,所以不能自定义。
·应用程序和后代可以提供自己的数据对象接口所处理的TBaseVirtualTree.OnCreateDataObject事件或覆盖TBaseVirtualTree.DoCreateDataObject的。这可以提供自己的剪贴板格式。
·有注册的功能(RegisterVTClipboardFormat),它允许注册树的后代与自己的剪贴板和/或存储格式。应用程序可以提供自己的剪贴板格式(不派生新树类)通过处理TBaseVirtualTree.GetUserClipboardFormats活动。
·应用程序和的子孙可以完全修改树的按键处理,通过处理的TBaseVirtualTree.OnKeyAction事件或覆盖TBaseVirtualTree.DoKeyAction的。这也为渐进式搜索。
·应用程序和后代可以不覆盖的节点中,通过处理的TBaseVirtualTree.OnPaintbackground事件或覆盖TBaseVirtualTree.DoPaintbackground的自定义树的背景。对于节点有进一步的自定义事件。
·应用程序和后代可以自定义,如何缩短过长的字符串树所处理的TCustomVirtualStringTree.OnShortenString事件或覆盖TCustomVirtualStringTree.DoShortenString的标题。
滚动:
·平面滚动条的支持。但这种支持,因为它们与Windows XP冲突被关闭的编译器的符号(UseFlatScrollbars)。如果你真的想使用平面滚动条在编译前的树单元,启用此符号。
·每一个滚动操作会触发TBaseVirtualTree.OnScroll事件。这使得同步树木与其他控件。
·性能(例如TBaseVirtualTree.OffsetXY)允许滚动树不发送消息的内容在代码中的任何现在的位置。
·轮平移和滚动支持。也就是说,当单击鼠标滚轮,或按住它的同时移动鼠标周围的树窗口的滚动顺利。
流:
·复杂的树的内容序列化已经实施,让树/流的保存和恢复。这还包括用户数据,只要它可以被写入到一个流。
·虚拟树视图还允许添加的数据流,而不是更换整个内容。
·内部格式的数据流是基于块,这使得它非常灵活,为未来的改进,但仍保持与旧的实现兼容。
·有的用户块以数据写入流在TBaseVirtualTree.OnSaveNode事件的。此用户的组块的数据可以被读取在TBaseVirtualTree.OnLoadNode。
开发人员支持:
·特别小心被格式化的虚拟树形一贯的源代码。
·整个实施的很大一部分是描述的内部运作的意见。
·方法和属性,因而在其范围内按字母顺序排列的(private,protected和公众,出版)。唯一的例外是在构造函数和析构函数,它总是出现在类声明中的公共部分的顶部,总是第一个类的实现方法。
·对于每一个事件,是一个虚方法调用事件处理程序。这使得后人为了分配处理程序的每一个事件没有得到通知。这些方法的名称相对应直接由使用图案:DoEventName的事件的。
已经采取了许多措施,以确保用Borland C + + Builder的兼容性。这是特别困难的,因为从Delphi到C + +代码在BCB自动翻译的是越野车。
·为后代作家分配自己的每一个节点上的数据基础是一个简单而强大的机制。只需拨打TBaseVirtualTree.AllocateInternalData注册您的需求。这将不会影响现有的或未来的应用程序代码,如果它因此使用TBaseVirtualTree.GetNodeData的用户的数据访问。
编辑:
·应用程序定义编辑器支持通过编辑链路接口。一个普通的(非Unicode)的编辑器实现。
树中的每一列是可编辑的,如果启用(见TCustomVirtualTreeOptions.SelectionOptions.toExtendedFocus)。
公用设施:
·为了您的方便,一些内部使用的功能,这是普遍关心的暴露。
·Alphablend:一个通用的程序,来混合源到目标位图使用几种不同的模式。
·DrawTextW:DrawText的API,它支持Unicode的部分实现。此方法只在Windows 95/98/Me的存根。
·ShortenString:一个通用的功能,这使得一个给定的WideString的嵌合到一个给定的空间内。这部分的Windows DrawText的API实现,但需要额外照顾从右到左对齐和作品也使用Unicode,在Windows 95/98/ME。
要求:
·德尔福6-7日,2005年,2007年,BCB 4-6,BDS 2006-2009