Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** 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
;
Пример использования:
// Построим, например, "дерево каталогов" по трем файлам: procedureTForm1.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
;