Перевод списка файлов и каталогов из TStringList в TreeView с построением дерева каталоговDelphi , Файловая система , ДиректорииПеревод списка файлов и каталогов из 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 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; Here is the translation of the text into Russian: Это фрагмент кода на Delphi, демонстрирующий, как заполнить TreeView-контрол с помощью списка файлов и директорий из TStringList-объекта. Код использует рекурсию для создания древовидной структуры, что полезно при представлении иерархических данных. Вот разбивка кода:
Код хорошо структурирован, автор предоставил комментарии и краткое описание каждого раздела. Однако есть несколько предложений, которые я хотел бы сделать:
Вот обновленная версия кода, включая эти предложения:
Надеюсь, это поможет! Пожалуйста, если у вас есть какие-либо дальнейшие вопросы. В статье представлен код на языке Delphi, который переводит список файлов и каталогов из TStringList в TreeView с построением дерева каталогов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Директории ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |