2009-06-05 31 views
2

我想设置一个TShellListView的路径来显示使用Delphi 2007的文件的目录。我可以最初使用TShellListView.Root来设置根路径这一点,它显示了我想要的目录:获取/设置TShellListView作为字符串的路径/文件夹(不使用.Root)

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

但是,如果用户使用退格键从该目录导航离开,我尝试设置.Root回原来的目录,显示该目录不会改变。它看起来像.Root是为了定义shell命名空间的根,而不是当前目录。另外,如果用户导航(使用退格等),则.Root属性不会更新以反映当前显示的路径。没有像TShellTreeView那样的.Path属性。

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

回答

3

你可以使用

ShellListView1.RootFolder.PathName 

设置根属性工程当前已加载的路径,但是,当你更改文件夹交互它不会被更新。所以你需要强制它认为有一个变化。这个工作,如果你总是重置为相同的原始路径:

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

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

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

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

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

查看我的问题 - 如果用户使用退格离开该目录并将.Root设置回原始目录,则显示的目录不会更改。它看起来像.Root是为了定义shell命名空间的根,而不是当前目录。我发现设置当前目录的唯一方法是使用连接的TShellTreeView.Path或破解TShellListView源代码 - 既不是理想的。 – Anagoge 2009-06-05 16:24:47

+0

对不起,我只测试过将它设置为其他东西,然后它最初是什么。 – Vegar 2009-06-06 08:41:06

相关问题