我想设置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的相关方法都看起来是私有的。我发现很难相信没有一种简单的方法来获取/设置路径,所以我假设我在这里缺少一些简单的东西,但是这个组件根本没有记录。
答案 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;