我想找到放大/缩小 TVirtualStringTree 的“最佳方式”。
“放大”是指模仿放大镜。
必须优先使用 TVirtualStringTree 控件中专门用于此的属性/方法来理解“最佳方式”。如果不存在任何方法,则提出最简单的方法,避免使用低级 API。
为了更好地解释这个问题,
以下是 TVirtualStringTree 初始状态的截图:
初始状态 http://didier.cabale.free.fr/temp/VST1.jpg。
.. 这里是 TVirtualStringTree 处于通缉状态的截图:
通缉状态 http://didier.cabale.free.fr/temp/VST2.jpg
我有一个 TVirtualStringTree(版本 5.2.2),我需要添加它的节点对象而不是记录。
我已经看过这个问题的答案: Delphi,VirtualStringTree - 类(对象)而不是记录,但它们不起作用。
我想添加到树节点的对象就像
TNodeElem = class
public
LineTimeS, LogMessage, MethName: String;
LineDate,LineTime: TDateTime;
LineDateTime: TDateTime;
ElemType: TLogLineType;//ordinal type
....
end;
Run Code Online (Sandbox Code Playgroud)
这些节点被添加到 TObjectList 中:
FObjLst.Add(lNode);
Run Code Online (Sandbox Code Playgroud)
并添加到树中:
var iPos: Integer;
lNode: PVirtualNode;
ldata: TNodeElem;
begin
FTreeView.BeginUpdate;
for iPos := 0 to FObjLst.Count -1 do
begin
lNode := FTreeView.AddChild(nil);
lData := TNodeElem(FObjLst[iPos]);
FTreeView.getNodeData(lNode)^ := lData;//E2015 Operator not aplicable to this operand type
FTreeView.ValidateNode(lNode,False);
end;
FTreeView.EndUpdate;
end;
procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType; var CellText: …Run Code Online (Sandbox Code Playgroud) 我尝试在 VirtualStringTree 的所有特殊级别中使用背景颜色绘制高线文本。它看起来像是所有同一级别的选定节点。下面的代码不起作用。请有人给个方向。
procedure TMainForm.Tree1PaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
var Data: PNodeData;LEVEL:INTEGER; tree1node,tree4Node: PVirtualNode;
begin
Data := Tree1.GetNodeData(Node);
Level := tree1.GetNodeLevel(node);
case column of
0:begin
if Level = 0 then BEGIN
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
TargetCanvas.Font.Color :=CLyellow;
targetcanvas.Brush.Color :=clgreen;//don't work
targetcanvas.Brush.Style :=bssolid;
END;
if Level = 1 then BEGIN
TargetCanvas.Font.Color :=CLaqua;
targetcanvas.Brush.Color :=clgreen;
end;
end;
Run Code Online (Sandbox Code Playgroud) 是否可以隐藏VirtualStringTree中的特定节点?我正在实现"过滤"功能(VST充当带列的列表),并且我希望每次更改过滤器时都避免重新加载内容 - 相反,更快的是告诉VST不要呈现特定项目. ..任何解决方案?
有没有办法如何在VirtualTreeView的IVTEditLink编辑器中添加多个组件?
当用户按下Ctrl + End时,VirtualStringTree会垂直跳转到最后,这也很好但也是水平的.我不希望它横向走到尽头.水平滚动应该保持原样.
怎么说出来?
我在C++ Builder中使用VirtualTreeView并使用它的结构如下:
struct TVTNodeData
{
int Index;
UnicodeString Caption;
}
Run Code Online (Sandbox Code Playgroud)
我使用具有以下内容的循环预填充树的节点:
TVirtualNode *Node = VTree->AddChild(NULL);
pNode = (TVTNodeData *)VTree->GetNodeData(Node);
pNode->Index = 1;
pNode->Caption = "Whatever";
Run Code Online (Sandbox Code Playgroud)
我注意到应用程序的内存不断增加(内存泄漏),即使我清除树并重新加载它.此页面 - http://www.remkoweijnen.nl/blog/2010/06/09/memory-leaks-when-using-virtual-treeview-component/建议在OnFreeNode事件中执行Finalize().目前很好.
但是C++中没有Finalize().我pNode->Caption=""在OnFreeNode事件中尝试过并且内存不再被大量分配,但它仍然有点.我认为即使它被清空也可能会引用UnicodeString(引用计数> 0).
如何OnFreeNode在C++中为UnicodeString 释放节点数据?我知道UnicodeString是在所有引用计数为零之前分配的 - 那么如何强制引用计数变为零?
另外,如果节点被分配了OnNodeInit- 在OnFreeNode事件中同样适用吗?
如果TVTNodeData结构纯粹是虚拟的 - 节点永远不可见也不会使用AddChild和OnNodeInit初始化,那么需要Finalize,结构是否甚至存在于内存中呢?
更新:我后来发现我正在错误地测量内存使用情况,而对于将字符串设置为空字符串的字符串来说,它确实足以清除内存数据.但是 - 正如Rob Kennedy在下面的回答中所建议的那样,调用struct~destructor甚至比Finalize更好,并且更容易,因为它清除了整个结构(如果你有更多的字符串).
我想浏览VirtualTreeView的所有根并删除它们.
我不想清除它.
我使用此代码获取访问冲突:
var
Node : PVirtualNode;
begin
if VirtualStringTree1.GetFirst = NIL then exit;
Node := NIL;
repeat
if Node = NIL then
Node := VirtualStringTree1.GetLast
else Node:=VirtualStringTree1.GetPrevious (Node);
if Node <> NIL then VirtualStringTree1.DeleteNode(Node);
until Node = VirtualStringTree1.GetFirst;
end;
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
如何在事件处理程序中删除所有节点,包括VirtualStringTree后代,关闭包含VirtualStringTree的表单?
我开始玩VirtualTreeView,似乎从所有的Web信息和文档中,VirtualTreeView管理用户提供的数据的内存(如果有的话,记录).一个人没有New()和Dispose()任何用户数据.只需要告诉VirtualTreeView userdata的大小,并在调用GetNodeData后分配其字段值.
如果我想管理它怎么办?可以吗?我可以根据需要创建用户数据并将其添加到我自己的列表中,并且只向VirtualTreeView提供每条记录的指针而不会干扰它吗?
delphi ×10
virtualtreeview ×10
c++ ×1
c++builder ×1
delphi-7 ×1
delphi-xe ×1
delphi-xe2 ×1
memory-leaks ×1
scroll ×1
zooming ×1