Перевод списка файлов и каталогов из 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

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com