如何将文件夹目录(例如:D盘或C盘)添加为TreeView的一个节点,并让ListView与之相关联起来?

解决方案 »

  1.   

    直接用ShellTreeView和ShellListView就行了,两者可以关联。
    D6以上版本有,Samples面板。
      

  2.   

    给上面补充一点:不用ShellTreeView与ShellListView.
      

  3.   

    除了用ShellTreeView以外,没有其它办法吗?能不能先建一节点,然后把目录加进来?
      

  4.   

    很麻烦的,// 取节点的全路径
    function GetNodePath(Node: TTreeNode): string;
    var tNode: TTreeNode;
    begin
      tNode := Node;
      Result := Node.Text;
      if Copy(Result, Length(Result), 1) <> '\' then Result := Result + '\';
      while tNode.Parent <> nil do begin
        tNode := tNode.Parent;
        if Copy(tNode.Text, Length(tNode.Text), 1) <> '\' then
          Result := tNode.Text + '\' + Result
        else
          Result := tNode.Text + Result;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var tNode: TTreeNode;
    begin
      // 初始化根结点为D:\
      tNode := TreeView1.Items.Add(nil, 'd:\');
      // 添加一个空项,这样才能出现+号
      TreeView1.Items.AddChild(tNode, '');
    end;procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    var
      sr: TSearchRec;
      tNode: TTreeNode;
    begin
      // 展开时重新刷新一遍
      Node.DeleteChildren;
      if FindFirst(GetNodePath(Node)+'*.*', faAnyFile, sr) = 0 then begin
        repeat
          // 是目录的就添加
          if ((sr.Attr and faDirectory) = sr.Attr) and
             (sr.Name <> '.') and (sr.Name <> '..')
          then begin
            tNode := TreeView1.Items.AddChild(Node, sr.Name);
            TreeView1.Items.AddChild(tNode, '');
          end;
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
    end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    var
      sr: TSearchRec;
      tItem: TListItem;
    begin
      ListView1.Clear;
      if FindFirst(GetNodePath(Node)+'*.*', faAnyFile, sr) = 0 then begin
        repeat
          // 只添加文件到ListView中
          if ((sr.Attr and faDirectory) <> sr.Attr) 
          then begin
            tItem := ListView1.Items.Add;
            tItem.Caption := sr.Name;
            tItem.SubItems.Add(IntToStr(sr.Size));
            tItem.SubItems.Add(DateTimeToStr(FileDateToDateTime(sr.Time)));
          end;
        until FindNext(sr) <> 0;
        FindClose(sr);
      end;
    end;
      

  5.   

    下面的这个函数就可以了:
    procedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode; IncludeFiles:
      Boolean);
    var
      SearchRec         : TSearchRec;
      ItemTemp          : TTreeNode;
    begin
      with Tree.Items do
      try
        BeginUpdate;
        if Directory[Length(Directory)] <> '\' then Directory := Directory + '\';
        if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then
        begin
          repeat
            if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then
            begin
              if (SearchRec.Attr and faDirectory > 0) then
                Root := AddChild(Root, SearchRec.Name);
              ItemTemp := Root.Parent;
              DirToTreeView(Tree, Directory + SearchRec.Name, Root, IncludeFiles);
              Root := ItemTemp;
            end
            else if IncludeFiles then
              if SearchRec.Name[1] <> '.' then
                AddChild(Root, SearchRec.Name);
          until FindNext(SearchRec) <> 0;
          FindClose(SearchRec);
        end;
      finally
        EndUpdate;
      end;
    end;
      

  6.   

    我想知道如何在ShellTreeView中建立一个新文件夹并且让用户进行修改这个“新建文件夹”的功能代码是什么?谢谢