2

我想设置 TShellListView 的路径以使用 Delphi 2007 显示文件目录。我最初可以使用 TShellListView.Root 来设置这样的根路径,它显示了我想要的目录:

View := TShellListView.Create(Self);
// ...
View.Root := 'C:\Windows';

但是,如果用户使用退格键离开该目录并且我尝试将 .Root 设置回原始目录,则显示的目录不会改变。看起来 .Root 是为了定义 shell 命名空间的根,而不是当前目录。

此外,如果用户四处导航(使用退格等),.Root 属性不会更新以反映当前显示的路径。没有像 TShellTreeView 那样的 .Path 属性。

我想要的是一种获取当前路径并将其设置为字符串的方法,而无需将 TShellListView 链接到 TShellTreeView 并设置 TShellTreeView.Path 或破解 ShellCtrls.pas,因为 TShellListView 的相关方法看起来都是私有的。我很难相信没有一种简单的方法来获取/设置路径,所以我假设我在这里遗漏了一些简单的东西,但是这个组件根本没有记录。

4

2 回答 2

3

您可以使用获取当前加载的路径

ShellListView1.RootFolder.PathName

设置 Root 属性有效,但是当您以交互方式更改文件夹时它不会更新。所以你需要强迫它认为有变化。如果您始终将其重置为相同的原始路径,则此方法有效:

ShellListView1.Root := View.RootFolder.PathName; // Updates to current location
ShellListView1.Root := 'C:\Windows';

或者,对于任意路径,您可以添加/删除尾随 \ 以欺骗 SetRoot 中的 SameText 检查:

if ShellListView1.Root[Length(ShellListView1.Root)] = '\' then
  ShellListView1.Root := ExcludeTrailingPathDelimiter(ANewPath)
else
  ShellListView1.Root := IncludeTrailingPathDelimiter(ANewPath);
于 2009-06-05T18:46:04.973 回答
1

要将当前文件夹作为字符串获取,您可以访问 RootFolder-property。

procedure TForm2.Button1Click(Sender: TObject);
begin
  showmessage(ShellListView1.RootFolder.PathName);
end;

要将当前文件夹设置为字符串,请使用 root-property。

procedure TForm2.Button2Click(Sender: TObject);
begin
  ShellListView1.Root := 'C:\windows';
end;
于 2009-06-05T11:06:18.017 回答