我想实现一个像VS.netC# 2003里的folderBrowserDialog这个控件一样的功能,要能实现在目录上新建文件夹的功能,SelectDirectory和SHBrowseForFolder 这两个函数只能选择目录,不能新建目录,我自己用ShellTreeView做一个这样的功能,但是滚动条不能自动定位到新建的这个文件上,Delphi有没有函数能直接实现这样的功能?有没有人知道?

解决方案 »

  1.   

    c#没有用过,但我知道raise控件中有一套shell比较好用,不知是否能满足要求
      

  2.   

    raize控件集里也没有啊?我找了一遍只有RzSelectFolderDialog也是只能选择,不能新建
      

  3.   

    ShellListView就是直接对windows资源管理器来进行的封装,应该能满足你的要求。
      

  4.   

    你能在ShellListView上新建文件夹,并让滚动条滚动,焦点置到新建的文件夹上吗?
      

  5.   

    ShellListView不支持在非选择状态下的右键菜单,所以不能直接用来新建文件夹什么的,但是我们可以用其它办法来现实,如自已画一个非选择状态下的右键菜单等,只是这点有点麻烦,但肯定能做到的。让滚动条滚动,焦点置到新建的文件夹上这两项要求ShellListView它本身就支持的。
      

  6.   

    没有直接的
    用Shell Control Pack吧
    很不错的http://lysoft.7u7.net
      

  7.   

    刚才忘说了,还有一个更好的办法,利用WebBrowser控件,它表面上看是个对IE浏览器的封装。
    但IE可以利用本地的文件定位来指向资源管理器。
    利用如下的代码self.WebBrowser1.Navigate('file:///c:/');就可以打开C盘了。我觉得它更适合你,因为它可以间接实现对资源管理器的调用,比ShellListView更完善,应该不会再有什么疑问了。
      

  8.   

    SHBrowseForFolder里可以新建目录。
      

  9.   

    xxx.ulFlags:=BIF_USENEWUI or ...;
      

  10.   

    //终于做出来了,谢谢上面的sspeak() 
    procedure TForm2.Button1Click(Sender: TObject);
     var
      ppidl,ppidl2: PITEMIDLIST;
      bi: BROWSEINFO;
      ret1: Array[0..MAX_PATH - 1] of Char;
      t_dir: string;
    begin
      bi.hwndOwner := Handle;
      ppidl:=nil;
      bi.pidlRoot := ppidl;
      bi.pszDisplayName := nil;          //BIF_BROWSEINCLUDEFILES
      bi.lpszTitle := '在下列列表中选择一个文件夹,然后点击"确定"。';
      bi.ulFlags :=BIF_USENEWUI  or BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT;
      bi.lpfn := nil;
      ppidl2 := SHBrowseForFolder(bi);
      if ppidl2 <> nil then
      begin
        SHGetPathFromIDList(ppidl2, ret1);
        Form2.LEditSourcePath.Text := ret1;
      end;
    {
    if selectDirectory('请选择操作目录' ,'' ,t_dir) then
      begin
        Form2.LEditSourcePath.Text := t_dir;
      end; }
    end;