Тема: TreeView)))
Показать сообщение отдельно
  #2  
Старый 13.05.2009, 15:34
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

как вариант, может быть примерно такой подход :

Код:
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;


Ответить с цитированием