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 г. ***************************************************** } procedureFillTreeViewWithFiles(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
;