标签: virtualtreeview

Delphi,VirtualStringTree - 处理简单的文本样式(如bbcode)

什么是处理简单文本样式的最佳方式,如bbcode允许在文本内部加粗斜体等?我所做的是将文本分成几部分,每个部分都分配了样式,然后我从每个部分开始发短信Rect.Left + Canvas.TextWidth(Texts[i-1]).然而,这可能非常慢,而且我不知道如何在VirtualStringTree的情况下发布它.它具有OnBeforeItemPaint,但回调不知道列索引.然而OnBeforeCellPaint并没有公开变量来说我自己绘制的VST,因此它描绘了我的文字......

有人吗?:)

问候,米哈尔

delphi bbcode virtualtreeview

2
推荐指数
1
解决办法
2892
查看次数

如何使用TVirtualStringTree显示多行项目和"扩展"选择项?

我想创建一个类似下面的图像(我知道是使用TVirtualStringTree完成的),但我还没有找到任何关于如何实现此目的的示例代码.

任何人都知道如何在下面的示例中使用多行项目,并"展开"选择项目以显示更多行?

替代文字http://img687.imageshack.us/img687/6498/vtvexample.gif

delphi virtualtreeview

2
推荐指数
2
解决办法
6886
查看次数

是否可以在VirtualStringTree中多次显示一个对象?

我意识到我真的需要重写我的程序数据结构(不是现在,但很快,因为截止日期是星期一),因为我目前正在使用VST(VirtualStringTree)来存储我的数据.

我想要实现的是一个联系人列表结构.根节点是类别,子节点是联系人.共有2个级别.

但事实是,我需要一个联系人才能在一个以上的类别中显示,但它们需要同步.特别是Checkstate.

目前,为了保持同步,我遍历整个树来查找与刚刚更改的ID具有相同ID的节点.但是当存在大量节点时,这样做非常缓慢.

所以,我想:是否可以在多个类别中显示联系对象的一个实例

注意:老实说,我并不是100%熟悉术语 - 我的意思是实例,是一个对象(或记录),所以我不必通过整个树来查找具有相同ID的联系对象.

这是一个例子:

例

如您所见,Todd Hirsch出现在测试类别和所有联系人中.但是在幕后,那些是2个PVirtualNodes,所以当我更改某个节点(如CheckState)上的属性,或节点的数据记录/类中的某个属性时,2个节点不同步.目前我可以同步它们的唯一方法是循环访问我的树,找到容纳相同联系人的所有节点,并将更改应用于它们及其数据.

总结一下:我正在寻找的是一种使用一个对象/记录的方法,并在我的树中的几个类别中显示它 - 每当一个节点被检查时,每个其他节点都包含相同的Contact对象.

我在这里有意义吗?

delphi synchronization virtualtreeview nodes data-structures

2
推荐指数
1
解决办法
642
查看次数

Delphi VirtualTreeView - 节点悬停时的自动聚焦节点

我正在将节点从一个应用程序拖到另一个应用程序.只有在我之前选择节点时,它才能正常工作.这是因为我使用GetNodeData(FocusedNode)方法收集数据.

我想以某种方式在节点悬停上自动聚焦节点.可能吗?

我正在使用VirtualTreeView v.4.8.7

delphi drag-and-drop virtualtreeview

2
推荐指数
1
解决办法
2082
查看次数

如何让 TVirtualStringTree 在禁用状态下显示图标?

我需要将目录中的文件显示到 TVirtualStringTree。所以,我使用 SHGetFileInfo 来获取文件的图标。但似乎我只能获得“正常”图标(以下屏幕截图的左侧)。如果是这样,TVirtualStringTree 可以将图标绘制为“禁用”吗?就像您禁用了 a 节点一样。请看屏幕截图:

在此处输入图片说明

更新

Soft Gems 论坛中有一个类似的帖子。我可以获得图标的矩形,然后自己绘制图标。我正在使用 TcxImageList,它可以轻松绘制“禁用”图标。我首先在 GetImageIndex 事件中分配了一个不存在的图像索引,所以我有一个空间来绘制图标。然后使用以下代码进行绘制。

procedure TfrmMain.tvSharesAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect); 
var 
  rImage: TRect; 
  OffsetLeft: Integer; 
begin 
    rImage  := ItemRect; 

    with TVirtualStringTree(Sender) do begin 
      if (toShowRoot in TreeOptions.PaintOptions) then 
        OffsetLeft := Indent * (GetNodeLevel(Node) + 1) 
      else 
        OffsetLeft := Indent * GetNodeLevel(Node); 

      Inc(rImage.Left, Margin + OffsetLeft); 
      Inc(rImage.Top, (NodeHeight[Node] - Images.Height) div 2); 
      rImage.Right  := rImage.Left + Images.Width; 
      rImage.Bottom := rImage.Top + Images.Height; 
    end; 

    // draw the …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview tvirtualstringtree

2
推荐指数
1
解决办法
3149
查看次数

是否更喜欢对GUI元素进行排序而不是对数据进行排序并让GUI显示已排序的数据?

关于排序的相关问题可能与回答这个问题有关.我已经意识到VirtualTreeView提供了它自己的排序方法,但它似乎比仅仅对数据本身进行排序并让GUI刷新更慢.

操纵GUI元素而不是它们显示的数据是否是"好习惯",为什么?

delphi sorting user-interface virtualtreeview

2
推荐指数
1
解决办法
312
查看次数

如何通过编程方式在子节点更改时自动更新父节点的CheckState?

我正在使用 Delphi XE3 和 Virtual TreeView。

我已启用 toAutoTristateTracking 选项。

当我尝试手动更改节点的检查状态时,受影响节点的检查状态也会更改。

然而,当我以编程方式做同样的事情时,例如

PNode^.CheckState := csMixedNormal;
Run Code Online (Sandbox Code Playgroud)

或者

PNode^.CheckState := csCheckedNormal;
Run Code Online (Sandbox Code Playgroud)

仅 PNode 检查状态会更改。受影响的节点不会改变其状态。为什么?

delphi virtualtreeview

2
推荐指数
1
解决办法
378
查看次数

如何从TStringList添加到VirtualTreeView?

这就是我"努力"实现的目标

我有一个生成密码的函数,然后我将其添加到TStringList中,之后我应该使用这些项填充VirtualTreeView,但是我没有运气这么做.应该如何以正确的方式完成?我还在学习,不是专业人士.

我的生成密码的功能:

function Generate(AllowUpper,AllowLower,AllowNumbers,AllowSymbols:Boolean; PassLen:Integer):String;
const
  UpperList  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  LowerList  = 'abcdefghijklmnopqrstuvwxyz';
  NumberList = '0123456789';
  SymbolList = '!#$%&/()=?@<>|{[]}\*~+#;:.-_';
var
  MyList  : String;
  Index   : Integer;
  i       : Integer;
begin
  Result:='';
  MyList:='';
   //here if the flag is set the elements are added to the main array (string) to process
   if AllowUpper   then MyList := MyList + UpperList;
   if AllowLower   then MyList := MyList + LowerList;
   if AllowNumbers then MyList := MyList + NumberList;
   if AllowSymbols then MyList := MyList + …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview

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

为什么我的程序在调用ReallocMemory后崩溃了?

我正在尝试修改VirtualTreeView以在设计模式下查看树节点中的数据.

分配节点内存是私有静态方法,因此我无法做任何事情.我正在尝试重新分配内存以匹配新的大小.

出于测试目的,我正在尝试重新分配相同数量的内存:

ReallocMemory(Node, sizeof(Node^))
Run Code Online (Sandbox Code Playgroud)

但IDE在随机迭代中挂起了大量的AV.由于我对内存分配的了解非常缺乏,我认为我忘记了一些事情.你能指点我吗?

delphi pointers memory-management delphi-7 virtualtreeview

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

虚拟字符串树中节点/行中的多个复选框/单选按钮

在虚拟字符串树中是否可以在每列中都有一个复选框(或单选按钮)?这是一张有关更多信息的图片:在此输入图像描述

我试图附加单选按钮/复选框,但只附加在节点的第一列.

delphi virtualtreeview delphi-xe2 tvirtualstringtree

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