2

TShellListViewのパスを設定して、Delphi 2007を使用してファイルのディレクトリを表示したいと思います。最初にTShellListView.Rootを使用して、次のようなルートパスを設定すると、必要なディレクトリが表示されます。

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

ただし、ユーザーがバックスペースを使用してそのディレクトリから移動し、.Rootを元のディレクトリに戻そうとしても、表示されるディレクトリは変更されません。.Rootは、現在のディレクトリではなく、シェル名前空間のルートを定義するためのもののようです。

また、ユーザーが(バックスペースなどを使用して)ナビゲートした場合、.Rootプロパティは、現在表示されているパスを反映するように更新されません。TShellTreeViewのような.Pathプロパティはありません。

TShellListViewの関連するメソッドはすべてプライベートに見えるため、TShellListViewをTShellTreeViewにリンクして、TShellTreeView.Pathを設定したり、ShellCtrls.pasをハックしたりせずに、現在のパスを文字列として取得および設定する方法が必要です。パスを取得/設定する簡単な方法がないとは信じがたいので、ここでは簡単なものが欠けていると思いますが、このコンポーネントはまったく文書化されていません。

4

2 に答える 2

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);
于 2009-06-05T18:46:04.973 に答える
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;
于 2009-06-05T11:06:18.017 に答える