Delphi开启Windows目录对话框代码

本文介绍了一种在Delphi中调用标准Windows目录对话框的方法,该方法简化了目录选择流程并提升了用户体验。文章提供了完整的源代码示例,帮助Delphi开发者快速实现目录浏览功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

今天整理以往的项目代码,发现自己以前在网上找到的一段delphi开启windows目录对话框的代码,觉得对许多delphi初学者很有用,特转贴出来。由于时间过久已经无法知道是从什么地方摘录的,在此特向原作者表示感谢!

windows目录对话框是一个标准的windowsui控件,其可以列出一个目录列表,并且可以显示新增按钮。由于delphi中并没有提供对于该控件的封装,所以新手(包括当年的我)大多使用win31目录下的driverlist、directorylist、filelist和filefilterlist四个控件进行组合来获取当前目录,这样操作复杂且不美观。有的高手可以直接用windowsapi调用windows目录对话框,但我确直到找到该段代码前还是使用最原始的方法{叹自己的懒惰呀!}

该段代码分为两个部分:(1)控件代码 (2)调用代码

(1)控件代码:由于该控件没有封装成delphi控件格式,其使用方法有些原始,就是将它的源文件browseforfolderu.pas复制到当前项目目录并添加到当前项目中。代码如下{是别人高手写的,致敬呀......}

unit browseforfolderu;

interface

function browseforfolder(const browsetitle: string;

const initialfolder: string = ''): string;

implementation

uses windows, shlobj;

var

lg_startfolder: string;

///////////////////////////////////////////////////////////////////

// call back function used to set the initial browse directory.

///////////////////////////////////////////////////////////////////

function browseforfoldercallback(wnd: hwnd; umsg: uint;

lparam, lpdata: lparam): integer stdcall;

begin

if umsg = bffm_initialized then

sendmessage(wnd,bffm_setselection,1,integer(@lg_startfolder[1]));

result := 0;

end;

///////////////////////////////////////////////////////////////////

// this function allows the user to browse for a folder

//

// arguments:-

// browsetitle : the title to display on the browse dialog.

// initialfolder : optional argument. use to specify the folder

// initially selected when the dialog opens.

//

// returns: the empty string if no folder was selected (i.e. if the

// user clicked cancel), otherwise the full folder path.

///////////////////////////////////////////////////////////////////

function browseforfolder(const browsetitle: string;

const initialfolder: string =''): string;

const

bif_newdialogstyle = $40;

var

browse_info: tbrowseinfo;

folder: array[0..max_path] of char;

find_context: pitemidlist;

begin

fillchar(browse_info,sizeof(browse_info),#0);

lg_startfolder := initialfolder;

browse_info.pszdisplayname := @folder[0];

browse_info.lpsztitle := pchar(browsetitle);

browse_info.ulflags := bif_returnonlyfsdirs or bif_newdialogstyle;

if initialfolder 关注我收藏该文与我联系


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值