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

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

TreeView из списка Файлов [Delphi, Windows]


Страницы:   1 2

QAZ ©   (2009-05-12 12:38:00) 

есть несортированый список файлов с путями
имено готовый список, а не поиск по папкам
как по списку построить дерево?
есть решение на VCL http://www.delphisources.ru/pages/faq/base/sl_to_dir_tree.html
помогите пожалуйста перевести в кол
или может есть у кого готовое уже


QAZ   (2009-05-26 19:01:00) [21]

спасибо, не помогло :)


exero   (2009-05-26 18:03:00) [22]

Я думаю с "переводом" любой гугл справится. А что касается советов - они бывают двух видов "спасибо, помогло" или "нет не помогло, давайте еще подумаем"...


QAZ   (2009-05-26 17:17:00) [23]


> "Вам шашечки или ехать?"

переведи


exero   (2009-05-26 11:14:00) [24]

"Вам шашечки или ехать?"


QAZ   (2009-05-26 10:48:00) [25]


> Ставь FastMM4

совет ниочем
причом тут смена менеджера память ?
если тормозит конкретно коловский вариант алгоритма,а
оба они используют стандартный менеджер


exero   (2009-05-25 11:39:00) [26]

Ставь FastMM4 и будут пузомерки работать примерно одинаково.


QAZ   (2009-05-25 11:38:00) [27]

кстати !!! а какова? просто добавление итемов у ВКЛ медленей чем ВКЛьная версия FillTreeViewWithFiles ???


QAZ   (2009-05-25 11:32:00) [28]

хм простая конструкция типа
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
   debug:cardinal;
begin
debug:=gettickcount;
 for i := 0 to 10000 do
 begin
 TV.Items.AddChild(nil,'Item' +  InttoStr( i ));
 //TV.TVInsert( 0, 0, 'Item' +  Int2Str( i ) );
 end;
form1.Caption:=inttostr(gettickcount-debug);
//form.Caption:=int2str(gettickcount-debug);
end;


показывает
КОЛ=13672 мс
ВКЛ=11265 мс
что просто работа с деревом "почти" одинакова
тогда где тормоз который дает 6 кратный разнос ???


QAZ   (2009-05-25 10:46:00) [29]

не знаю точтоли я перевел ВКЛьный вариант с CachedStrs, тем не менее работает ,но скорость всего лиш 36 против 50
походу в даном случае CachedStrs особо не при делах,а просто
ВКЛ имеет по полной КОЛ в плане скорости

procedure FillTreeViewWithFiles(TreeView1: PControl; Strs: PStrListEX);
var
 CachedStrs: PStrListEX; // CachedStrs

 procedure AddItem(Lev: Integer; ParentNode: Cardinal; S: string);
   function FindNodeWithText(AParent: Cardinal; const S: string): Cardinal;
   var
     K: Integer;
     fStr: string;
     tmpNode: Cardinal;
   begin
     Result := 0;
     fStr := S + Int2Str(AParent);
     K := CachedStrs.IndexOf(fStr);
     if K > -1 then
       Result := CachedStrs.Objects[K]
     else
     begin
       if AParent <> 0 then
         tmpNode := TreeView1.TVItemChild[AParent]
       else
         tmpNode := TreeView1.TVRoot;
       while tmpNode <> 0 do
       begin
         if TreeView1.TVItemText[tmpNode] = S then
         begin
           Result := tmpNode;
           CachedStrs.AddObject(fStr, tmpNode);
           break;
         end;
         tmpNode := TreeView1.TVItemNext[tmpNode];
       end;
     end
   end;

 var
   prefix: string;
   ID: Integer;
   aNode: Cardinal;
 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 = 0 then
   begin
     aNode := TreeView1.TVInsert(ParentNode,TVI_LAST,prefix);
   end;

   AddItem(Lev + 1, aNode, Copy(S, ID + 1, Length(S)));

 end;

var
 K: Integer;
begin
 CachedStrs := NewStrListEx;
 try
   for K := 0 to Strs.Count - 1 do AddItem(0, 0, Strs.Items[K]);
 finally
   CachedStrs.Free;
 end;
end;


QAZ   (2009-05-22 11:11:00) [30]

хм а ВКЛьный вариант в 6 раз быстрее !!! 8,6 секунд против 50 при списке из 10000 файлов
так что зря Дмитрий К исключил CachedStrs из алгоритма :(


QAZ   (2009-05-13 12:11:00) [31]

пасиба


Дмитрий К   (2009-05-12 19:33:00) [32]

program Project1;

uses
 KOL;

procedure FillTVWithFL(TV: PControl; FL: PStrList);
 function ItemIndex(Parent: Cardinal; ItemName: string): Cardinal;
 var Item: Cardinal;
 begin
   Result := 0;
   Item := TV.TVItemChild[Parent];
   while Item <> 0 do
   begin
     if AnsiCompareStrNoCase(TV.TVItemText[Item], ItemName) = 0 then
     begin
       Result := Item;
       Break;
     end;
     Item := TV.TVItemNext[Item];
   end;
 end;

var
 i: Integer;
 s, s1: string;
 Parent, Item: Cardinal;
begin
 for i := 0 to FL.Count - 1 do
 begin
   s := FL.Items[i];
   s1 := Parse(s, '\');
   Parent := TVI_ROOT;
   while s1 <> '' do
   begin
     Item := ItemIndex(Parent, s1);
     if Item = 0 then
       Parent := TV.TVInsert(Parent, TVI_SORT, s1)
     else
       Parent := Item;
     s1 := Parse(s, '\');
   end;
 end;
end;

var
 Form, TV: PControl;
 SL: PStrList;
begin
 Form := NewForm(nil, 'TV');
 TV := NewTreeView(Form, [], nil, nil).SetAlign(caLeft);
 SL := NewStrList;
 SL.Add('D:\Program Files\Borland\Delphi6\Source\Vcl\Printers.dcu');
 SL.Add('D:\Program Files\Borland\Delphi6\Source\Vcl\WinHelp.dcu');
 SL.Add('C:\WINNTS\system\BORLNDMM.DLL');
 FillTVWithFL(TV, SL);
 SL.Free;
 Run(Form);
end.


Страницы:   1 2

Наверх

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