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

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

TreeView


snake1977 ©   (2004-10-22 12:52:00) 

Здравствуйте!
Делаю загрузку дерева диска в treeview, для этого сделал такую вот процедуру

Procedure TForm1.LoadTree(nd:TTreeNode; Path:String);
Var td:TTreeNode;
   List:TStringList;
   i:Integer;
Begin
List:=TStringList.Create;
ScanDir(Path,'*.*',faDirectory,List,False,True);
if nd<>nil Then nd.DeleteChildren;
for i:=0 to List.Count-1 do
 Begin
   if nd=nil Then ShowProgress(i,List[i]);
   td:=TreeView1.Items.AddChild(nd,ExtractLastFilePath(List[i]));
   td.ImageIndex:=1;
   td.SelectedIndex:=0;
   TreeView1.Items.AddChild(td,'_');
 End;
List.Free;
End;

Повесил на событие OnExpanded вызов этойже процедуры, только соответсвенно казываю из какого каталога выбрать подкаталоги

В итоге получается что при нажатии на плюс напротив элемента дерева, список моргает и ничего не открывается :(
если закоментировать строку
if nd<>nil Then nd.DeleteChildren;
то все нормально появляется, за исключением естесвенно что ежели пару раз раскрыть ветку, то там и информация задвоится
:(

чего я не так сделал??
почему DeleteChildren Удаляет получатся еще недобавленые ветки :( ???


NAlexey   (2004-10-22 15:39:00) [1]

DeleteChildren удаляет всех потомков указанного нода, удаляет и освобождает занимаемую ими память.
а вот это: while nd.getFirstChild<>nil do nd.getFirstChild.delete;непонятно что делает, и может привести к неожиданным результатам.


inic   (2004-10-22 14:04:00) [2]

Не буду вдаваться в подробности, рационально ты сделал или нет. Просто отвечу на твой вопрос:
Если не ошибаюсь, TreeView1.Items.BeginUpdate, а после операций - EndUpdate


snake1977   (2004-10-22 13:51:00) [3]

я придумал как это сделать
вместо
if nd<>nil Then nd.DeleteChildren;

я вставил
if (nd<>nil) then
 Begin
  while nd.getFirstChild<>nil do nd.getFirstChild.delete;
 End;
и все заработало
только возникло мерцание дерева, когда происходит удаление/добавление

как от этого избавиться??


NAlexey   (2004-10-22 13:41:00) [4]

>snake1977   (22.10.04 12:52)  
Приводи более полный код.


snake1977   (2004-10-22 13:09:00) [5]

ноя специально добавляю ветку '_'  чтобы появлялся плюсик перед родителем, поэтому на раскрытие ветки мне надо удалить все что там есть и добавить соответсвенно.

так что onCollapsed хорошо , но при раскрытии ветки теперь есть всегда эта левая ветка '_'


inic   (2004-10-22 13:04:00) [6]

Может убрать эту строку в OnCollapsed ?


Наверх

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