我需要实现以下功能:给定一个指定目录,能搜索其所有子目录和文件名,并将其显示在Treeview中,即显示一个目录树。  当然用delphi提供的控件是可以实现这样的功能,可是没法定制,我现在需要自己用代码搜索,哪位能有实现方法的

解决方案 »

  1.   

    ShellTreeView可以设定起始位置啊!
      

  2.   

    需要使用递归方法来进行搜索,但是最大的问题是TreeView的Image的问题。记得在Delphi5中有一个Demo,是关于文件的图标的你可以去看看
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      findFile('d:\test\*.*');
    end;procedure TForm1.FindFile(FileName: string);
    var
      F: TSearchRec;
      Item: TListItem;
    begin
      if FindFirst(FileName,faAnyFile,F)<>0 then exit;
      Item:=Listview.items.Add;
      Item.Caption:=ExtractFilePath(FileName)+F.Name;
      if f.Attr=faDirectory then
      begin
        Item.Subitems.Add('<DIR>');
        if (f.Name<>'.') and (f.Name<>'..') then
        FindFile(ExtractFilePath(FileName)+f.Name+'\*.*');
      end;  While FindNext(F)=0 do
      begin
        Item:=Listview.items.Add;
        Item.Caption:=ExtractFilePath(FileName)+F.Name;
        if f.Attr=faDirectory then
        begin
          Item.Subitems.Add('<DIR>');
          if (f.Name<>'.') and (f.Name<>'..') then
          FindFile(ExtractFilePath(FileName)+f.Name+'\*.*');
        end;
      end;
      FindClose(F);
    end;
      

  4.   

    Item:=Listview.items.Add;  listview是什么东西,你没有声明阿,我加了一个treeview命名为listview,可是没法通过
    ,上面那一句缺少参数,能不能把完整的例子贴出来,谢谢
      

  5.   

    procedure TMyClass.DirToTreeView(ATreeView: TTreeView; ADirectory: string;
      ARoot: TTreeNode; AIncludeFiles: Boolean);
    var
      SearchRec : TSearchRec;
      ItemTemp : TTreeNode;
    begin
      with ATreeView.Items do
      try
        BeginUpdate;
        if ADirectory[Length(ADirectory)] <> '\' then
          ADirectory := ADirectory +'\';
        if FindFirst(ADirectory + '*.*', 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
              ARoot := AddChild(ARoot, SearchRec.Name);
            ItemTemp := ARoot.Parent;
            DirToTreeView(ATreeView, ADirectory + SearchRec.Name, ARoot, AIncludeFiles);
            ARoot := ItemTemp;
          end
          else if AIncludeFiles then
            if SearchRec.Name[1] <> '.' then
              AddChild(ARoot, SearchRec.Name);
          until FindNext(SearchRec) <> 0;
          FindClose(SearchRec);
        end;
      finally
        EndUpdate;
      end;
    end;
      

  6.   

    demo下面有ShellTreeView,自己修改一下拿来用就可以了.
    :)