![]() |
|
#2
|
|||
|
|||
![]() как вариант, может быть примерно такой подход :
Код:
Type PRec_Attr = ^TRec_Attr; //Атрибуты узла в дереве TRec_Attr = packed record FileName : string; .. и если что-то еще, что надо ... end; function ???.Tree_InsertThis_Node(NodeParent : TTreeNode; sNodeName : string; sFileName : string) : boolean; //Вставка узла : Var PRec : PRec_Attr; begin ... if NodeParent<>NIL then begin New(PRec); PRec^.FileName := sFileName; MyTree.Selected:=MyTree.Items.AddChildObject(NodeParent,sNodeName,PRec); ... ... end; end; function ???.Tree_DeleteThis_Node(Node : TTreeNode) : boolean; //Удалить узел дерева Var sFileName : string; begin Result:=false; if Assigned(Node) then begin sFileName:=Get_FileName(Node); if FileExists(sFileName) then begin //что-то делаем с файлом и др.атрибутами, если надо end; if Node.Data<>NIL then begin //освобождаем ресурсы (занятые под атрибуты узла дерева) PRec_Attr(Node.Data)^.FileName:=''; Dispose(PRec_Attr(Node.Data)); Node.Data:=NIL; end; MyTree.Items.Delete(Node); //удаляем узел Result:=true; end; end; function ???.Get_FileName(Node: TTreeNode) : string; //Прочитать имя файла (в контексте данного узла) begin Result:=''; if Assigned(Node) then begin if Node.Data<>NIL then begin Result:=Trim(PRec_Attr(Node.Data)^.FileName); end; end; end; Освободить ресурсы (если дерево уничтожается) : for i:=0 to (MyTree.Items.Count-1) do begin if MyTree.Items[i]<>NIL then begin if MyTree.Items[i].Data<>NIL then begin PRec_Attr(MyTree.Items[i].Data)^.FileName:=''; Dispose(PRec_Attr(MyTree.Items[i].Data)); MyTree.Items[i].Data:=NIL; end; end; end; |