刚刚买了Delphi 2010(已跳过2009),我正在努力让我的项目进行编译.但是,我正在编写一些编译Virtual Treeview 4.8.5的问题.有人可以概述一种在Delphi 2010中编译和安装Virtual Treeview的简单方法吗?
我创建了一个小的多线程应用程序,我试图将其转换为使用OmniThreadLibrary.我正在使用Virtualtreeview显示日志和状态/结果.Vst Log只有两列,记录只包含两个字符串字段(非常简单,记录中没有对象).
使用OTL附带的DEMO项目(线程池#11)我将项目更改为使用VirtualTreeview而不是列表框.当我从演示中"运行任务"时没有内存泄漏,但是如果我不止一次运行"运行任务",就会发生内存泄漏.如果我多次运行任何任务,将发生内存泄漏.如果我根本不使用VirtualTreeView,则任何时候都不会发生内存泄漏.就在我使用VST和任务运行多次时.
我确实使用FreeNode事件并清除字符串,甚至尝试使用Finalize ...
例:
procedure TFormMain.vstLogFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
LogData: PTreeLogData;
begin
LogData:=Sender.GetNodeData(Node);
if Assigned(LogData) then begin
LogData^.Msgtype := '';
LogData^.Msg := '';
end;
//Finalize(LogData^);
end;
Run Code Online (Sandbox Code Playgroud)
当一个任务多次运行时,为什么会出现内存泄漏?Delphi 2010采用FastMM4最新的Virtualtreeview和OTL
我需要修改TVirtualStringTree的焦点框的边框颜色,就像这张照片:

如何隐藏虚拟字符串树中的特定列?
我试过这段代码:
Header.Columns.Items[3].Width := -1;
Run Code Online (Sandbox Code Playgroud)
它显示列,但不显示标题标题.为什么?
我们有一个TTreeView有很多节点 - 通常有20,000个节点甚至更多.这TTreeView用于停靠接口(DevExpress Docking Library).当应用程序中的任何表单停靠或取消停靠时,可停靠表单的句柄将被更改.这在转弯结果DestroyWnd和CreateWnd过程的所有窗体和控件被调用.
在a的情况下TTreeView,DestroyWnd将节点保存到流并CreateWnd重新加载它们.在我们的具有非常大的树视图的应用程序中,这导致节点在流出和返回时的长延迟.
我的问题:如何防止这种延迟?我听说很多人都高度评价Virtual TreeView,我认为它不是后代TTreeView,它是否避免了这个问题?我们尝试过Developer Express TcxTreeView,但它来自TTreeview,所以它遇到了同样的问题.
我正在学习TVirtualStringTree使用,必须实施增量搜索.当用户输入字符时,TEdit我想将焦点节点移动到树中的第一个合格节点.
我正在阅读我能找到的所有演示和示例代码,似乎无法找到这个的起点.谁能让我开始使用伪代码或更好?
我有3列的VirtualTreeView(如果重要的话,列标题是不可见的).
当我按F2(默认键以启动编辑器)编辑节点时,它编辑第0列中的节点.如何将其切换到第1列中的编辑节点?
这个代码相当于F2键的东西:
VST.EditNode(VST.GetFirstSelected(), 1);
我想ImageList1将vtTest组件中的图像显示为叠加层.
我已经在互联网上找到了很多资源,而且在这里 - 就像这样 - 但我不能让它们都没有正常工作.
我确定我错过了一些非常微不足道的东西,但我无法弄清楚它可能是什么.
我得到了什么:
我想要的是: 
这是包含显示我的问题的基本示例的表单.
Unit1.pas
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VirtualTrees, Vcl.ImgList;
type
PMyVtTestData = ^TMyVtTestData;
TMyVtTestData = record
isLocked: Boolean;
end;
TForm1 = class(TForm)
vtTest: TVirtualStringTree;
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
procedure vtTestGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
var ImageIndex: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: …Run Code Online (Sandbox Code Playgroud) 目前我有这个代码来添加一些节点 VST
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; AObject: TDATArecord): PVirtualNode;
var
Data: PUserData;
begin
Result := AVST.AddChild(ANode);
Data := AVST.GetNodeData(Result);
AVST.ValidateNode(Result, false);
Data^.FObject := AObject;
end;
//adding node
VDT1.BeginUpdate;
try
DATArecord.name := 'nodename';
DATArecord.Visible:= False;
AddVSTStructure(VDT1, nil, DATArecord);
finally
VDT1.EndUpdate;
end;
Run Code Online (Sandbox Code Playgroud)
我想在非可见状态下添加节点,我的意思是完全不可见.
我知道我可以在添加它之后设置节点的可见性VDT1.IsVisible[Node] := boolean;但我想在树中显示之前将其设置为不可见,考虑到我添加的记录设置为DATArecord.Visible:= False;
因此,如果Datarecord.visible等于true,则添加具有可见状态的节点.如果是false,添加具有不可见状态的节点我该怎么做?
我们最近在工作中找到了一个搜索表单.它的功能是标准搜索表单的功能:在顶部的某些框中输入一些条件,点击"搜索"按钮,然后在下面的网格中显示结果.但它的功能很丑陋而且非常有限,所以我的一位同事在重新开始工作之前就重建了它.现在我想完成最后几个细节.
其中一个变化是用TListBox更强大的功能取代旧网格TVirtualStringTree.但是在这个过程中,它似乎已经破坏了一些东西:之前,如果你点击网格中的一行(给予焦点的网格)并点击Enter,相应的事件处理程序将触发并处理你的输入,打开详细视图对于所选项目.但是,在此网格中,按下Enter会导致TButton具有Default = true属性的窗体上的触发OnClick.
如何TVirtualStringTree在具有输入焦点时使优先级成为优先级,以便它在响应之前(并且最好是代替)将其发送到表单时响应用户按Enter键?