2009-06-05 3 views
2

Delphi 2007을 사용하여 파일의 디렉터리를 표시하도록 TShellListView의 경로를 설정하고 싶습니다. 처음에는 TShellListView.Root를 사용하여 다음과 같은 루트 경로를 설정할 수 있습니다. 이 그리고 내가 원하는 디렉토리를 보여줍니다TShellListView 경로/폴더를 String으로 가져 오거나 설정하십시오 (.Root를 사용하지 않음)

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

을하지만 사용자가 백 스페이스를 사용하여 해당 디렉토리에서 멀리 탐색 내가 원래 디렉토리로 .Root을 설정하려고하면, 표시되는 디렉토리가 변경되지 않습니다. .Root는 현재 디렉토리가 아닌 쉘 이름 공간의 루트를 정의하기위한 것입니다.

또한 사용자가 (백 스페이스 등을 사용하여) 탐색하면 .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); 
+0

슬래시를 추가/제거 할 때 권장되는 해결 방법이 제대로 작동하는 것 같습니다. 기본 경로 대신 TShellListView 자손에 추가 한 새 Path 속성에 비슷한 해결 방법 코드를 추가했습니다. – Anagoge

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

내 질문보기 - 사용자가 backspace를 사용하여 해당 디렉토리에서 벗어나서 .Root를 원래 디렉토리로 다시 설정하면 표시된 디렉토리가 변경되지 않습니다. .Root는 현재 디렉토리가 아닌 쉘 이름 공간의 루트를 정의하기위한 것입니다. 현재 디렉터리를 설정하는 유일한 방법은 연결된 TShellTreeView.Path를 사용하거나 TShellListView 원본을 해킹하는 것입니다. 어느 쪽도 이상적이지 않습니다. – Anagoge

+0

미안하지만, 나는 처음에 무엇을 다른 것으로 설정했는지 테스트했다. – Vegar

관련 문제