ShellTreeView i foldery

0

Witaneczko!
moj problem polega na tym ze mam takie cuś w ShellTreeView:

C:
|
+--folder1
| |
| +--folder2
| |
| +--folder3
|
+--innefoldery
|
+--inne1

Jak Wyswietlic takie cus w Memo aby bylo w postaci:
C:\folder1
C:\folder1\folder2
C:\folder1\folder2\folder3

C:\innefoldery
C:\innefoldery\inne1

Probowalem jakos to poskladac pętelką ale nie wychodzi jesli ktos moze pomoc to zgory dzieki :) pozdrawiam

0

W ShellTreeview nie wiem jak zrobic ale mozesz uzyc polecen findfirs itp.
szuakj plikow ktore zajmuja 0 bajtow - sa to foldery, a potem tylko zapisuj znalezione nazwy do memo

0

Nieprawda, zwykły plik tez może mieć rozmiar 0. Szykaj pliku z atrybutem faDirectory.

0
procedure TreeNodeToMemo(Item: TTreeNode; Memo: TMemo; Path: string);
var
  i: Integer;
begin
  Path := Path + '' + Item.Text;
  Memo.Lines.Add(Path);
  if Item.Count > 0 then
    for i:=0 to Item.Count - 1 do
      TreeNodeToMemo(Item.Item[i], Memo, Path);
end;

TreeToMemo(ShellTreeView1.Items[0], Memo1, '');

Niestety (w tym przypadku) itemy w ShellListView są tworzone dynamicznie podczas rozwijania ich (drzewo nie jest tworzone w całości od razu) więc do memo zostanie dodane tylko to co jest widoczne (rozwinięte). Ale dla TreeView jest to dobra procka.

A szukanie z podkatalogami wygląda tak:

procedure ZnajdzPliki(Path: String);
var
  Jest: Integer;
  SR: TSearchRec;
begin
  if Path[Length(Path)] <> '' then Path := Path +'';
  Jest := FindFirst(Path + '*.*', faAnyFile, SR);
  while Jest = 0 do
  begin
    if (SR.Name <> '.') and (SR.Name <> '..') then
      if (SR.Attr and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
        ZnajdzPliki(Path + SR.Name)
      else
      begin
        //pełna nazwa pliku: Path + SR.Name np:
        Form1.Memo1.Lines.Add(Path + SR.Name);
      end;
    Jest := FindNext(SR);
  end;
  FindClose(SR);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1