Delphi 展开TVirtualStringTree节点时如何更改该节点图标

Delphi 展开TVirtualStringTree节点时如何更改该节点图标,delphi,virtualtreeview,tvirtualstringtree,Delphi,Virtualtreeview,Tvirtualstringtree,这听起来像个愚蠢的问题,但我已经尝试了我能想到的一切,但没有成功。展开VirtualStringTree节点时,如何更改该节点的图标图像。i、 e.当节点折叠时,我想显示一个关闭的文件夹图标,当其展开时,我想显示一个打开的文件夹图标 在GetImageIndex中,我看不到如何判断节点是否已展开。“种类”仅在选择它时告诉我。TBaseVirtualTree具有展开的属性,用于检查给定节点是否展开: procedure TForm1.VTGetImageIndex(Sender: TBaseVir

这听起来像个愚蠢的问题,但我已经尝试了我能想到的一切,但没有成功。展开VirtualStringTree节点时,如何更改该节点的图标图像。i、 e.当节点折叠时,我想显示一个关闭的文件夹图标,当其展开时,我想显示一个打开的文件夹图标


在GetImageIndex中,我看不到如何判断节点是否已展开。“种类”仅在选择它时告诉我。

TBaseVirtualTree具有
展开的
属性,用于检查给定节点是否展开:

procedure TForm1.VTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
          Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
begin
  if Sender.Expanded[Node] then begin
     ...
  end;
end;

节点:PVirtualNodeOnGetImageIndex()
事件的code>参数可以通过它告诉您
状态
属性是否已展开

procedure TForm1.VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex);
begin
  if vsExpanded in Node.States then
    // select image as needed
  ...
end;
背景:

从源(单元
虚拟树


我认为节点的属性是一个实现细节,对于大多数(所有的)事物,有一种方法是用来检索给定的信息。我宁愿使用<代码>扩展属性,就像“AIN指出”,节点<代码>状态> />代码应该是一个实现细节。
TVirtualNodeState = (
  ...
  vsExpanded,          // Set if the node is expanded.
  ...
);