【问题标题】:How to get the path information from a Node in TRzShellTree?如何从TRzShellTree中的节点获取路径信息?
【发布时间】:2022-02-03 13:44:04
【问题描述】:

在 Delphi 11 Alexandria 的 Windows 10 中的 32 位 VCL 应用程序中,我有一个 TRzShellTree 控件(来自 GetIt 中流行的 Konopka Signature VCL Controls 7.0 中的 Ray Konopka)。

我遍历 TRzShellTree 控件的节点以将一些特定信息附加到每个节点的文本中,从节点的文件夹路径中检索:

for Node in RzShellTree1.Items do
begin
  //Node.FullPath? How to get the FULL PATH of the Node?
  Node.Text := Node.Text + GetNodeInfoFromNodePath(Node);
end;

但是,我需要每个节点的完整路径来获取该信息。查看TRzShellTree的方法,似乎没有办法获取节点的完整路径。

那么我怎样才能得到每个节点的完整路径呢?

【问题讨论】:

    标签: delphi delphi-11-alexandria


    【解决方案1】:

    有一种方法可以从节点获取相对路径:

    var RelativePath := RzShellTree1.PathFromNode(Node);
    

    然后,您可以通过从RzShellTree1.BaseFolder 属性中提取BaseFolder 路径来轻松获取每个节点的完整路径。但是怎么做呢? TRzShellTree.BaseFolder 属性的类型为 TRzShellLocator。然后,您可以将来自RzShellTree1.BaseFolder.PathName 的路径与RelativePath 变量连接起来以获取节点的完整路径:

    var ThisBasePath := System.SysUtils.IncludeTrailingPathDelimiter(ExtractFilePath(RzShellTree1.BaseFolder.PathName));
    for Node in RzShellTree1.Items do
    begin
      var ThisNodeRelativePath := RzShellTree1.PathFromNode(Node);
      var ThisNodeFullPath := ThisBasePath + ThisNodeRelativePath;
      if System.SysUtils.DirectoryExists(ThisNodeFullPath) then
        CodeSite.Send('ThisNodeFullPath', ThisNodeFullPath);
    end;
    

    但是,如果您更改此循环内的Node.Text,则树中的嵌套子文件夹将从DirectoryExists 条件中排除,因为TRzShellTree 显然是从树下的节点计算PathFromNode。在这种情况下,最好使用向下循环:

    for var i := RzShellTree1.Items.Count - 1 downto 1 do
    

    【讨论】:

      【解决方案2】:

      我不太确定您要通过修改每个文件的节点文本来完成什么。 TRzShellTree(和 TRzShellList)控件提供对 Windows Shell 空间的访问。节点代表该空间中的项目。听起来您几乎想要一个标准的树视图控件,您只需使用指定目录中的文件填充它。使用 System.IOUtils 功能迭代您感兴趣的文件并手动填充树视图可能会更好。然后,您将能够以您想要的方式填充每个节点。 TRzShellTree(和 TRzShellList)旨在模仿 Windows 资源管理器的功能并提供这些控件支持的文件操作。

      【讨论】:

      • Ray,我在应用程序中使用TRzShellTree 有一个特殊目的:向用户显示每个文件夹中特定文件的数量:screencast.com/t/Q6qM9DoX
      • 从这个意义上说,独立于Node.Text的节点获取路径信息会很有用。
      • 幸运的是,我现在找到了一种方法,可以使用以下代码独立于其Node.Text 获取所选节点的完整路径:screencast.com/t/Ir8GpZDLF4JO
      • 或者,更缩写的形式:screencast.com/t/Yefhon0S11
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      相关资源
      最近更新 更多