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プロパティのタイプはですTRzShellLocatorRzShellTree1.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ため、ツリー内のネストされたサブフォルダーは条件から除外されます。この場合、下向きのループを使用することをお勧めします。TRzShellTreePathFromNode

for var i := RzShellTree1.Items.Count - 1 downto 1 do
于 2022-02-03T14:09:16.613 に答える