如何使用打开对话框向选择一个文件一样选择一个目录?(100分)

  • 主题发起人 主题发起人 jwchc
  • 开始时间 开始时间
有一个控件可以作到这一点!

不知还有没人知道什么好方法!
 
使用API函数SHBrowseForFolder可以选择目录,打印机等。网上可能有此函数的
构件。
 
lmd,ahm都有,
 
//打开一个选择文件夹的对话框;
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint):Boolean;
 
一定要用选定文件对话框吗?选择文件后,用
extractpath(opendlg.filename):)
 
Blade说的对,D4已经自带了这个函数:SelectDirectory
 
用这个更好(Delphi4)
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean;
 
to delphiwolf: 奇怪,我和Blade说的不就是这个吗?
 
FileCtrl单元中有SelectDirectory()函数。
哥们已经说了。如果想要已经封装的了控件可到我主页下载:
<font size="3"><a href="http://glowing.yeah.net">delphi心得网站</a></font>
 
to cAkk:
参数不同,出来的窗更不同。
 
MS 的 API 就这个特点,同一个函数通过不同封装可以得到不同的花样。
真有趣。
 
我的程序需要用户自行设置文档目录,用类似于OPENDIALOG来设置是为了防止出错,
SelectDirectory能够做到吗?
 
当然可以,它实际上调用windows标准对话框.
 
uses ShlObj

//目录浏览函数
function BrowseFolder:string;
var
Info:TBrowseInfo;
Dir:array[0..260] of char;
ItemId:PItemIDList;
begin
with Info do
begin
hwndOwner:=self.Handle;
pidlRoot:=nil;
pszDisplayName:=nil;
lpszTitle:=csBrowseFolderInfo;
ulFlags:=0;
lpfn:=nil;
lParam:=0;
iImage:=0;
end;
ItemId:=SHBrowseForFolder(Info);
SHGetPathFromIDList(ItemId,@Dir);
Result:=string(Dir);
end;
 
感谢killgates,您的解决方案非常简便.
 
怎么回事?难道直接调用SelectDirectory函数不是更简洁吗?
killgates的函数实际上做了和SelectDirectory函数重复的工作。
 
调用SelectDirectory函数非常便利,美中不足的是界面不太漂亮;还有一个选择就
是利用win3.1组件组自已编一个也不麻烦。
 
to liuminghao: 还是奇怪!

SelectDirectory函数有两种调用格式:
function SelectDirectory(var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean; overload;

如果是用第二种格式,效果和SHBrowseForFolder一莫一样! 怎么会界面不美观呢?
界面一莫一样啊!!!!!!!!!!!!!!!!!!!!!!
 
to cAkk
第二种格式是不能新建目录的!还是用第一种好。
 
后退
顶部