Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.037 c