Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Имена, пути файлов



Вернуться к списку функций
 Перевод списка файлов/каталогов из TStringList в TreeView с построением "дерева каталогов"

 Прислал: Радионов Алексей (Alx2) (Ульяновск) ( 3 июля 2002 г. )
©  Alx2
 Описание:
Иногда бывает нужно построить "дерево каталогов" по заданному списку файлов и папок (причем физически эти файлы и каталоги могут не существовать). Представляемый здесь код занимается именно этим.

 Зависимости:
sysutils, classes, comctrls

 Ограничения:
D5, D6

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Перевод списка файлов/каталогов из TStringList в TreeView с построением "дерева каталогов"

Иногда бывает нужно построить "дерево каталогов" по заданному списку файлов и папок (причем физически эти файлы и каталоги могут не существовать). Представляемый здесь код занимается именно этим.

Зависимости: sysutils, classes, comctrls
Автор:       Радионов Алексей (Alx2), alx@argo.mv.ru, ICQ:113442587, Ульяновск
Copyright:   Alx2
Дата:        3 июля 2002 г.
***************************************************************** }

procedure FillTreeViewWithFiles(TreeView1 : TTreeView; Strs : TStringList);
Var
  CachedStrs: TStringList; // CachedStrs вводится для ускорения поиска
                           // в уже готовом дереве.

  Procedure AddItem(Lev: Integer; ParentNode: TTreeNode; S: String);
    Function FindNodeWithText(AParent: TTreeNode; Const S: String): TTreeNode;
    Var
      K : Integer;
      fStr : String;
      tmpNode: TTreeNode;
    Begin
      Result := Nil;
      fStr := S + IntToStr(Integer(AParent));
      K := CachedStrs.IndexOf(fStr);
      If K > -1 Then
        Result := Pointer(CachedStrs.Objects[K])
      Else
      Begin
        If AParent <> Nil Then
          tmpNode := AParent.getFirstChild
        Else
          tmpNode := TreeView1.Items.GetFirstNode;
        While tmpNode <> Nil Do
        Begin
          If tmpNode.Text = S Then
          Begin
            Result := tmpNode;
            CachedStrs.AddObject(fStr, Pointer(tmpNode));
            break;
          End;
          tmpNode := tmpNode.getNextSibling;
        End;
      End
    End;

  Var
    prefix: String;
    ID : Integer;
    aNode : TTreeNode;
  Begin
    If S = '' Then Exit;
    ID := Pos('\', S);
    prefix := '';
    If ID > 0 Then
      prefix := Copy(S, 1, ID - 1)
    Else
    Begin
      prefix := S;
      S := '';
    End;

    aNode := FindNodeWithText(ParentNode, prefix);

    If aNode = Nil Then
    Begin
      aNode := TreeView1.Items.AddChild(ParentNode, prefix);
    End;

    AddItem(Lev + 1, aNode, Copy(S, ID + 1, Length(S)));

  End;


Var K: Integer;
Begin

  CachedStrs := TStringList.Create;
  CachedStrs.Duplicates := dupIgnore;
  CachedStrs.Sorted := True;

  Try

    TreeView1.Items.BeginUpdate;
    TreeView1.SortType := stNone;

    For K := 0 To Strs.Count - 1 Do
      AddItem(0, Nil, Strs[K]);

  Finally
    TreeView1.Items.EndUpdate;
    CachedStrs.Free;
  End;
End;

 Пример использования:
// Построим, например, "дерево каталогов" по трем файлам:
procedure TForm1.Button1Click(Sender: TObject);
Var Strs : TStringList;
begin
  Strs := TStringList.Create;
  try
   Strs.Add('D:\Program Files\Borland\Delphi6\Source\Vcl\Printers.dcu');
   Strs.Add('D:\Program Files\Borland\Delphi6\Source\Vcl\WinHelp.dcu');
   Strs.Add('C:\WINNTS\system\BORLNDMM.DLL');
   FillTreeViewWithFiles(TreeView1,Strs);
  finally
   Strs.Free;
  end;
end;


Вернуться к списку функций

Наверх ▲