【问题标题】:How to change TVirtualStringTree Node Icon when that Node is expanded扩展节点时如何更改 TVirtualStringTree 节点图标
【发布时间】:2018-08-25 09:00:23
【问题描述】:

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

在 GetImageIndex 中,我看不到如何判断节点是否展开。 Kind 只在被选中时告诉我。

【问题讨论】:

    标签: delphi virtualtreeview tvirtualstringtree


    【解决方案1】:

    TBaseVirtualTree 具有Expanded 属性来检查给定节点是否展开:

    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;
    

    【讨论】:

      【解决方案2】:

      OnGetImageIndex()事件的Node: PVirtualNode;参数可以通过States属性告诉你是否展开。

      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;
      

      背景:

      来自来源(单位VirtualTrees

      TVirtualNodeState = (
        ...
        vsExpanded,          // Set if the node is expanded.
        ...
      );
      

      【讨论】:

      • 我会将节点的属性视为实现细节,对于大多数(所有?)事物,都有一种方法可以检索给定的信息。
      • 我更喜欢使用Expanded 属性,就像@ain 指出的那样,节点States 应该是一个实现细节。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多