Главная страница
    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.054 c
1-1098129272
Riant
2004-10-18 23:54
2004.11.07
Сохранение страниц в TWebBrowser


6-1093842961
Алексей
2004-08-30 09:16
2004.11.07
Помогите с сокетами. ClientSocket, ServerSocket


1-1098431826
newh
2004-10-22 11:57
2004.11.07
Image со скроннигом


9-1089579747
Евгений Анатольевич
2004-07-12 01:02
2004.11.07
Описание движения автомобиля


3-1097491658
Jann
2004-10-11 14:47
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский