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

发布于 2024-07-23 09:54:24 字数 597 浏览 10 评论 0原文

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

I want to set the path for a TShellListView to display a directory of files using Delphi 2007. I can initially use TShellListView.Root to set the root path like this and it shows the directory I want:

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

But if the user navigates away from that directory using backspace and I try to set the .Root back to the original directory, the directory displayed does not change. It looks like .Root is meant to define the root of the shell namespace, not the current directory.

Also, if the user navigates around (using backspace, etc.) the .Root property does not update to reflect the currently displayed path. There is no .Path property like there is for TShellTreeView.

What I want is a way to get and set the current path as a string without being required to link the TShellListView to a TShellTreeView and set TShellTreeView.Path or hack ShellCtrls.pas since the relevant methods of TShellListView all look private. I find it hard to believe there isn't a straightforward way to get/set the path, so I assume I'm missing something simple here, but this component is not documented at all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星星的軌跡 2024-07-30 09:54:24

获取当前加载的路径

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);

You can get the currently loaded path using

ShellListView1.RootFolder.PathName

Setting the Root property works, but it isn't updated when you change folders interactively. So you need to force it to think there's a change. This works if you're always resetting it to the same original path:

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

Alternatively, for arbitrary paths you could just add/remove the trailing \ in order to fool the SameText check in SetRoot:

if ShellListView1.Root[Length(ShellListView1.Root)] = '\' then
  ShellListView1.Root := ExcludeTrailingPathDelimiter(ANewPath)
else
  ShellListView1.Root := IncludeTrailingPathDelimiter(ANewPath);
走野 2024-07-30 09:54:24

要以字符串形式获取当前文件夹,您可以访问 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;

To get the current folder as a string, you can access the RootFolder-property.

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

To set the current folder as a string, you use the root-property.

procedure TForm2.Button2Click(Sender: TObject);
begin
  ShellListView1.Root := 'C:\windows';
end;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文