如何在Delphi3里调用Windows(重载)的文件夹游览对话框?(20分)

  • 主题发起人 主题发起人 草动
  • 开始时间 开始时间

草动

Unregistered / Unconfirmed
GUEST, unregistred user!

此问题提得很糟糕,在Delphi 4 中直接可用:
SelectDirectory(const Caption: string;
const Root: WideString;
out Directory: string): Boolean;
overload;
实现。
在Delphi 3 中该如何实现这一调用。
 
把D4中FileCtrl.pas里面的那个函数复制到D3中应该能够运行. 如果不行的话, 缺
什么再拷贝什么.
 
这东西delphi 2.0就有,3.0怎么就没了!
 
控件:BrowseDr
 
////////////////////////////////////////////////////////////////////////////////
// Tip 6 - display a nice directory selection dialog
// using the Explore FolderBrowser
//
// (Sample routine)
////////////////////////////////////////////////////////////////////////////////
procedure TMain.ShowExplorerDirBtnClick(Sender: TObject);
var
sDir : string ;
begin
sDir := ShellShowDirs (self.Handle);
if ( length(sDir) > 0 ) then
ShowMessage ('Directory is:' + sDir )
else
ShowMessage ('No Directory Selected.') ;
end ;
///////////////////////////////////////////////////////////////////////////////
// Name: ShellShowDirs
// Actual Work code which displays Explore Dir Browser
//
//
//////////////////////////////////////////////////////////////////////////////
function ShellShowDirs ( AHandle : HWND ): string ;
var
BrowsingInfo : TBrowseInfo ;
// BrowsingInfo;
DirPath : String ;
// char DirPath[MAX_PATH];
FolderName : string ;
// char FolderName[MAX_PATH];
pItemId : PItemIDList;
// LPITEMIDLIST ;
// ItemID;
begin

DirPath := '' ;
FolderName := '' ;
// pad the strings with blanks, they have to bedo
ne this way or
// SHBrowseForFolderA and/or SHGetPathFromIDList gpf.
DirPath := StringOfChar(' ', MAX_PATH);
FolderName := StringOfChar (' ' , MAX_PATH) ;
// handle dictates who owns the dialog which pops up.
BrowsingInfo.hwndOwner := AHandle ;
// self.Handle ;
BrowsingInfo.pszDisplayName := PChar(FolderName) ;
BrowsingInfo.lpszTitle := PAnsiChar('Johns Dir Demo') ;
BrowsingInfo.ulFlags := BIF_RETURNONLYFSDIRS
and BIF_DONTGOBELOWDOMAIN ;
BrowsingInfo.pidlRoot := nil ;
BrowsingInfo.lpfn := nil ;
// display the dialog
pItemID := SHBrowseForFolderA( BrowsingInfo );
// determine what the selection was
SHGetPathFromIDList(pItemID, PChar(DirPath));
// back to caller
result := PChar(DirPath) ;
// pItemId actually points to some memory, so free it
GlobalFreePtr(pItemID);
end;

 
多谢各位,更糟糕的是在提出问题的当天,我已经把Selectdirectory做成了
控件,但是还要多谢各位,那么分数平均分配吧!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部