获取/设置TShellListView路径/文件夹为字符串(不使用.Root)

时间:2009-06-05 00:17:38

标签: delphi delphi-2007 windows-shell tlistview

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

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

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

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

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

要将当前文件夹作为字符串,您可以访问RootFolder属性。

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

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

procedure TForm2.Button2Click(Sender: TObject);
begin
  ShellListView1.Root := 'C:\windows';
end;