标签: virtualtreeview

放大 TVVirtualStringTree

我想找到放大/缩小 TVirtualStringTree 的“最佳方式”。
“放大”是指模仿放大镜。
必须优先使用 TVirtualStringTree 控件中专门用于此的属性/方法来理解“最佳方式”。如果不存在任何方法,则提出最简单的方法,避免使用低级 API。

为了更好地解释这个问题,
以下是 TVirtualStringTree 初始状态的截图: 初始状态 http://didier.cabale.free.fr/temp/VST1.jpg
.. 这里是 TVirtualStringTree 处于通缉状态的截图: 通缉状态 http://didier.cabale.free.fr/temp/VST2.jpg

delphi zooming virtualtreeview tvirtualstringtree

4
推荐指数
1
解决办法
404
查看次数

TVirtualStringTree - 添加对象而不是记录

我有一个 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)

delphi virtualtreeview delphi-xe2 tvirtualstringtree

4
推荐指数
1
解决办法
844
查看次数

如何在TVirtualStringTree中的特殊级别绘制背景颜色

我尝试在 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)

delphi virtualtreeview tvirtualstringtree

4
推荐指数
1
解决办法
1091
查看次数

VirtualStringTree隐藏节点

是否可以隐藏VirtualStringTree中的特定节点?我正在实现"过滤"功能(VST充当带列的列表),并且我希望每次更改过滤器时都避免重新加载内容 - 相反,更快的是告诉VST不要呈现特定项目. ..任何解决方案?

delphi virtualtreeview

3
推荐指数
1
解决办法
3824
查看次数

VirtualTreeView中的IVTEditLink编辑器有多个组件

有没有办法如何在VirtualTreeView的IVTEditLink编辑器中添加多个组件?

delphi virtualtreeview

3
推荐指数
1
解决办法
1224
查看次数

Ctrl +结束TVirtualStringTree的行为

当用户按下Ctrl + End时,VirtualStringTree会垂直跳转到最后,这也很好但也是水平的.我不希望它横向走到尽头.水平滚动应该保持原样.

怎么说出来?

delphi scroll virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
289
查看次数

VirtualTreeView在C++ Builder中为UnicodeString完成

我在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更好,并且更容易,因为它清除了整个结构(如果你有更多的字符串).

c++ delphi memory-leaks c++builder virtualtreeview

3
推荐指数
1
解决办法
1069
查看次数

虚拟TreeView循环

我想浏览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)

谢谢您的帮助.

delphi delphi-7 virtualtreeview tvirtualstringtree

3
推荐指数
1
解决办法
3043
查看次数

如何从TVirtualStringTree中删除所有节点?

如何在事件处理程序中删除所有节点,包括VirtualStringTree后代,关闭包含VirtualStringTree的表单?

delphi virtualtreeview delphi-xe tvirtualstringtree

3
推荐指数
1
解决办法
916
查看次数

VirtualTreeView是否为节点的用户数据管理内存,或者我可以吗?

我开始玩VirtualTreeView,似乎从所有的Web信息和文档中,VirtualTreeView管理用户提供的数据的内存(如果有的话,记录).一个人没有New()和Dispose()任何用户数据.只需要告诉VirtualTreeView userdata的大小,并在调用GetNodeData后分配其字段值.

如果我想管理它怎么办?可以吗?我可以根据需要创建用户数据并将其添加到我自己的列表中,并且只向VirtualTreeView提供每条记录的指针而不会干扰它吗?

delphi virtualtreeview

3
推荐指数
1
解决办法
259
查看次数