Delphirus - прграммирование на delphi
   Все о delphi Delphirus - прграммирование на delphi
blocks.gif
Навигация
 

Главная
Статьи
Базы данных
Графика
Защита
Интернет
Система
Тексты
Мультимедиа
Файлы
Формы и окна
Другое
Советы
Базы данных
Графика
Интернет
Мультимедиа
Система
Тексты
Файлы
Файлы
Исходники
Компоненты
Инфо
Поиск по сайту
Обратная связь
Самое популярное
Аккаунт
Карта сайта

 
 
 

Советы по delphi \ Файловая система \ Каталоги \ Перевод списка файлов и каталогов из TStringList в TreeView с построением дерева каталогов

Перевод списка файлов и каталогов из TStringList в TreeView с построением дерева каталогов

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Перевод списка файлов/каталогов из 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 FilesBorlandDelphi6SourceVclPrinters.dcu');
    Strs.Add('D:Program FilesBorlandDelphi6SourceVclWinHelp.dcu');
    Strs.Add('C:WINNTSsystemBORLNDMM.DLL');
    FillTreeViewWithFiles(TreeView1, Strs);
  finally
    Strs.Free;
  end;
end;

Название: Перевод списка файлов и каталогов из TStringList в TreeView с построением дерева каталогов
Дата публикации: 2004-06-13 (3009 Прочтено)

 
 

 

Page generation 0.026 seconds