Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Файловая система и TREEVIEW [D5, Win95/98]


main ©   (2004-11-18 08:30:00) 

Как сделать процедуру, позволяющую просканировать заданную директорию на машине(например, 'C:\MainDir') и вывести ее содержимое в TREEVIEW (и файлы и каталоги)


Dimaxx   (2004-11-19 22:57:00) [1]

Времени не было прямую ссылу искать - инет у меня не на шару... Так что сорри!


Alx2   (2004-11-19 11:15:00) [2]

>msguns ©   (19.11.04 11:03) [11]
Вот здесь оригинал.
http://delphibase.endimus.ru/?action=viewfunc&topic=filenames&id=10257

>Dimaxx ©   (19.11.04 00:17) [9]
Зачем же так?


msguns   (2004-11-19 11:03:00) [3]

>Dimaxx ©   (19.11.04 00:17) [9]

Ужас !!! Я не об алгоритме, а о стилистике письма: ни отступов, ни комментариев. Где циклы внешние, где внутренние - хрен разберешь ! Лесоповал !!!

Сугубо ИМХО.


main   (2004-11-19 08:19:00) [4]

Большое спасибо всем!!! Буду разбираться


Dimaxx   (2004-11-19 00:17:00) [5]

Вот нарыто из своей копилки-свалки:

Перевод списка файлов/каталогов из TStringList в TreeView с построением "дерева каталогов".
Прислал:
Радионов Алексей (Alx2) (Ульяновск) ( 3 июля 2002 г. )
© Alx2
Не тестировано
Описание:

Иногда бывает нужно построить "дерево каталогов" по заданному списку файлов и папок (причем физически эти файлы и каталоги могут не существовать). Представляемый здесь код занимается именно этим.
Зависимости:

sysutils, classes, comctrls
Ограничения:

D5, D6
Исходный текст:

{ **** 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;


Amoeba   (2004-11-18 11:48:00) [6]

А еще есть (если надо что покруче и побольше) бесплатная библиотека ShellShock:
http://sourceforge.net/projects/tpshellshock/


Игорь Шевченко   (2004-11-18 11:26:00) [7]


> А можно примерчик, плиз


Program Files\Borland\Delphi\Demos\Doc\FilmanEx\*.*


Alx2   (2004-11-18 10:22:00) [8]

>main   (18.11.04 10:10)
У одного компонента есть свойство, в котором можно его соединить с другим компонентом


ЮЮ   (2004-11-18 10:17:00) [9]

TOpenDialog


main   (2004-11-18 10:10:00) [10]

Нужно реализовать что-то наподобие Проводника Виндос. В делфи есть 2 компонента: DirectoryOutline и FileList. Как их объединить в одно - чтобы показывал и директории и файлы


Anatoly Podgoretsky   (2004-11-18 09:38:00) [11]

А местный FAQ гадость?


main   (2004-11-18 09:23:00) [12]

А можно примерчик, плиз


ЮЮ   (2004-11-18 09:16:00) [13]

написанием её кода, естественно :)
FindFirst + Example - сканирование директории


Наверх

Титульная страница Поиск, карта сайта Написать письмо