![]() |
1
1
您可能不应该切换到VST,除非您至少使用了标准列表框/列表视图不具备的VST的一些好功能。当然,与简单的项目列表相比,内存开销很大。
我看不到真正的好处在使用
但是您可以很容易地实现这一点,而不需要更改项目计数。如果你设置
编辑: 抱歉,我完全忽略了您现在使用的是列表视图,而不是列表框。事实上,在ListView中没有不同高度的行,所以这是没有选择的。您仍然可以使用一个顶部带有标准头控件的列表框,但这可能不支持您现在从ListView功能中使用的所有内容,而且与其动态显示和隐藏ListView行以模拟折叠和展开,还不如使用更多的工作来纠正错误。 |
![]() |
2
1
如果我理解正确,记忆的需求
节点计数*(sizeof(tvirtualnode)+yournodedatasize+dword对齐填充) 为了尽量减少内存占用,您可以使用指向内存映射文件偏移量的指针初始化节点。在这种情况下,重置已经初始化的节点似乎不需要-内存占用应该是nodecount*(44+4+0)-对于500万条记录,大约230MB。 imho您无法更好地使用树,但使用内存映射文件将允许您直接从文件中读取数据,而无需分配更多的内存并将数据复制到该文件中。 您还可以考虑使用树结构而不是平面视图来显示数据。这样,您就可以根据需要初始化父节点的子节点(当父节点展开时),并在父节点折叠时重置父节点(因此释放其所有子节点)。换句话说,尽量不要在同一级别有太多的节点。 |
![]() |
3
1
满足你的要求 “展开/折叠跨多行的记录” 我只需要使用一个网格。若要检查它,请将DrawGrid拖到表单上,然后插入以下Delphi6代码。您可以折叠和扩展5000000条多行记录(或者您想要的任何数量),基本上没有开销。这是一种简单的技术,不需要太多代码,而且工作得非常好。
|
![]() |
4
0
您不应该使用resetnode,因为此方法调用invalidatenode并再次初始化节点,从而产生与预期相反的效果。 我不知道是否可以在不实际删除节点的情况下诱导vst释放nodedatasize中指定的内存大小。但是为什么不把nodedatasize设置为指针的大小呢( Delphi, VirtualStringTree - classes (objects) instead of records )自己管理数据?只是一个想法… |
![]() |
5
0
尝试“删除子项”。以下是该程序的注释:
从未使用过它,但在我阅读它时,您可以在oncollapsed事件中使用它来释放分配给刚刚变为不可见的节点的内存。然后在一次扩展中重新生成这些节点,这样用户就永远不会知道节点离开了内存。 但我不能确定,我从来就不需要这样的行为。 |
![]() |
Some1Else · 函数在Delphi中重新创建TForm 3 年前 |
![]() |
Agmcz · Delphi安卓库。so未安装(AAB) 3 年前 |
![]() |
nader · 如何使用delphi在web上提交表单 7 年前 |
![]() |
kwadratens · Delphi中的卡方分布函数代码 7 年前 |
|
user9672569 · 如何在完整的位图图像中绘制阴影效果? 7 年前 |
![]() |
mmmm · MSBuild(用于Delphi)Make-like功能 7 年前 |