Вниз
Скачать: CL | DM;

TreeView   Найти похожие ветки 

← →
snake1977   (2004-10-22 12:52) [0]

Здравствуйте!
Делаю загрузку дерева диска в 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 Удаляет получатся еще недобавленые ветки :( ???


← →
inic ©   (2004-10-22 13:04) [1]

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


← →
snake1977   (2004-10-22 13:09) [2]

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

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


← →
NAlexey ©   (2004-10-22 13:41) [3]

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


← →
snake1977   (2004-10-22 13:51) [4]

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

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

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


← →
inic ©   (2004-10-22 14:04) [5]

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


← →
NAlexey ©   (2004-10-22 15:39) [6]

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
9-1089864424
Evgeniy_K
2004-07-15 08:07
2004.11.07
Блеск


1-1098446809
vigo
2004-10-22 16:06
2004.11.07
Операции над датами


1-1098562792
redlord
2004-10-24 00:19
2004.11.07
opendialog+multiselect


1-1098793672
dim_
2004-10-26 16:27
2004.11.07
Paint


14-1098303857
KilkennyCat
2004-10-21 00:24
2004.11.07
Мож старо, но я только сейчас увидел про писающих программеров




   Наверх