0

在 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方法,似乎没有办法获得节点的完整路径。

那么如何从每个节点获取完整路径呢?

4

2 回答 2

0

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

var RelativePath := RzShellTree1.PathFromNode(Node);

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

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
于 2022-02-03T14:09:16.613 回答
0

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

于 2022-02-04T04:45:46.403 回答