Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: 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 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.034 c
1-1098340163
AntonSh
2004-10-21 10:29
2004.11.07
Строка


3-1097401586
StoneFace
2004-10-10 13:46
2004.11.07
Delphi и MS SQL Server 2000


1-1098439910
JaoDa
2004-10-22 14:11
2004.11.07
Можно ли вытащить версию exe файла?


6-1094019695
Дмитрий Ботвин
2004-09-01 10:21
2004.11.07
Загрузка файла с FTP


14-1098124208
Petia
2004-10-18 22:30
2004.11.07
Delete!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский