【问题标题】:Get/Set TShellListView Path/Folder as String (Not Using .Root)获取/设置 TShellListView 路径/文件夹为字符串(不使用 .Root)
【发布时间】:2009-06-05 00:17:37
【问题描述】:

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

【问题讨论】:

    标签: delphi delphi-2007 windows-shell tlistview


    【解决方案1】:

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

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

    【讨论】:

    • 您建议的添加/删除斜线的解决方法似乎效果很好。我向添加到 TShellListView 后代的新 Path 属性添加了一些类似的解决方法代码,我将使用它来代替默认值。
    【解决方案2】:

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

    【讨论】:

    • 查看我的问题 - 如果用户使用退格键离开该目录并且您将 .Root 设置回原始目录,则显示的目录不会更改。看起来 .Root 是为了定义 shell 命名空间的根,而不是当前目录。我发现设置当前目录的唯一方法是使用连接的 TShellTreeView.Path 或破解 TShellListView 源 - 两者都不理想。
    • 抱歉,我只测试了将其设置为其他内容,而不是最初的设置。
    猜你喜欢
    • 2023-04-03
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多