2009-06-05 9 views
2

Delphi 2007を使用してファイルのディレクトリを表示するTShellListViewのパスを設定したいと思います。まず、TShellListView.Rootを使用して、これは、それは私がしたいディレクトリを示しています。TShellListViewのパス/フォルダを文字列として取得/設定します(.Rootを使用しない)

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

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

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

私が欲しいのは、TShellListViewをTShellTreeViewにリンクしたり、TShellListViewの関連するメソッドがすべて非公開になっているので、TShellTreeView.PathまたはHack ShellCtrls.pasを設定する必要がなく、現在のパスを取得して文字列として設定する方法です。パスを取得/設定する簡単な方法がないと信じるのは難しいので、ここでは単純なものがないと思いますが、このコンポーネントはまったく文書化されていません。

答えて

3

あなたはRootプロパティの動作を設定する

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

スラッシュを追加/削除するための推奨される回避策はうまくいくようです。私は、デフォルトの場所の代わりに使用するTShellListView子孫に追加した新しいPathプロパティに、同様の回避コードを追加しました。 – Anagoge

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; 
+0

私の質問を参照してください - ユーザーがbackspaceを使用してそのディレクトリから移動し、.Rootを元のディレクトリに戻した場合、表示されるディレクトリは変更されません。 .Rootは、現在のディレクトリではなく、シェル名前空間のルートを定義するためのものです。私が現在のディレクトリを設定するために見つけた唯一の方法は、接続されたTShellTreeView.Pathを使用するか、TShellListViewソースをハックすることです。どちらも理想的です。 – Anagoge

+0

申し訳ありませんが、私はそれを何か他のものに設定してテストしただけです。 – Vegar

関連する問題