Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.048 c
9-1089442145
1@@@@@1
2004-07-10 10:49
2004.11.07
Collision не работает


14-1097569058
peypivo
2004-10-12 12:17
2004.11.07
Мои соболезнования ...


1-1098428606
Arnold
2004-10-22 11:03
2004.11.07
Как программно выделить нужную ячейку в StringGride?


14-1097895529
080D:07BBh
2004-10-16 06:58
2004.11.07
На форуме осенее обострение что ли?


14-1097224619
123
2004-10-08 12:36
2004.11.07
Про футбол.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский